diff options
author | cvs2svn | 2003-03-27 18:18:11 +0000 |
---|---|---|
committer | cvs2svn | 2003-03-27 18:18:11 +0000 |
commit | a3a9b040bf473cba1934fbcf7e36bcb1a6ba7be1 (patch) | |
tree | 0f4bfa977acf83ef08c395fff312aa70aafd877f | |
parent | 29aa471fbd18b05f272531c4fc648d14199ac3a5 (diff) | |
download | eclipse.platform.team-a3a9b040bf473cba1934fbcf7e36bcb1a6ba7be1.tar.gz eclipse.platform.team-a3a9b040bf473cba1934fbcf7e36bcb1a6ba7be1.tar.xz eclipse.platform.team-a3a9b040bf473cba1934fbcf7e36bcb1a6ba7be1.zip |
This commit was manufactured by cvs2svn to create branch 'R2_1_maintenance'.
Sprout from master 2003-03-27 18:18:08 UTC Kevin Macguire <kevinm> 'Typo - "comfirm" -> "confirm"'
Delete:
bundles/org.eclipse.compare/.classpath
bundles/org.eclipse.compare/.cvsignore
bundles/org.eclipse.compare/.project
bundles/org.eclipse.compare/about.html
bundles/org.eclipse.compare/build.properties
bundles/org.eclipse.compare/buildnotes_compare.html
bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java
bundles/org.eclipse.compare/compare/org/eclipse/compare/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/icons/full/clcl16/ancestorpane_co.gif
bundles/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif
bundles/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif
bundles/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif
bundles/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif
bundles/org.eclipse.compare/icons/full/clcl16/next_nav.gif
bundles/org.eclipse.compare/icons/full/clcl16/prev_nav.gif
bundles/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif
bundles/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif
bundles/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif
bundles/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif
bundles/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif
bundles/org.eclipse.compare/icons/full/cview16/compare_view.gif
bundles/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif
bundles/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif
bundles/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif
bundles/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif
bundles/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif
bundles/org.eclipse.compare/icons/full/dlcl16/next_nav.gif
bundles/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif
bundles/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif
bundles/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif
bundles/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif
bundles/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif
bundles/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif
bundles/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif
bundles/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif
bundles/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif
bundles/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif
bundles/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif
bundles/org.eclipse.compare/icons/full/elcl16/next_nav.gif
bundles/org.eclipse.compare/icons/full/elcl16/prev_nav.gif
bundles/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif
bundles/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif
bundles/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif
bundles/org.eclipse.compare/icons/full/etool16/conflict_edit.gif
bundles/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif
bundles/org.eclipse.compare/icons/full/eview16/compare_view.gif
bundles/org.eclipse.compare/icons/full/obj16/day_obj.gif
bundles/org.eclipse.compare/icons/full/obj16/resource_obj.gif
bundles/org.eclipse.compare/icons/full/ovr16/add_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/chg_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/del_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/error_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/indel_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif
bundles/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif
bundles/org.eclipse.compare/plugin.properties
bundles/org.eclipse.compare/plugin.xml
bundles/org.eclipse.compare/plugins/org.eclipse.compare/.classpath
bundles/org.eclipse.compare/plugins/org.eclipse.compare/.cvsignore
bundles/org.eclipse.compare/plugins/org.eclipse.compare/.project
bundles/org.eclipse.compare/plugins/org.eclipse.compare/about.html
bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Attic/LineReader.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java
bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/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/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/schema/contentMergeViewers.exsd
bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentViewers.exsd
bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureCreators.exsd
bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd
bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml
bundles/org.eclipse.compare/schema/contentMergeViewers.exsd
bundles/org.eclipse.compare/schema/contentViewers.exsd
bundles/org.eclipse.compare/schema/structureCreators.exsd
bundles/org.eclipse.compare/schema/structureMergeViewers.exsd
bundles/org.eclipse.compare/scripts/exportplugin.xml
bundles/org.eclipse.team.ui/.classpath
bundles/org.eclipse.team.ui/.cvsignore
bundles/org.eclipse.team.ui/.project
bundles/org.eclipse.team.ui/about.html
bundles/org.eclipse.team.ui/build.properties
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/refresh.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/release_rls.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/site_element.gif
bundles/org.eclipse.team.ui/icons/full/cview16/synch_synch.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/catchup_rls.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/catchuprelease_rls.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/conflict_synch.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/contents.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/ignorews_edit.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/incom_synch.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/outgo_synch.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/refresh.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/release_rls.gif
bundles/org.eclipse.team.ui/icons/full/dlcl16/site_element.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/catchup_rls.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/catchuprelease_rls.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/conflict_synch.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/contents.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/ignorews_edit.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/incom_synch.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/outgo_synch.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/refresh.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/release_rls.gif
bundles/org.eclipse.team.ui/icons/full/elcl16/site_element.gif
bundles/org.eclipse.team.ui/icons/full/obj/export_projectset.gif
bundles/org.eclipse.team.ui/icons/full/obj/import_projectset.gif
bundles/org.eclipse.team.ui/icons/full/obj/share_project.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/ovr/version_controlled.gif
bundles/org.eclipse.team.ui/icons/full/wizban/export_projectset_wizban.gif
bundles/org.eclipse.team.ui/icons/full/wizban/import_projectset_wizban.gif
bundles/org.eclipse.team.ui/icons/full/wizban/share_wizban.gif
bundles/org.eclipse.team.ui/plugin.properties
bundles/org.eclipse.team.ui/plugin.xml
bundles/org.eclipse.team.ui/schema/configurationWizards.exsd
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/DetailsDialog.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DetailsDialogWithProjects.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/IPromptCondition.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/NatureToPropertyAction.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/PromptingDialog.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/AuthenticatedTargetSitePropertiesPage.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/CreateNewFolderAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ExportTargetSiteMainPage.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/GetAsAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAsProjectAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ImportTargetSiteMainPage.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/ProjectTargetMappingPropertiesPage.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/PutSyncAction.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/SiteExplorerViewLabelProvider.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/SyncAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetCatchupReleaseViewer.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/TargetSiteContentHandler.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteExportWizard.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteImportWizard.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncCompareInput.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetWizardPage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.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
bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/package.html
examples/org.eclipse.compare.examples/.cvsignore
examples/org.eclipse.compare.examples/.project
examples/org.eclipse.compare.examples/about.html
examples/org.eclipse.compare.examples/build.properties
examples/org.eclipse.compare.examples/doc-html/hglegal.htm
examples/org.eclipse.compare.examples/doc-html/ngibmcpy.gif
examples/org.eclipse.compare.examples/doc-html/ui_structurecreator_ex.html
examples/org.eclipse.compare.examples/plugin.properties
examples/org.eclipse.compare.examples/plugin.xml
examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/CompareExampleMessages.properties
examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/KeyValuePairStructureCreator.java
examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/TextMergeViewerCreator.java
examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/Util.java
examples/org.eclipse.team.examples.filesystem/.classpath
examples/org.eclipse.team.examples.filesystem/.cvsignore
examples/org.eclipse.team.examples.filesystem/.project
examples/org.eclipse.team.examples.filesystem/about.html
examples/org.eclipse.team.examples.filesystem/build.properties
examples/org.eclipse.team.examples.filesystem/doc-html/hglegal.htm
examples/org.eclipse.team.examples.filesystem/doc-html/ngibmcpy.gif
examples/org.eclipse.team.examples.filesystem/doc-html/team_filesystem_ex.html
examples/org.eclipse.team.examples.filesystem/icons/full/wizards/fsicon_wiz.gif
examples/org.eclipse.team.examples.filesystem/icons/full/wizban/newconnect_wizban.gif
examples/org.eclipse.team.examples.filesystem/plugin.properties
examples/org.eclipse.team.examples.filesystem/plugin.xml
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemPlugin.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemProvider.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemRemoteResource.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemSimpleAccessOperations.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/Policy.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/StreamUtil.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/messages.properties
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ConfigurationWizard.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/DisconnectAction.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemPropertiesPage.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/GetAction.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/PutAction.java
examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ReplaceAction.java
tests/org.eclipse.team.tests.core/.classpath
tests/org.eclipse.team.tests.core/.cvsignore
tests/org.eclipse.team.tests.core/.project
tests/org.eclipse.team.tests.core/about.html
tests/org.eclipse.team.tests.core/build-tests.xml
tests/org.eclipse.team.tests.core/build.properties
tests/org.eclipse.team.tests.core/ftp.properties
tests/org.eclipse.team.tests.core/plugin.xml
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTargetTests.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderOtherSport.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTypeBic.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderWithLinking.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/StreamTests.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetTestSetup.java
tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
tests/org.eclipse.team.tests.core/test.xml
tests/org.eclipse.team.tests.core/webdav.properties
580 files changed, 0 insertions, 73187 deletions
diff --git a/bundles/org.eclipse.compare/.classpath b/bundles/org.eclipse.compare/.classpath deleted file mode 100644 index 8a49fb9d5..000000000 --- a/bundles/org.eclipse.compare/.classpath +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="compare"/> - <classpathentry kind="src" path="/org.eclipse.core.boot"/> - <classpathentry kind="src" path="/org.eclipse.core.runtime"/> - <classpathentry kind="src" path="/org.eclipse.ui"/> - <classpathentry kind="src" path="/org.eclipse.core.resources"/> - <classpathentry kind="src" path="/org.eclipse.swt"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/bundles/org.eclipse.compare/.cvsignore b/bundles/org.eclipse.compare/.cvsignore deleted file mode 100644 index ba077a403..000000000 --- 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 bf7d0f58b..000000000 --- a/bundles/org.eclipse.compare/.project +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.compare</name> - <comment></comment> - <projects> - <project>org.eclipse.core.boot</project> - <project>org.eclipse.ui</project> - <project>org.eclipse.core.runtime</project> - <project>org.eclipse.core.resources</project> - <project>org.eclipse.swt</project> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.pde.PluginNature</nature> - </natures> -</projectDescription> diff --git a/bundles/org.eclipse.compare/about.html b/bundles/org.eclipse.compare/about.html deleted file mode 100644 index 9db411aab..000000000 --- a/bundles/org.eclipse.compare/about.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<html> -<head> -<title>About</title> -<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> -</head> -<body lang="EN-US"> -<h2>About This Content</h2> - -<p>20th June, 2002</p> -<h3>License</h3> -<p>Eclipse.org makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the -Common Public License Version 1.0 ("CPL"). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>. -For purposes of the CPL, "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> - -</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 f9934a8cd..000000000 --- a/bundles/org.eclipse.compare/build.properties +++ /dev/null @@ -1,18 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -source.compare.jar = compare/ -bin.includes = icons/,\ - plugin.xml,\ - *.jar,\ - plugin.properties,\ - about.html -src.includes = about.html,\ - schema/ diff --git a/bundles/org.eclipse.compare/buildnotes_compare.html b/bundles/org.eclipse.compare/buildnotes_compare.html deleted file mode 100644 index 9afaaa08e..000000000 --- a/bundles/org.eclipse.compare/buildnotes_compare.html +++ /dev/null @@ -1,1305 +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 March 27th 2003 - -<h2> -Problem reports fixed</h2> -Fixed 5 Javadoc warnings - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 24th 2003 - -<h2> -Problem reports fixed</h2> -Updated schema copyright notices<br> -updated javadoc - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 19th 2003 - -<h2> -Problem reports fixed</h2> -Fixed wording in properties files<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=35130">#35130</a>: Dialogs do not set the dialog font<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 14th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=34732">#34732</a>: Compare/Patch preference page mnemonic<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=34696">#34696</a>: Title casing issues<br> - - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 6th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27405">#27405</a>: Should consider using the new font propogation support<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24255">#24255</a>: Internal error when invoking "Restore from Local History" in Outline view<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32737">#32737</a>: NegativeArraySizeException: Compare/patch preference page<br> - - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 4th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32769">#32769</a>: Missing mneumonic in compare preference page<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32798">#32798</a>: No mnemonic for ComparePreferencePage.useSingleLine.label<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32207">#32207</a>: Wording: "Open with Compare Editor" action in sync view<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28190">#28190</a>: Middle area should act like sash<br> -added required IDs for compare viewers in plugin.xml<br> - - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 20th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=20248">#20248</a>: [Compare] Have to perform two actions to see diff<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24165">#24165</a>: Should have menu action for showing compare contents<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13332">#13332</a>: autosave before patching: can i undo?<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24077">#24077</a>: Comparing file named 'platformOption' does not use text editor<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=23958">#23958</a>: NPE in compare with patch<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28402">#28402</a>: CompareConfiguration leaks Images<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13844">#13844</a>: TextMergeViewer should keep track of its posted runnables<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14353">#14353</a>: Cannot perform merge with keyboard accelerators/mnemonics<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 18th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5323">#5323</a>: Compare does not handle correctly conflicts at same location<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=26035">#26035</a>: Local history uses wrong character encoding<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=15654">#15654</a>: Can't maximize Compare with Local History window<br> - - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 13th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31136">#31136</a>: Red icon too intrusive<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31357">#31357</a>: Compare View -- Compare-style option required.<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31633">#31633</a>: Cannot apply patch successfully<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10754">#10754</a>: Compare actions should target source window<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 11th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=25507">#25507</a>: Compare view prevents Ctrl + F6 working<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18571">#18571</a>: patch: scary error dialog when no patch in clipboard<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28840">#28840</a>: Strange behavious applying patch<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 6th 2003 (M5 aka RC0) - -<h2> -API Additions</h2> -Added new method EditionSelectionDialog.getSelection() - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=30525">#30525</a>: "Team" menu item missing accelerator<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28202">#28202</a>: contentmergeviewers do not work with mixed-case extensions<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19114">#19114</a>: Restore Java Element from Local History should also provide check boxes [compare]<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28436">#28436</a>: Overview rule green only after focus change<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=29793">#29793</a>: Automatically suggest a fuzz factor when applying a patch<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 28th 2003 - -<h2> -API Additions</h2> -Added new method CompareUI.findContentViewer(..., Object input, ...) - -<h2> -Problem reports fixed</h2> -Remoced doc folder.<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24597">#24597</a>: Compare UI API issues<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=23883">#23883</a>: CompareDialog.commitAction.label string resource name is wrong<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=29791">#29791</a>: Rename 'Compare to Patch' to 'Apply Patch'<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 14th 2003 - -<h2> -Problem reports fixed</h2> -Extension point schema files added.<br> -Resolve status indicator is only shown if there are incoming changes. - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 7th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28278">#28278</a>: TextMergeViewer leaks Color objects<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27864">#27864</a>: Load of CompareUI fails when not triggered in UI thread<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28388">#28388</a>: Illegal Argument Exceptions in compare viewer<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 17th 2002 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28388">#28388</a>: Illegal Argument Exceptions in compare viewer<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 16th 2002 - -<h2> -Problem reports fixed</h2> -Fixed a problem with trim in compare viewer on Mac OS X.<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28278">#28278</a>: TextMergeViewer leaks Color objects<br> - -<hr WIDTH="100%"></h1> -Eclipse Build Input December 13th 2002 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28012">#28012</a>: Double-click behaving strangely in Synchronize View<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 10th 2002 - -<h2> -What's new in this drop</h2> -The Textmergeviewer sports a first cut of a new UI for left/right copying, -showing the 'resolved' status of a change, and uses smooth lines to -connect the differing ranges in the left and right panes. -The new UI options are off by default. You can turn them on -with the three 'experimental' options on the Compare preference page. - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27993">#27993</a>: Incorrect structure comparison<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 3rd 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API Additions</h3> -Made internal class Splitter public API. - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#24597</a>: Compare UI API issues<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input November 26th 2002 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#20975</a>: Compare preference page has no F1 help<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 27th 2002 - -<h2> -What's new in this drop</h2> -Updated JavaDoc package.html files - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 25th 2002 - -<h2> -What's new in this drop</h2> -Updated JavaDoc - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 12th 2002 - -<h2> -What's new in this drop</h2> - -There were several complains that clicking on a zip file in the left pane (structure input pane) feeds all other -compare panes (see bug 13730). There are cases where this is expensive (for example a large zip file that has -to be read from a repository). To avoid those situations the left pane now honors single or double click mode as -set in Preferences->Workbench. So if this preference is set to double click the user has to double click on a file -in the left pane to actually feed all other compare panes. - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 8th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#18807</a>: Compare with patch fails due to missing LF<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13730">#13730</a>: Entire zipfiles content sent prior when computing synchronization view content<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 7th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13730">#13730</a>: Entire zipfiles content sent prior when computing synchronization view content<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14952">#14952</a>: Diff Browser Opens Too Small / Not Easily Resizable<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 6th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -New constant CompareUI.PLUGIN_ID - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13949">#13949</a>: DBCS: bogus at text compare<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19013">#19013</a>: backgronud color: is it honored?<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19216">#19216</a>: Accessibility in Workbench > Compare > Text Compare<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19371">#19371</a>: Java & Compare editor's Next/Previous toolbar buttons shouldn't be retargetable<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 1st 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -Made class NavigationAction public. - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8004">#8004</a>: Ctrl+E beeps every time<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14800">#14800</a>: Compare View eats tabs<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18200">#18200</a>: Both sets of arrows say "Select Next Change"<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18206">#18206</a>: Casing, wording issue on "Last Resource reached" prompt<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16285">#16285</a>: Add from Local History needs a description label<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17431">#17431</a>: Accessibility issues<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18148">#18148</a>: Using combinations of No and Next file button break wrapping<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18151">#18151</a>: Next File button does not ding when on last file<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16570">#16570</a>: Compare refuses to show further differences if not ignoring whitespaces<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10790">#10790</a>: Patch does not apply if file not found locally<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=12643">#12643</a>: Expand all does not disable when there is no selection<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 31st 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18116">#18116</a>: Compare view does not inherit Java editor background color<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13190">#13190</a>: Compare with Patch does not apply Patch, if single file selected<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 30th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17699">#17699</a>: Java Editor: Local Histroy menu entries are enabled for read-only files<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16283">#16283</a>: Add from Local History items are unsorted<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16288">#16288</a>: Add from Local History: list of available editions flashes<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17664">#17664</a>: Applying a patch with deleted package fails<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 29th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14040">#14040</a>: Platform interoperability issue w.r.t. Compare With Patch<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17790">#17790</a>: Missing mnemonics in patch selection dialog<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10917">#10917</a>: Patch support does not use mnemonics<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 28th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17889">#17889</a>: Should not assume type of PropertyChangeEvent values<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17678">#17678</a>: Applying a patch does many compiles<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17536">#17536</a>: NPE in compare<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17121">#17121</a>: Casing of message when end of changes needs to be sentence style<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17648">#17648</a>: Can't apply patch w/o ignoring whitespace<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16936">#16936</a>: Compare with patch requires "Ignore Whitespace" to be turned off<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 18th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14371">#14371</a>: TextMergeViewer.sameDoc() is broken<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14378">#14378</a>: CompareEditorInput never resets dirtyness flag (detailed)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14680">#14680</a>: Compare unreadable in high contrast black<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14952">#14952</a>: Diff Browser Opens Too Small / Not Easily Resizable<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14742">#14742</a>: Ignore whitespace preference<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14624">#14624</a>: No visual cue when compared file wraps<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13606">#13606</a>: Support multiple selection in Add from local history<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 16th 2002 - -<h2> -What's new in this drop</h2> -Bumped plugin version number to 2.0.0<br> -Adapted to new findEditor methods<br> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8373">#8373</a>: Compare With->Patch... missing mnemonic<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=12719">#12719</a>: "Show Pseudo-Conflicts" setting is problematic<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input April 30th 2002 - -<h2> -What's new in this drop</h2> -All strings NLSed. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14515">#14515</a>: java compare uses internal jcore scanner<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14782">#14782</a>: Add from Local History missing mnemonic<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input April 18th 2002 - -<h2> -What's new in this drop</h2> -All strings NLSed. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13152">#13152</a>: Internal error in "Add from Local History..." on packages<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input April 9th 2002 - -<h2> -What's new in this drop</h2> -New context menu action 'Add From Local History'. Just select any resource container and -'Add From Local History' presents all files that were deleted from the workspace but are -still in the local history. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> -The new 'Add From Local History' suffers from #12915. It works if the files were deleted -within the same session. However if you shut down and restart a workspace some deleted -files are nor listed. - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11578">#11578</a>: Patch: Missing resource on dialog<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11579">#11579</a>: Compare with Patch should be disabled on closed projects<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11907">#11907</a>: clicking in bird's eye view spots does nothing if panes not synched<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11536">#11536</a>: Option to turn off structured comparison<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10682">#10682</a>: Need better UI for recovering deletions from local history<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11446">#11446</a>: provide "add from local history" for compilation units<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8615">#8615</a>: Styled Text widget does not respond to system color change<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9673">#9673</a>: editor background color - no effect on other viewers<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11642">#11642</a>: Compare editors not using default background colors<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10434">#10434</a>: Compare browser fails silently and does not give result<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 18th 2002 - -<h2> -What's new in this drop</h2> -First cut of a birdseyeview for the text compare viewer.<br> -'Compare which Each other' for Java elements. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3641">#3641</a>: DCR: Can't compare from outliner (1GDHJKK)<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 14th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11305">#11305</a>: Can't compare a "C" file<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 12th 2002 - -<h2> -What's new in this drop</h2> -Structure Compare viewers are enabled by default.<br> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10379">#10379</a>: Compare with Local History Dialog: lower pane is missing a bordeer<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9768">#9768</a>: (empty-menu) in compare view<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9842">#9842</a>: Expand All action needed in structure compare view<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 5th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9869">#9869</a>: Need more support for creating/deleting resources<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 26th 2002 - -<h2> -What's new in this drop</h2> -Patch: for every rejected file a task marker is added<br> -Compare preference page shows options in a preview<br> -New preference option for additional compare status line information - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9540">#9540</a>: Compare with patch: it should not be possible to check items that could not be applied<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9532">#9532</a>: Compare with patch: next disabled although clipboard specified<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7681">#7681</a>: Structured results expands import statements<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9572">#9572</a>: Debugging trace left in status bar<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 12th 2002 - -<h2> -What's new in this drop</h2> -The patch wizard no longer opens a Compare Editor but applies the -patch directly to the workspace. This will be the default. -In the future the old behavior of opening the Compare Editor will be -an additional option when finishing the wizard. -<br> -Patch wizard has a 'Reverse' option for applying a "reversed" patch. -This option can be used to 'undo' a patch. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9153">#9153</a>: NPE when closing synchronize view<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9331">#9331</a>: NPE during compare with stream version<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6346">#6346</a>: Problems with Patch<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6727">#6727</a>: Patch: *.rej file must be saved in workspace<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7358">#7358</a>: Internal Error in Compare with Patch with new files<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 5th 2002 - -<h2> -What's new in this drop</h2> -The structure compare pane opens when a resource is selected. -In previous version a double click was required. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5063">#5063</a>: Should not have to double-click to open Structure Compare<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2602">#2602</a>: Compare FW accessibility issues (1GK79UB)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2707">#2707</a>: Merge viewer should ask for save before releasing (1GI9JXS)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2772">#2772</a>: DCR: Automatic structure compare (1GJ6EUY)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3829">#3829</a>: Smart rename button enabled when no smartness is available (1GEUVHN)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9089">#9089</a>: Local history - Selecting item in structured compare has no effect<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 29th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6271">#6271</a>: Can't tell which file is which in Compare browser<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2519">#2519</a>: next/prev arrows active when only one difference in compare (1GFIQX3)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8363">#8363</a>: NPE comparing two resources in the navigator.<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2501">#2501</a>: Empty menu in compare browser (1GFBQKE)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2854">#2854</a>: Compare: Save code path problematic (1GJYGAX)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8574">#8574</a>: Not structure compare in compare with local history<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 23th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8089">#8089</a>: Replace from local history: parse error<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 22th 2002 - -<h2> -What's new in this drop</h2> -Fixed an inconsistency in the binary compare viewer: -info message didn't match +/-icon in the resource compare pane. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3859">#3859</a>: replace from history does not work for elements with error (1GEYIZ6)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6177">#6177</a>: Double click action dangerous in 'Restore from Local History'<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7821">#7821</a>: Team 2.0 CVS synchronze bug 'no-name' dirs..<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2773">#2773</a>: Java structure compare should give better indication when no changes (1GJ6ENE)<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 15th 2002 - -<h2> -What's new in this drop</h2> -Fixed a problem in DiffNode.getName()and the DiffTreeViewer's label provider -where the left and right half of a DiffNode label would be reversed because -the "leftIsLocal" property of a CompareConfiguration wasn't obeyed. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1893">#1893</a>: Compare Viewer doesn't scroll to last line (1GBB34N)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5839">#5839</a>: Usability: Initial diff is sometimes not horizontally aligned<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5325">#5325</a>: Compare always scroll the text pane to the extreme limit<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7048">#7048</a>: First element not selected<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2548">#2548</a>: Project compare should open viewing selected file (1GFMRP6)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2938">#2938</a>: Replace from local history should show busy cursor (1GKU0P3)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7594">#7594</a>: Menu entry "Replace with Previous" shouldn't have a "..."<br> -Workaround added for:<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7320">#7320</a>: Next diff scrolls when going into current diff<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 8th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -Added methods to CompareUI plugin for adding and removing aliases -for the file extension to StructureCompareViewer mapping -(addStructureViewerAlias, removeStructureViewerAlias). - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6828">#6828</a>: Support with replace with previous<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2396">#2396</a>: Save in compare editors needs progress bar (1GEYF58)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5271">#5271</a>: JARs compared as source in release browser<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5121">#5121</a>: Replace with Previous (from local history)<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 11th 2001 - -<h2> -What's new in this drop</h2> -Keyboard shortcuts for 'Goto next Difference' and 'Goto previous Difference' -changed to Control-E and Control-Shift-E.<br> -Better NLS support.<br> -Updated file "about.html". - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 4th 2001 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4381">#4381</a>: Replace from local histroy - workspace element included <br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input November 27th 2001 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6298">#6298</a>: Replace with Local History: Workbench -> Workspace<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5238">#5238</a>: Compare fails if takes more than 20 seconds<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 210, November 12th, 2001 - -<h2> -What's new in this drop</h2> -First cut for 'rejected hunk' support. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -new classes CompareViewerPane and CompareViewerSwitchingPane<br> - -<h3> -Other highlights</h3> -Improved Patch wizard.<br> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5723">#5723</a>: Apply Patch dialog has no radio selection<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 207, November 1st, 2001 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5334">#5334: Internal errors using patch tool</a><br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5150">#5150: Compare with patch cannot read VCM's CVS patch file</a><br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 204, October 12th, 2001 - -<h2> -What's new in this drop</h2> -First cut of patch support. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 202, September 27th, 2001 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -1GKKUA5: ITPUI:WINNT - Severe: memory leak in sync view<br> -1GKKGGS: ITPJUI:WIN2000 - (136) compares zips as source<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 201, September 21st, 2001 - -<h2> -What's new in this drop</h2> -removed direction icon in TextMergeViewer for two-way compare - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -1GJURWJ: ITPUI:WIN2000 - Hebrew + Japanese: compare view defaults to binary<br> -1GK0388: ITPJCORE:WIN2000 - replace with local history: selecting (workspace) deletes source<br> -1GITG2V: ITPUI:WIN2000 - Comparing html files uses binary compare<br> -1GJW2TP: ITPJUI:WIN2000 - java compare: why beep every time?<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 200, September 13th, 2001 - -<h2> -What's new in this drop</h2> -If not specified otherwise Compare viewer font is taken from workbench text font<br> -The shortcut for "Goto Next/Previous Difference" is Ctrl-D/Ctrl-Shift-D -to avoid a clash with Ctrl-P of the Print command. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -new method EditionSelectionDialog.setHideIdenticalEntries(boolean)<br> -new method EditionSelectionDialog.setTargetIsRight(boolean)<br> -new method EditionSelectionDialog.setAddMode(boolean)<br> -new method CompareEditorInput.saveChanges(...)<br> -new method TextMergeViewer.createLineComparator(IDocument document, IRegion region, boolean ignoreWhiteSpace)<br> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty<br> -1GG0ELM: ITPVCM:ALL - Local history displayed some of Today's items as Yesterday<br> -1GGNKHN: ITPJUI:ALL - No progress during replace with local history<br> -1GF2JNI: ITPUI:ALL - (minor)Compare failed title should be title case<br> -1GHBPA1: ITPVCM:WINNT - Compare - next change arrow switches to wrong file<br> -1GGQQH3: ITPJUI:WINNT - Compare hightlights a non-change instead of the change<br> -1GI5DN9: ITPUI:WIN2000 - Conflicting token deletions don't show up in text compare viewer<br> -1GI3KUR: ITPJUI:WIN2000 - Compare: double-click in versions list closes view<br> -1GFFR4B: ITPUI:WIN98 - local history is misleading<br> -1GBM0IL: ITPUI:WINNT - CompareEditorInput#save should throw CoreException<br> -1GI99LE: ITPUI:ALL - Compare viewer does not show last line when horizontal scroll bar is present<br> -1GBB34N: ITPJUI:WIN2000 - Compare Viewer doesn't scroll to last line<br> -1GGZ8DO: ITPJUI:WIN - MergeViewer invalid selection range<br> -1GIIBHM: ITPUI:WIN2000 - Problems when comparing zip files<br> -1GIKKOZ: ITPUI:ALL - alt copyright text in html doc needs update<br> -1GIURNB: ITPUI:ALL - property file of EditionSelectionDialog contains configuration options<br> -1GIUS6L: ITPUI:ALL - TextMergeViewer uses deprecated Thread.stop()<br> -1GI3HDZ: ITPJUI:ALL - Compare: conflicts with no ancestor does not show differences<br> -1GEUX0D: ITPJUI:ALL - not state aware toolbar button in compare<br> - -<h2> -Problem reports closed</h2> -1GF9Y9C: ITPUI:WIN2000 - DCR: only get ancestor pane contents if pane is visible<br> - -</body> -</html> diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java deleted file mode 100644 index 2f87cb105..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.*; -import org.eclipse.jface.util.ListenerList; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.internal.Utilities; - -/** - * Abstract implementation for a buffered <code>IStreamContentAccessor</code>. - * <p> - * Subclasses must implement the <code>createStream</code> method - * to connect the buffered content with a streamable source (e.g., a file). - * <p> - * As long as the contents of <code>BufferedContent</code> is only retrieved as an input stream - * (by means of <code>getContents</code>) and the <code>BufferedContent</code> is not modified (with - * <code>setContent</code>) no buffering takes place. - * Buffering starts when either method <code>getContent</code> or <code>setContent</code> is called. - * - * @see IContentChangeNotifier - * @see IStreamContentAccessor - */ -public abstract class BufferedContent implements IContentChangeNotifier, IStreamContentAccessor { - - byte[] fContent; - private ListenerList fListenerList; - - /** - * Creates a buffered stream content accessor. - */ - protected BufferedContent() { - } - - /* (non-Javadoc) - * see IStreamContentAccessor.getContents - */ - public InputStream getContents() throws CoreException { - if (fContent != null) - return new ByteArrayInputStream(fContent); - return createStream(); - } - - /** - * Creates and returns a stream for reading the contents. - * <p> - * Subclasses must implement this method. - * </p> - * - * @return the stream from which the content is read - * @exception CoreException if the contents could not be accessed - */ - protected abstract InputStream createStream() throws CoreException; - - /** - * Sets the contents. Registered content change listeners are notified. - * - * @param contents the new contents - */ - public void setContent(byte[] contents) { - fContent= contents; - fireContentChanged(); - } - - /** - * Returns the contents as an array of bytes. - * - * @return the contents as an array of bytes, or <code>null</code> if - * the contents could not be accessed - */ - public byte[] getContent() { - if (fContent == null) { - try { - InputStream is= createStream(); - fContent= Utilities.readBytes(is); - } catch(CoreException ex) { - } - } - return fContent; - } - - /** - * Discards the buffered content. - */ - public void discardBuffer() { - fContent= null; - } - - /* (non-Javadoc) - * see IContentChangeNotifier.addChangeListener - */ - public void addContentChangeListener(IContentChangeListener listener) { - if (fListenerList == null) - fListenerList= new ListenerList(); - fListenerList.add(listener); - } - - /* (non-Javadoc) - * see IContentChangeNotifier.removeChangeListener - */ - public void removeContentChangeListener(IContentChangeListener listener) { - if (fListenerList != null) { - fListenerList.remove(listener); - if (fListenerList.isEmpty()) - fListenerList= null; - } - } - - /** - * Notifies all registered <code>IContentChangeListener</code>s of a content change. - */ - protected void fireContentChanged() { - if (fListenerList != null) { - Object[] listeners= fListenerList.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((IContentChangeListener)listeners[i]).contentChanged(this); - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java deleted file mode 100644 index 4fe3a8a7d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java +++ /dev/null @@ -1,445 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.util.HashMap; - -import org.eclipse.swt.graphics.*; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.util.*; -import org.eclipse.jface.preference.IPreferenceStore; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.structuremergeviewer.Differencer; - -/** - * A <code>CompareConfiguration</code> object - * controls various UI aspects of compare/merge viewers like - * title labels and images, or whether a side of a merge viewer is editable. - * In addition to these fixed properties <code>ICompareConfiguration</code> provides - * API for an open ended set of properties. Different viewers which share the same - * configuration can communicate via this mechanism. E.g. if a compare editor - * has a button for controlling whether compare viewers ignore white space, - * the button would trigger a change of the boolean <code>IGNORE_WHITESPACE</code> property - * and all interested viewers would receive notification. - * <p> - * Suitable default labels are provided (without images); both the left and right sides - * are editable. - * </p> - * <p> - * Clients may use this class as is, or subclass to add new state and behavior. - * </p> - */ -public class CompareConfiguration { - - /** - * Name of the ignore whitespace property (value <code>"IGNORE_WHITESPACE"</code>). - */ - public static final String IGNORE_WHITESPACE= "IGNORE_WHITESPACE"; //$NON-NLS-1$ - /** - * Name of the show pseudo conflicts property (value <code>"SHOW_PSEUDO_CONFLICTS"</code>). - */ - public static final String SHOW_PSEUDO_CONFLICTS= "SHOW_PSEUDO_CONFLICTS"; //$NON-NLS-1$ - - - private static final int WIDTH= 22; - - private static ImageDescriptor[] fgImages= new ImageDescriptor[16]; - private static Object fgDummy= new Object(); - private static HashMap fgMap= new HashMap(20); - private static boolean fLeftIsLocal= true; - - static { - if (fLeftIsLocal) { - fgImages[Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.LEFT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/r_inadd_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/r_outadd_ov.gif"); //$NON-NLS-1$ - - fgImages[Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.LEFT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/r_indel_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/r_outdel_ov.gif"); //$NON-NLS-1$ - - fgImages[Differencer.LEFT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/r_inchg_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/r_outchg_ov.gif"); //$NON-NLS-1$ - } else { - fgImages[Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.LEFT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/inadd_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/outadd_ov.gif"); //$NON-NLS-1$ - - fgImages[Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.LEFT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/indel_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/outdel_ov.gif"); //$NON-NLS-1$ - - fgImages[Differencer.LEFT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/inchg_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/outchg_ov.gif"); //$NON-NLS-1$ - } - - fgImages[Differencer.CONFLICTING + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/confadd_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.CONFLICTING + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/confdel_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.CONFLICTING + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/confchg_ov.gif"); //$NON-NLS-1$ - } - - private IPreferenceStore fPreferenceStore; - private ListenerList fListeners= new ListenerList(); - private HashMap fProperties= new HashMap(); - private boolean fLeftEditable= true; - private boolean fRightEditable= true; - private String fAncestorLabel; - private String fLeftLabel; - private String fRightLabel; - private Image fAncestorImage; - private Image fRightImage; - private Image fLeftImage; - private Image[] fImages= new Image[16]; - - /** - * Creates a new configuration with editable left and right sides, - * suitable default labels, and no images. - * The given preference store is used to connect this configuration - * with the Compare preference page properties <code>ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE</code>, - * and <code>CompareConfiguration.IGNORE_WHITESPACE</code>. - * - * @param prefStore the preference store which this configuration holds onto. - * @since 2.0 - */ - public CompareConfiguration(IPreferenceStore prefStore) { - - setProperty("LEFT_IS_LOCAL", new Boolean(fLeftIsLocal)); //$NON-NLS-1$ - - fPreferenceStore= prefStore; - if (fPreferenceStore != null) { - boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE); - setProperty(ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE, new Boolean(b)); - - b= fPreferenceStore.getBoolean(ComparePreferencePage.IGNORE_WHITESPACE); - setProperty(CompareConfiguration.IGNORE_WHITESPACE, new Boolean(b)); - } - } - - /** - * Creates a new configuration with editable left and right sides, - * suitable default labels, and no images. - * This configuration uses the preference store of the Compare plugin - * (<code>CompareUIPlugin.getDefault().getPreferenceStore()</code>). - */ - public CompareConfiguration() { - this(CompareUIPlugin.getDefault().getPreferenceStore()); - } - - /** - * Returns the preference store of this configuration. - * @return the preference store of this configuration. - * @since 2.0 - */ - public IPreferenceStore getPreferenceStore() { - return fPreferenceStore; - } - - /** - * Returns an image showing the specified change kind. - * The different kind of changes are defined in the <code>Differencer</code>. - * Newly created images are remembered by this class and - * disposed when the <code>dispose</code> method is called. - * - * @param kind the kind of change as defined in <code>Differencer</code>. - * @return an modification of the base image reflecting the kind of change. - * @see org.eclipse.compare.structuremergeviewer.Differencer - * @since 2.0 - */ - public Image getImage(int kind) { - Image image= fImages[kind & 15]; - if (image == null) { - ImageDescriptor id= fgImages[kind & 15]; - if (id != null) - image= id.createImage(); - fImages[kind & 15]= image; - } - return image; - } - - /** - * Returns an image showing the specified change kind applied to a - * given base image. The different kind of changes are defined in the <code>Differencer</code>. - * Typically an implementation would build a composite image - * from the given base image and an image representing the change kind. - * Newly created images are remembered by this class and - * disposed when the <code>dispose</code> method is called. - * - * @param base the image which is modified to reflect the kind of change - * @param kind the kind of change as defined in <code>Differencer</code>. - * @return an modification of the base image reflecting the kind of change. - * @see org.eclipse.compare.structuremergeviewer.Differencer - */ - public Image getImage(Image base, int kind) { - - Object key= base; - if (key == null) - key= fgDummy; - - kind &= 15; - - Image[] a= (Image[]) fgMap.get(key); - if (a == null) { - a= new Image[16]; - fgMap.put(key, a); - } - Image b= a[kind]; - if (b == null) { - b= new DiffImage(base, fgImages[kind], WIDTH, !fLeftIsLocal).createImage(); - CompareUI.disposeOnShutdown(b); - a[kind]= b; - } - return b; - } - - /** - * Dispose of this compare configuration. - * This method is called if the compare configuration is no longer used. - * An implementation must dispose of all resources. - */ - public void dispose() { - if (fImages != null) { - for (int i= 0; i < fImages.length; i++){ - Image image= fImages[i]; - if (image != null && !image.isDisposed()) - image.dispose(); - } - } - fImages= null; - } - - /** - * Fires a <code>PropertyChangeEvent</code> to registered listeners. - * - * @param propertyName the name of the property that has changed - * @param oldValue the property's old value - * @param newValue the property's new value - */ - private void fireChange(String propertyName, Object oldValue, Object newValue) { - PropertyChangeEvent event= null; - Object[] listeners= fListeners.getListeners(); - if (listeners != null) { - for (int i= 0; i < listeners.length; i++) { - IPropertyChangeListener l= (IPropertyChangeListener) listeners[i]; - if (event == null) - event= new PropertyChangeEvent(this, propertyName, oldValue, newValue); - l.propertyChange(event); - } - } - } - - /* (non javadoc) - * see IPropertyChangeNotifier.addListener - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - fListeners.add(listener); - } - - /* (non javadoc) - * see IPropertyChangeNotifier.removeListener - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - fListeners.remove(listener); - } - - /** - * Sets the property with the given name. - * If the new value differs from the old a <code>PropertyChangeEvent</code> - * is sent to registered listeners. - * - * @param propertyName the name of the property to set - * @param value the new value of the property - */ - public void setProperty(String key, Object newValue) { - Object oldValue= fProperties.get(key); - fProperties.put(key, newValue); - if (oldValue == null || !oldValue.equals(newValue)) - fireChange(key, oldValue, newValue); - } - - /** - * Returns the property with the given name, or <code>null</code> - * if no such property exists. - * - * @param propertyName the name of the property to retrieve - * @return the property with the given name, or <code>null</code> if not found - */ - public Object getProperty(String key) { - return fProperties.get(key); - } - - //---- ancestor - - /** - * Sets the label to use for the ancestor of compare/merge viewers. - * - * @param label the new label for the ancestor of compare/merge viewers - */ - public void setAncestorLabel(String label) { - fAncestorLabel= label; - } - - /** - * Returns the label for the ancestor side of compare/merge viewers. - * This label is typically shown in the title of the ancestor area in a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the label for the ancestor side or <code>null</code> - */ - public String getAncestorLabel(Object element) { - return fAncestorLabel; - } - - /** - * Sets the image to use for the ancestor of compare/merge viewers. - * The CompareConfiguration does not automatically dispose the old image. - * - * @param image the new image for the ancestor of compare/merge viewers - */ - public void setAncestorImage(Image image) { - fAncestorImage= image; - } - - /** - * Returns the image for the ancestor side of compare/merge viewers. - * This image is typically shown in the title of the ancestor area in a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the image for the ancestor side or <code>null</code> - */ - public Image getAncestorImage(Object element) { - return fAncestorImage; - } - - //---- left side - - /** - * Controls whether the left side of a merge viewer is editable. - * - * @param editable if the value is <code>true</code> left side is editable - */ - public void setLeftEditable(boolean editable) { - fLeftEditable= editable; - } - - /** - * Returns whether the left hand side of a merge viewer is editable. - * - * @return <code>true</code> if the left hand side is editable - */ - public boolean isLeftEditable() { - return fLeftEditable; - } - - /** - * Sets the label to use for the left side of compare/merge viewers. - * - * @param label the new label for the left side of compare/merge viewers - */ - public void setLeftLabel(String label) { - fLeftLabel= label; - } - - /** - * Returns the label for the left hand side of compare/merge viewers. - * This label is typically shown in the title of the left side of a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the label for the left hand side or <code>null</code> - */ - public String getLeftLabel(Object element) { - return fLeftLabel; - } - - /** - * Sets the image to use for the left side of compare/merge viewers. - * The compare configuration does not automatically dispose the old image. - * - * @param image the new image for the left side of compare/merge viewers - */ - public void setLeftImage(Image image) { - fLeftImage= image; - } - - /** - * Returns the image for the left hand side of compare/merge viewers. - * This image is typically shown in the title of the left side of a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the image for the left hand side or <code>null</code> - */ - public Image getLeftImage(Object element) { - return fLeftImage; - } - - //---- right side - - /** - * Controls whether the right side of a merge viewer is editable. - * - * @param editable if the value is <code>true</code> right side is editable - */ - public void setRightEditable(boolean editable) { - fRightEditable= editable; - } - - /** - * Returns whether the right hand side of a merge viewer is editable. - * - * @return <code>true</code> if the right hand side is editable - */ - public boolean isRightEditable() { - return fRightEditable; - } - - /** - * Sets the label to use for the right side of compare/merge viewers. - * - * @param label the new label for the right side of compare/merge viewers - */ - public void setRightLabel(String label) { - fRightLabel= label; - } - - /** - * Returns the label for the right hand side of compare/merge viewers. - * This label is typically shown in the title of the right side of a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the label for the right hand side or <code>null</code> - */ - public String getRightLabel(Object element) { - return fRightLabel; - } - - /** - * Sets the image to use for the right side of compare/merge viewers. - * The compare configuration does not automatically dispose the old image. - * - * @param image the new image for the right side of compare/merge viewers - */ - public void setRightImage(Image image) { - fRightImage= image; - } - - /** - * Returns the image for the right hand side of compare/merge viewers. - * This image is typically shown in the title of the right side of a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the image for the right hand side or <code>null</code> - */ - public Image getRightImage(Object element) { - return fRightImage; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java deleted file mode 100644 index 76724e721..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java +++ /dev/null @@ -1,749 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.lang.reflect.InvocationTargetException; - -import java.util.ArrayList; -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.custom.BusyIndicator; - -import org.eclipse.core.runtime.*; -import org.eclipse.ui.IPersistableElement; -import org.eclipse.ui.IEditorInput; - -import org.eclipse.jface.util.*; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.action.ToolBarManager; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.resource.ImageDescriptor; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * A compare operation which can present its results in a special editor. - * Running the compare operation and presentating the results in a compare editor - * are combined in one interface because it allows a client to keep the implementation - * all in one place while separating it from the innards of a specific UI implementation of compare/merge. - * <p> - * A <code>CompareEditorInput</code> defines methods for the following sequence steps: - * <UL> - * <LI>running a lengthy compare operation under progress monitor control, - * <LI>creating a UI for displaying the model and initializing the some widgets with the compare result, - * <LI>tracking the dirty state of the model in case of merge, - * <LI>saving the model. - * </UL> - * The Compare plug-in's <code>openCompareEditor</code> method takes an <code>ICompareEditorInput</code> - * and starts sequencing through the above steps. If the compare result is not empty a new compare editor - * is opened and takes over the sequence until eventually closed. - * <p> - * The <code>prepareInput</code> method should contain the - * code of the compare operation. It is executed under control of a progress monitor - * and can be canceled. If the result of the compare is not empty, that is if there are differences - * that needs to be presented, the <code>ICompareEditorInput</code> should hold onto them and return them with - * the <code>getCompareResult</code> method. - * If the value returned from <code>getCompareResult</code> is not <code>null</code> - * a compare editor is opened on the <code>ICompareEditorInput</code> with title and title image initialized by the - * corresponding methods of the <code>ICompareEditorInput</code>. - * <p> - * Creation of the editor's SWT controls is delegated to the <code>createContents</code> method. - * Here the SWT controls must be created and initialized with the result of the compare operation. - * <p> - * If merging is allowed, the modification state of the compared constituents must be tracked and the dirty - * state returned from method <code>isSaveNeeded</code>. The value <code>true</code> triggers a subsequent call - * to <code>save</code> where the modified resources can be saved. - * <p> - * The most important part of this implementation is the setup of the compare/merge UI. - * The UI uses a simple browser metaphor to present compare results. - * The top half of the layout shows the structural compare results (e.g. added, deleted, and changed files), - * the bottom half the content compare results (e.g. textual differences between two files). - * A selection in the top pane is fed to the bottom pane. If a content viewer is registered - * for the type of the selected object, this viewer is installed in the pane. - * In addition if a structure viewer is registered for the selection type the top pane - * is split horizontally to make room for another pane and the structure viewer is installed - * in it. When comparing Java files this second structure viewer would show the structural - * differences within a Java file, e.g. added, deleted or changed methods and fields. - * <p> - * Subclasses provide custom setups, e.g. for a Catchup/Release operation - * by passing a subclass of <code>CompareConfiguration</code> and by implementing the <code>prepareInput</code> method. - * If a subclass cannot use the <code>DiffTreeViewer</code> which is installed by default in the - * top left pane, method <code>createDiffViewer</code> can be overridden. - * - * @see CompareUI - * @see CompareEditorInput - */ -public abstract class CompareEditorInput implements IEditorInput, IPropertyChangeNotifier, IRunnableWithProgress { - - private static final boolean DEBUG= false; - - /** - * The name of the "dirty" property (value <code>"DIRTY_STATE"</code>). - */ - public static final String DIRTY_STATE= "DIRTY_STATE"; //$NON-NLS-1$ - - private static final String COMPARE_EDITOR_IMAGE_NAME= "cview16/compare_view.gif"; //$NON-NLS-1$ - private static Image fgTitleImage; - - private Splitter fComposite; - private CompareConfiguration fCompareConfiguration; - private CompareViewerSwitchingPane fStructureInputPane; - private CompareViewerSwitchingPane fStructurePane1; - private CompareViewerSwitchingPane fStructurePane2; - private CompareViewerSwitchingPane fContentInputPane; - private CompareViewerSwitchingPane fFocusPane; - private String fMessage; - private Object fInput; - private String fTitle; - private ListenerList fListenerList= new ListenerList(); - private CompareNavigator fNavigator; - private boolean fDirty= false; - private ArrayList fDirtyViewers= new ArrayList(); - private IPropertyChangeListener fDirtyStateListener; - - private IgnoreWhiteSpaceAction fIgnoreWhitespace; - private ShowPseudoConflicts fShowPseudoConflicts; - - boolean fStructureCompareOnSingleClick= true; - - /** - * Creates a <code>CompareEditorInput</code> which is initialized with the given - * compare configuration. - * The compare configuration is passed to subsequently created viewers. - * - * @param configuration the compare configuration - */ - public CompareEditorInput(CompareConfiguration configuration) { - fCompareConfiguration= configuration; - Assert.isNotNull(configuration); - - ResourceBundle bundle= CompareUIPlugin.getResourceBundle(); - fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, configuration); - fShowPseudoConflicts= new ShowPseudoConflicts(bundle, configuration); - - fDirtyStateListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent e) { - String propertyName= e.getProperty(); - if (CompareEditorInput.DIRTY_STATE.equals(propertyName)) { - boolean changed= false; - Object newValue= e.getNewValue(); - if (newValue instanceof Boolean) - changed= ((Boolean)newValue).booleanValue(); - setDirty(e.getSource(), changed); - } - } - }; - - IPreferenceStore ps= configuration.getPreferenceStore(); - if (ps != null) - fStructureCompareOnSingleClick= ps.getBoolean(ComparePreferencePage.OPEN_STRUCTURE_COMPARE); - } - - private boolean structureCompareOnSingleClick() { - return fStructureCompareOnSingleClick; - } - - /* (non Javadoc) - * see IAdaptable.getAdapter - */ - public Object getAdapter(Class adapter) { - if (CompareNavigator.class.equals(adapter)) { - if (fNavigator == null) - fNavigator= new CompareNavigator( - new CompareViewerSwitchingPane[] { - fStructureInputPane, - fStructurePane1, - fStructurePane2, - fContentInputPane - } - ); - return fNavigator; - } - return null; - } - - /* (non Javadoc) - * see IEditorInput.getImageDescriptor - */ - public ImageDescriptor getImageDescriptor() { - return null; - } - - /* (non Javadoc) - * see IEditorInput.getToolTipText - */ - public String getToolTipText() { - return getTitle(); - } - - /* (non Javadoc) - * see IEditorInput.getName - */ - public String getName() { - return getTitle(); - } - - /** - * Returns <code>null</code> since this editor cannot be persisted. - * - * @return <code>null</code> because this editor cannot be persisted - */ - public IPersistableElement getPersistable() { - return null; - } - - /** - * Returns <code>false</code> to indicate that this input - * should not appear in the "File Most Recently Used" menu. - * - * @return <code>false</code> - */ - public boolean exists() { - return false; - } - - /* - * FIXME! - */ - protected void setMessage(String message) { - fMessage= message; - } - - /* - * FIXME! - */ - public String getMessage() { - return fMessage; - } - - /** - * Returns the title which will be used in the compare editor's title bar. - * It can be set with <code>setTitle</code>. - * - * @return the title - */ - public String getTitle() { - if (fTitle == null) - return Utilities.getString("CompareEditorInput.defaultTitle"); //$NON-NLS-1$ - return fTitle; - } - - /** - * Sets the title which will be used when presenting the compare result. - * This method must be called before the editor is opened. - * - * @param title the title to use for the CompareEditor - */ - public void setTitle(String title) { - fTitle= title; - } - - /** - * Returns the title image which will be used in the compare editor's title bar. - * Returns the title image which will be used when presenting the compare result. - * This implementation returns a generic compare icon. - * Subclasses can override. - * - * @return the title image, or <code>null</code> if none - */ - public Image getTitleImage() { - if (fgTitleImage == null) { - fgTitleImage= CompareUIPlugin.getImageDescriptor(COMPARE_EDITOR_IMAGE_NAME).createImage(); - CompareUI.disposeOnShutdown(fgTitleImage); - } - return fgTitleImage; - } - - /** - * Returns the configuration object for the viewers within the compare editor. - * Returns the configuration which was passed to the constructor. - * - * @return the compare configuration - */ - public CompareConfiguration getCompareConfiguration() { - return fCompareConfiguration; - } - - /** - * Adds standard actions to the given <code>ToolBarManager</code>. - * <p> - * Subclasses may override to add their own actions. - * </p> - * - * @param toolBarManager the <code>ToolBarManager</code> to which to contribute - */ - public void contributeToToolBar(ToolBarManager toolBarManager) { - - toolBarManager.add(new Separator()); - toolBarManager.add(fIgnoreWhitespace); - toolBarManager.add(fShowPseudoConflicts); - } - - /** - * Runs the compare operation and stores the compare result. - * - * @param monitor the progress monitor to use to display progress and receive - * requests for cancelation - * @exception InvocationTargetException if the <code>prepareInput</code> method must propagate a checked exception, - * it should wrap it inside an <code>InvocationTargetException</code>; runtime exceptions are automatically - * wrapped in an <code>InvocationTargetException</code> by the calling context - * @exception InterruptedException if the operation detects a request to cancel, - * using <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing - * <code>InterruptedException</code> - */ - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - fInput= prepareInput(monitor); - } - - /** - * Runs the compare operation and returns the compare result. - * If <code>null</code> is returned no differences were found and no compare editor needs to be opened. - * Progress should be reported to the given progress monitor. - * A request to cancel the operation should be honored and acknowledged - * by throwing <code>InterruptedException</code>. - * <p> - * Note: this method is typically called in a modal context thread which doesn't have a Display assigned. - * Implementors of this method shouldn't therefore allocated any SWT resources in this method. - * </p> - * - * @param monitor the progress monitor to use to display progress and receive - * requests for cancelation - * @return the result of the compare operation, or <code>null</code> if there are no differences - * @exception InvocationTargetException if the <code>prepareInput</code> method must propagate a checked exception, - * it should wrap it inside an <code>InvocationTargetException</code>; runtime exceptions are automatically - * wrapped in an <code>InvocationTargetException</code> by the calling context - * @exception InterruptedException if the operation detects a request to cancel, - * using <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing - * <code>InterruptedException</code> - */ - protected abstract Object prepareInput(IProgressMonitor monitor) - throws InvocationTargetException, InterruptedException; - - /** - * Returns the compare result computed by the most recent call to the - * <code>run</code> method. Returns <code>null</code> if no - * differences were found. - * - * @return the compare result prepared in method <code>prepareInput</code> - * or <code>null</code> if there were no differences - */ - public Object getCompareResult() { - return fInput; - } - - /** - * Create the SWT controls that are used to display the result of the compare operation. - * Creates the SWT Controls and sets up the wiring between the individual panes. - * This implementation creates all four panes but makes only the necessary ones visible. - * Finally it feeds the compare result into the top left structure viewer - * and the content viewer. - * <p> - * Subclasses may override if they need to change the layout or wiring between panes. - * - * @param parent the parent control under which the control must be created - * @return the SWT control hierarchy for the compare editor - */ - public Control createContents(Composite parent) { - - fComposite= new Splitter(parent, SWT.VERTICAL); - fComposite.setData(this); - - final Splitter h= new Splitter(fComposite, SWT.HORIZONTAL); - - fStructureInputPane= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof DiffNode) { - DiffNode dn= (DiffNode) input; - if (dn.hasChildren()) - return createDiffViewer(this); - } - if (input instanceof ICompareInput) - return findStructureViewer(oldViewer, (ICompareInput)input, this); - return null; - } - }; - fFocusPane= fStructureInputPane; - - fStructurePane1= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof ICompareInput) - return findStructureViewer(oldViewer, (ICompareInput)input, this); - return null; - } - }; - h.setVisible(fStructurePane1, false); - - fStructurePane2= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof ICompareInput) - return findStructureViewer(oldViewer, (ICompareInput)input, this); - return null; - } - }; - h.setVisible(fStructurePane2, false); - - fContentInputPane= new CompareViewerSwitchingPane(fComposite, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof ICompareInput) - return findContentViewer(oldViewer, (ICompareInput)input, this); - return null; - } - }; - fComposite.setVisible(h, false); - fComposite.setVisible(fContentInputPane, true); - - fComposite.setWeights(new int[] { 30, 70 }); - - fComposite.layout(); - - // setup the wiring for top left pane - fStructureInputPane.addOpenListener( - new IOpenListener() { - public void open(OpenEvent oe) { - feed1(oe.getSelection()); - } - } - ); - fStructureInputPane.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - ISelection s= e.getSelection(); - if (s == null || s.isEmpty()) - feed1(s); - } - } - ); - fStructureInputPane.addDoubleClickListener( - new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - feedDefault1(event.getSelection()); - } - } - ); - - fStructurePane1.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - feed2(e.getSelection()); - } - } - ); - - fStructurePane2.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - feed3(e.getSelection()); - } - } - ); - - if (fInput instanceof ICompareInput) { - fStructureInputPane.setInput((ICompareInput) fInput); - ISelection sel= fStructureInputPane.getSelection(); - if (sel == null || sel.isEmpty()) - feed1(sel); // we only feed downstream viewers if the top left pane is empty - } - - fComposite.setData("Nav", //$NON-NLS-1$ - new CompareViewerSwitchingPane[] { - fStructureInputPane, - fStructurePane1, - fStructurePane2, - fContentInputPane - } - ); - - return fComposite; - } - - private void feed1(final ISelection selection) { - BusyIndicator.showWhile(fComposite.getDisplay(), - new Runnable() { - public void run() { - if (selection == null || selection.isEmpty()) { - Object input= fStructureInputPane.getInput(); - fContentInputPane.setInput(input); - fStructurePane2.setInput(null); // clear downstream pane - fStructurePane1.setInput(null); - } else { - Object input= getElement(selection); - fContentInputPane.setInput(input); - if (structureCompareOnSingleClick()) - fStructurePane1.setInput(input); - fStructurePane2.setInput(null); // clear downstream pane - if (fStructurePane1.getInput() != input) - fStructurePane1.setInput(null); - } - } - } - ); - } - - private void feedDefault1(final ISelection selection) { - BusyIndicator.showWhile(fComposite.getDisplay(), - new Runnable() { - public void run() { - if (!selection.isEmpty()) - fStructurePane1.setInput(getElement(selection)); - } - } - ); - } - - private void feed2(final ISelection selection) { - BusyIndicator.showWhile(fComposite.getDisplay(), - new Runnable() { - public void run() { - if (selection.isEmpty()) { - Object input= fStructurePane1.getInput(); - fContentInputPane.setInput(input); - fStructurePane2.setInput(null); - } else { - Object input= getElement(selection); - fContentInputPane.setInput(input); - fStructurePane2.setInput(input); - } - } - } - ); - } - - private void feed3(final ISelection selection) { - BusyIndicator.showWhile(fComposite.getDisplay(), - new Runnable() { - public void run() { - if (selection.isEmpty()) - fContentInputPane.setInput(fStructurePane2.getInput()); - else - fContentInputPane.setInput(getElement(selection)); - } - } - ); - - } - - /** - * Returns the first element of the given selection if the selection - * is a <code>IStructuredSelection</code> with exactly one element. Returns - * <code>null</code> otherwise. - * - * @param selection the selection - * @return the first element of the selection, or <code>null</code> - */ - private static Object getElement(ISelection selection) { - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection) selection; - if (ss.size() == 1) - return ss.getFirstElement(); - } - return null; - } - - /** - * Asks this input to take focus within its container (editor). - * <p> - * Clients should not call this method but they may - * override if they implement a different layout with different visual - * components. Clients are free to call the inherited method. - * </p> - */ - public void setFocus() { - if (fFocusPane != null) { - Viewer v= fFocusPane.getViewer(); - if (v != null) { - Control c= v.getControl(); - if (c != null) - c.setFocus(); - } - } else if (fComposite != null) - fComposite.setFocus(); - } - - /** - * Factory method for creating a differences viewer for the top left pane. - * It is called from <code>createContents</code> and returns a <code>DiffTreeViewer</code>. - * <p> - * Subclasses may override if they need a different viewer. - * </p> - * - * @param parent the SWT parent control under which to create the viewer's SWT controls - * @return a compare viewer for the top left pane - */ - public Viewer createDiffViewer(Composite parent) { - return new DiffTreeViewer(parent, fCompareConfiguration); - } - - /** - * Implements the dynamic viewer switching for structure viewers. - * The method must return a compare viewer based on the old (or current) viewer - * and a new input object. If the old viewer is suitable for showing the new input the old viewer - * can be returned. Otherwise a new viewer must be created under the given parent composite or - * <code>null</code> can be returned to indicate that no viewer could be found. - * <p> - * This implementation forwards the request to <code>CompareUI.findStructureViewer</code>. - * <p> - * Subclasses may override to implement a different strategy. - * </p> - * - * @return a compare viewer which is suitable for the given input object or <code>null</code> - */ - public Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent) { - return CompareUIPlugin.findStructureViewer(oldViewer, input, parent, fCompareConfiguration); - } - - /** - * Implements the dynamic viewer switching for content viewers. - * The method must return a compare viewer based on the old (or current) viewer - * and a new input object. If the old viewer is suitable for showing the new input the old viewer - * can be returned. Otherwise a new viewer must be created under the given parent composite or - * <code>null</code> can be returned to indicate that no viewer could be found. - * <p> - * This implementation forwards the request to <code>CompareUI.findContentViewer</code>. - * <p> - * Subclasses may override to implement a different strategy. - * </p> - * - * @return a compare viewer which is suitable for the given input object or <code>null</code> - */ - public Viewer findContentViewer(Viewer oldViewer, ICompareInput input, Composite parent) { - - Viewer newViewer= CompareUIPlugin.findContentViewer(oldViewer, input, parent, fCompareConfiguration); - - boolean isNewViewer= newViewer != oldViewer; - if (DEBUG) System.out.println("CompareEditorInput.findContentViewer: " + isNewViewer); //$NON-NLS-1$ - - if (isNewViewer && newViewer instanceof IPropertyChangeNotifier) { - final IPropertyChangeNotifier dsp= (IPropertyChangeNotifier) newViewer; - dsp.addPropertyChangeListener(fDirtyStateListener); - - Control c= newViewer.getControl(); - c.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - dsp.removePropertyChangeListener(fDirtyStateListener); - } - } - ); - } - - return newViewer; - } - - /** - * Returns <code>true</code> if there are unsaved changes. - * The value returned is the value of the <code>DIRTY_STATE</code> property of this input object. - - * Returns <code>true</code> if this input has unsaved changes, - * that is if <code>setDirty(true)</code> has been called. - * Subclasses don't have to override if the functionality provided by <doce>setDirty</code> - * is sufficient. - * - * @return <code>true</code> if there are changes that need to be saved - */ - public boolean isSaveNeeded() { - return fDirty || fDirtyViewers.size() > 0; - } - - /** - * Sets the dirty state of this input to the given - * value and sends out a <code>PropertyChangeEvent</code> if the new value differs from the old value. - * - * @param dirty the dirty state for this compare input - */ - public void setDirty(boolean dirty) { - - boolean confirmSave= true; - Object o= fCompareConfiguration.getProperty(CompareEditor.CONFIRM_SAVE_PROPERTY); - if (o instanceof Boolean) - confirmSave= ((Boolean)o).booleanValue(); - - if (!confirmSave) { - fDirty= dirty; - if (!fDirty) - fDirtyViewers.clear(); - } - } - - private void setDirty(Object source, boolean dirty) { - Assert.isNotNull(source); - boolean oldDirty= fDirtyViewers.size() > 0; - if (dirty) - fDirtyViewers.add(source); - else - fDirtyViewers.remove(source); - boolean newDirty= fDirtyViewers.size() > 0; - if (DEBUG) System.out.println("setDirty("+source+", "+dirty+"): " + newDirty); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - if (oldDirty != newDirty) - Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, new Boolean(oldDirty), new Boolean(newDirty)); - } - - /* (non Javadoc) - * see IPropertyChangeNotifier.addListener - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - fListenerList.add(listener); - } - - /* (non Javadoc) - * see IPropertyChangeNotifier.removeListener - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - fListenerList.remove(listener); - } - - /** - * Save any unsaved changes. - * Empty implementation. - * Subclasses must override to save any changes. - * - * @param progressMonitor an <code>IProgressMonitor</code> that the implementation of save may use to show progress - * @deprecated Override method saveChanges instead. - */ - public void save(IProgressMonitor pm) { - } - - /** - * Save any unsaved changes. - * Subclasses must override to save any changes. - * This implementation tries to flush changes in all viewers by - * calling <code>ISavable.save</code> on them. - * - * @param progressMonitor an <code>IProgressMonitor</code> that the implementation of save may use to show progress - * @since 2.0 - */ - public void saveChanges(IProgressMonitor pm) throws CoreException { - - // flush changes in any dirty viewer - flushViewer(fStructureInputPane, pm); - flushViewer(fStructurePane1, pm); - flushViewer(fStructurePane2, pm); - flushViewer(fContentInputPane, pm); - - save(pm); - } - - private static void flushViewer(CompareViewerSwitchingPane pane, IProgressMonitor pm) throws CoreException { - if (pane != null) { - Viewer v= pane.getViewer(); - if (v instanceof ISavable) - ((ISavable)v).save(pm); - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java deleted file mode 100644 index 0c150c1b4..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java +++ /dev/null @@ -1,281 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.util.ResourceBundle; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.core.runtime.IAdaptable; - -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.plugin.AbstractUIPlugin; - -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - - -/** - * The class <code>CompareUI</code> defines the entry point to initiate a configurable - * compare operation on arbitrary resources. The result of the compare - * is opened into a compare editor where the details can be browsed and - * edited in dynamically selected structure and content viewers. - * <p> - * The Compare UI provides a registry for content and structure compare viewers, - * which is initialized from extensions contributed to extension points - * declared by this plug-in. - */ -public final class CompareUI { - - /** - * Compare Plug-in ID (value <code>"org.eclipse.compare"</code>). - * @since 2.0 - */ - public static final String PLUGIN_ID= "org.eclipse.compare"; //$NON-NLS-1$ - - /** - * Image descriptor for the disabled icon of the 'Next' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_DTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_NEXT); - /** - * Image descriptor for the normal icon of the 'Next' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_CTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_NEXT); - /** - * Image descriptor for the roll-over icon of the 'Next' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_ETOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.ETOOL_NEXT); - - /** - * Image descriptor for the disabled icon of the 'Previous' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_DTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_PREV); - /** - * Image descriptor for the normal icon of the 'Previous' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_CTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_PREV); - /** - * Image descriptor for the roll-over icon of the 'Previous' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_ETOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.ETOOL_PREV); - - /** - * Name of the title property of a compare viewer. - * If a property with this name is set - * on the top level SWT control of a viewer, it is used as a title in the pane's - * title bar. - */ - public static final String COMPARE_VIEWER_TITLE= "org.eclipse.compare.CompareUI.CompareViewerTitle"; //$NON-NLS-1$ - - private CompareUI() { - } - - public static AbstractUIPlugin getPlugin() { - return CompareUIPlugin.getDefault(); - } - - /** - * Returns this plug-in's resource bundle. - * - * @return the plugin's resource bundle - */ - public static ResourceBundle getResourceBundle() { - return CompareUIPlugin.getResourceBundle(); - } - - /** - * Performs the comparison described by the given input and opens a - * compare editor on the result in the currently active workbench page. - * - * @param input the input on which to open the compare editor - */ - public static void openCompareEditor(CompareEditorInput input) { - openCompareEditorOnPage(input, null); - } - - /** - * Performs the comparison described by the given input and opens a - * compare editor on the result in the given workbench page. - * - * @param input the input on which to open the compare editor - * @param page the workbench page in which to open the compare editor - * @since 2.1 - */ - public static void openCompareEditorOnPage(CompareEditorInput input, IWorkbenchPage page) { - CompareUIPlugin plugin= CompareUIPlugin.getDefault(); - if (plugin != null) - plugin.openCompareEditor(input, page); - } - - /** - * Performs the comparison described by the given input and opens a - * modal compare dialog on the result. - * - * @param input the input on which to open the compare dialog - */ - public static void openCompareDialog(CompareEditorInput input) { - CompareUIPlugin plugin= CompareUIPlugin.getDefault(); - if (plugin != null) - plugin.openCompareDialog(input); - } - - /** - * Registers an image descriptor for the given type. - * - * @param type the type - * @param descriptor the image descriptor - */ - public static void registerImageDescriptor(String type, ImageDescriptor descriptor) { - CompareUIPlugin.registerImageDescriptor(type, descriptor); - } - - /** - * Returns a shared image for the given type, or a generic image if none - * has been registered for the given type. - * <p> - * Note: Images returned from this method will be automatically disposed - * of when this plug-in shuts down. Callers must not dispose of these - * images themselves. - * </p> - * - * @param type the type - * @return the image - */ - public static Image getImage(String type) { - return CompareUIPlugin.getImage(type); - } - - /** - * Registers the given image for being disposed when this plug-in is shutdown. - * - * @param image the image to register for disposal - */ - public static void disposeOnShutdown(Image image) { - CompareUIPlugin.disposeOnShutdown(image); - } - - /** - * Returns a shared image for the given adaptable. - * This convenience method queries the given adaptable - * for its <code>IWorkbenchAdapter.getImageDescriptor</code>, which it - * uses to create an image if it does not already have one. - * <p> - * Note: Images returned from this method will be automatically disposed - * of when this plug-in shuts down. Callers must not dispose of these - * images themselves. - * </p> - * - * @param adaptable the adaptable for which to find an image - * @return an image - */ - public static Image getImage(IAdaptable adaptable) { - return CompareUIPlugin.getImage(adaptable); - } - - /** - * Returns a structure compare viewer based on an old viewer and an input object. - * If the old viewer is suitable for showing the input, the old viewer - * is returned. Otherwise, the input's type is used to find a viewer descriptor in the registry - * which in turn is used to create a structure compare viewer under the given parent composite. - * If no viewer descriptor can be found <code>null</code> is returned. - * - * @param oldViewer a new viewer is only created if this old viewer cannot show the given input - * @param input the input object for which to find a structure viewer - * @param parent the SWT parent composite under which the new viewer is created - * @param configuration a configuration which is passed to a newly created viewer - * @return the compare viewer which is suitable for the given input object or <code>null</code> - */ - public static Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent, - CompareConfiguration configuration) { - - return CompareUIPlugin.findStructureViewer(oldViewer, input, parent, configuration); - } - - /** - * Returns a content compare viewer based on an old viewer and an input object. - * If the old viewer is suitable for showing the input the old viewer - * is returned. Otherwise the input's type is used to find a viewer descriptor in the registry - * which in turn is used to create a content compare viewer under the given parent composite. - * If no viewer descriptor can be found <code>null</code> is returned. - * - * @param oldViewer a new viewer is only created if this old viewer cannot show the given input - * @param input the input object for which to find a content viewer - * @param parent the SWT parent composite under which the new viewer is created - * @param configuration a configuration which is passed to a newly created viewer - * @return the compare viewer which is suitable for the given input object or <code>null</code> - */ - public static Viewer findContentViewer(Viewer oldViewer, ICompareInput input, Composite parent, - CompareConfiguration configuration) { - return CompareUIPlugin.findContentViewer(oldViewer, input, parent, configuration); - } - - /** - * Returns a content compare viewer based on an old viewer and an input - * object. If the old viewer is suitable for showing the input the old - * viewer is returned. Otherwise the input's type is used to find a viewer - * descriptor in the registry which in turn is used to create a content - * compare viewer under the given parent composite. In order to determine - * the input's type, the input must either implement IStreamContentAccessor - * and ITypedElement or ICompareInput. If no viewer descriptor can be found - * <code>null</code> is returned. - * - * @param oldViewer a new viewer is only created if this old viewer cannot show the given input - * @param input the input object for which to find a content viewer. Must - * implement either <code>IStreamContentAccessor</code> and<code> - * ITypedElement</code> or <code>ICompareInput</code>. - * @param parent the SWT parent composite under which the new viewer is created - * @param configuration a configuration which is passed to a newly created viewer - * @return the compare viewer which is suitable for the given input object or <code>null</code> - */ - public static Viewer findContentViewer(Viewer oldViewer, Object input, Composite parent, - CompareConfiguration configuration) { - - return CompareUIPlugin.findContentViewer(oldViewer, input, parent, configuration); - } - - /** - * Adds an alias for the given type. - * Subsequent calls to <code>findStructureViewer</code> - * treat alias as a synonym for type and return the same viewer. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - * @param type a type name for which a viewer has been registered - * @param alias a type name which should be treated as a synonym of type - * @since 2.0 - */ - public static void addStructureViewerAlias(String type, String alias) { - CompareUIPlugin.addStructureViewerAlias(type, alias); - } - - /** - * Remove all aliases for the given type. This method does not affect - * the initial binding between type and viewer. If no aliases exist for the - * given type this method does nothing. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - * @param type the type name for which all synonymes are removed. - * @since 2.0 - */ - public static void removeAllStructureViewerAliases(String type) { - CompareUIPlugin.removeAllStructureViewerAliases(type); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java deleted file mode 100644 index a7d4797fb..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.action.ToolBarManager; - -/** - * A <code>CompareViewerPane</code> is a convenience class which installs a - * <code>CLabel</code> and a <code>Toolbar</code> in a <code>ViewForm</code>. - * <P> - * Double clicking onto the <code>CompareViewerPane</code>'s title bar maximizes - * the <code>CompareViewerPane</code> to the size of an enclosing <code>Splitter</code> - * (if there is one). - * If more <code>Splitters</code> are nested maximizing walks up and - * maximizes to the outermost <code>Splitter</code>. - * - * @since 2.0 - */ -public class CompareViewerPane extends ViewForm { - - private ToolBarManager fToolBarManager; - - /** - * Constructs a new instance of this class given its parent - * and a style value describing its behavior and appearance. - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - */ - public CompareViewerPane(Composite parent, int style) { - super(parent, style); - - marginWidth= 0; - marginHeight= 0; - - CLabel label= new CLabel(this, SWT.NONE) { - public Point computeSize(int wHint, int hHint, boolean changed) { - return super.computeSize(wHint, Math.max(24, hHint), changed); - } - }; - setTopLeft(label); - - MouseAdapter ml= new MouseAdapter() { - public void mouseDoubleClick(MouseEvent e) { - Control content= getContent(); - if (content != null && content.getBounds().contains(e.x, e.y)) - return; - Control parent= getParent(); - if (parent instanceof Splitter) - ((Splitter)parent).setMaximizedControl(CompareViewerPane.this); - } - }; - - addMouseListener(ml); - label.addMouseListener(ml); - } - - /** - * Sets the receiver's title text. - * The value <code>null</code> clears it. - * - * @param text the text to be displayed in the CompareViewerPane's title or null - * - * @exception SWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - */ - public void setText(String label) { - CLabel cl= (CLabel) getTopLeft(); - cl.setText(label); - } - - /** - * Return the receiver's title text. - * - * @return the text of the CompareViewerPane's title or null - */ - public void setImage(Image image) { - CLabel cl= (CLabel) getTopLeft(); - cl.setImage(image); - } - - /** - * Returns a <code>ToolBarManager</code> if the given parent is a - * <code>CompareViewerPane</code> or <code>null</code> otherwise. - * - * @param parent a <code>Composite</code> or <code>null</code> - * @return a <code>ToolBarManager</code> if the given parent is a <code>CompareViewerPane</code> otherwise <code>null</code> - */ - public static ToolBarManager getToolBarManager(Composite parent) { - if (parent instanceof CompareViewerPane) { - CompareViewerPane pane= (CompareViewerPane) parent; - return pane.getToolBarManager(); - } - return null; - } - - /** - * Clears tool items in the <code>CompareViewerPane</code>'s control bar. - * - * @param parent a <code>Composite</code> or <code>null</code> - */ - public static void clearToolBar(Composite parent) { - ToolBarManager tbm= getToolBarManager(parent); - if (tbm != null) { - tbm.removeAll(); - tbm.update(true); - } - } - - //---- private stuff - - private ToolBarManager getToolBarManager() { - if (fToolBarManager == null) { - ToolBar tb= new ToolBar(this, SWT.FLAT); - setTopCenter(tb); - fToolBarManager= new ToolBarManager(tb); - } - return fToolBarManager; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java deleted file mode 100644 index 55682519a..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java +++ /dev/null @@ -1,371 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.text.MessageFormat; - -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.util.ListenerList; -import org.eclipse.jface.viewers.*; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - - -/** - * A custom <code>CompareViewerPane</code> that supports dynamic viewer switching. - * - * <p> - * Clients must implement the viewer switching strategy by implementing - * the <code>getViewer(Viewer, Object)</code> method. - * <p> - * If a property with the name <code>CompareUI.COMPARE_VIEWER_TITLE</code> is set - * on the top level SWT control of a viewer, it is used as a title in the <code>CompareViewerPane</code>'s - * title bar. - * - * @since 2.0 - */ -public abstract class CompareViewerSwitchingPane extends CompareViewerPane - implements ISelectionChangedListener, ISelectionProvider, IDoubleClickListener { - - private Viewer fViewer; - private Object fInput; - private ListenerList fSelectionListeners= new ListenerList(); - private ListenerList fDoubleClickListener= new ListenerList(); - private ListenerList fOpenListener= new ListenerList(); - private boolean fControlVisibility= false; - private String fTitle; - private String fTitleArgument; - - private IOpenListener fOpenHandler= new IOpenListener() { - public void open(OpenEvent event) { - Object[] listeners= fOpenListener.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((IOpenListener) listeners[i]).open(event); - } - }; - - /** - * Creates a <code>CompareViewerSwitchingPane</code> as a child of the given parent and with the - * specified SWT style bits. - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - */ - public CompareViewerSwitchingPane(Composite parent, int style) { - this(parent, style, false); - } - - /** - * Creates a <code>CompareViewerSwitchingPane</code> as a child of the given parent and with the - * specified SWT style bits. - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * @param visibility the initial visibility of the CompareViewerSwitchingPane - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - */ - public CompareViewerSwitchingPane(Composite parent, int style, boolean visibility) { - super(parent, style); - - fControlVisibility= visibility; - - setViewer(new NullViewer(this)); - - addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fViewer instanceof ISelectionProvider) - ((ISelectionProvider) fViewer).removeSelectionChangedListener(CompareViewerSwitchingPane.this); - if (fViewer instanceof StructuredViewer) { - StructuredViewer sv= (StructuredViewer) fViewer; - sv.removeDoubleClickListener(CompareViewerSwitchingPane.this); - sv.removeOpenListener(fOpenHandler); - } - fViewer= null; - fInput= null; - fSelectionListeners= null; - } - } - ); - } - - /** - * Returns the current viewer. - * - * @return the current viewer - */ - public Viewer getViewer() { - return fViewer; - } - - private void setViewer(Viewer newViewer) { - - if (newViewer == fViewer) - return; - - boolean oldEmpty= isEmpty(); - - if (fViewer != null) { - - if (fViewer instanceof ISelectionProvider) - ((ISelectionProvider) fViewer).removeSelectionChangedListener(this); - - if (fViewer instanceof StructuredViewer) { - StructuredViewer sv= (StructuredViewer) fViewer; - sv.removeDoubleClickListener(this); - sv.removeOpenListener(fOpenHandler); - } - - Control content= getContent(); - setContent(null); - - fViewer.setInput(null); - - if (content != null && !content.isDisposed()) - content.dispose(); - - } else - oldEmpty= false; - setContent(null); - - fViewer= newViewer; - - if (fViewer != null) { - // we have to remember and restore the old visibility of the CustomPane - // since setContent changes the visibility - boolean old= getVisible(); - setContent(fViewer.getControl()); - setVisible(old); // restore old visibility - - boolean newEmpty= isEmpty(); - - if (fViewer instanceof ISelectionProvider) - ((ISelectionProvider) fViewer).addSelectionChangedListener(this); - - if (fViewer instanceof StructuredViewer) { - StructuredViewer sv= (StructuredViewer) fViewer; - sv.addDoubleClickListener(this); - sv.addOpenListener(fOpenHandler); - } - - if (oldEmpty != newEmpty) { // relayout my container - Composite parent= getParent(); - if (parent instanceof Splitter) - ((Splitter)parent).setVisible(this, fControlVisibility ? !newEmpty : true); - } - - layout(true); - } - } - - /** - * Returns the optional title argument that has been set with <code>setTitelArgument</code> - * or <code>null</code> if no optional title argument has been set. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - * - * @return the optional title argument or <code>null</code> - */ - public String getTitleArgument() { - return fTitleArgument; - } - - /** - * Returns <code>true</code> if no viewer is installed or if the current viewer - * is a <code>NullViewer</code>. - * - * @return <code>true</code> if no viewer is installed or if the current viewer is a <code>NullViewer</code> - */ - public boolean isEmpty() { - return fViewer == null || fViewer instanceof NullViewer; - } - - public void addSelectionChangedListener(ISelectionChangedListener l) { - fSelectionListeners.add(l); - } - - public void removeSelectionChangedListener(ISelectionChangedListener l) { - fSelectionListeners.remove(l); - } - - public void addDoubleClickListener(IDoubleClickListener l) { - fDoubleClickListener.add(l); - } - - public void removeDoubleClickListener(IDoubleClickListener l) { - fDoubleClickListener.remove(l); - } - - public void addOpenListener(IOpenListener l) { - fOpenListener.add(l); - } - - public void removeOpenListener(IOpenListener l) { - fOpenListener.remove(l); - } - - public void doubleClick(DoubleClickEvent event) { - Object[] listeners= fDoubleClickListener.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((IDoubleClickListener) listeners[i]).doubleClick(event); - } - - public ISelection getSelection() { - if (fViewer instanceof ISelectionProvider) - return ((ISelectionProvider) fViewer).getSelection(); - return null; - } - - public void setSelection(ISelection s) { - if (fViewer instanceof ISelectionProvider) - ((ISelectionProvider) fViewer).setSelection(s); - } - - public void selectionChanged(SelectionChangedEvent ev) { - Object[] listeners= fSelectionListeners.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((ISelectionChangedListener) listeners[i]).selectionChanged(ev); - } - - private boolean hasFocus2() { - // do we have focus? - Display display= getDisplay(); - if (display != null) - for (Control focus= display.getFocusControl(); focus != null; focus= focus.getParent()) - if (focus == this) - return true; - return false; - } - - /** - * Sets the input object of this pane. - * For this input object a suitable viewer is determined by calling the abstract - * method <code>getViewer(Viewer, Object)</code>. - * If the returned viewer differs from the current one, the old viewer - * is disposed and the new one installed. Then the input object is fed - * into the newly installed viewer by calling its <code>setInput(Object)</code> method. - * If new and old viewer don't differ no new viewer is installed but just - * <code>setInput(Object)</code> is called. - * If the input is <code>null</code> the pane is cleared, - * that is the current viewer is disposed. - * - * @param input the new input object or <code>null</code> - */ - public void setInput(Object input) { - - if (fInput == input) - return; - - boolean hadFocus= hasFocus2(); - - fInput= input; - - // viewer switching - Viewer newViewer= null; - if (input != null) - newViewer= getViewer(fViewer, input); - - if (newViewer == null) { - if (fViewer instanceof NullViewer) - return; - newViewer= new NullViewer(this); - } - - setViewer(newViewer); - - // set input - fViewer.setInput(input); - - Image image= null; - if (!(fViewer instanceof NullViewer) && input instanceof ICompareInput) - image= ((ICompareInput)input).getImage(); - setImage(image); - - String title= null; - if (fViewer != null) { - Control c= fViewer.getControl(); - if (c != null) { - Object data= c.getData(CompareUI.COMPARE_VIEWER_TITLE); - if (data instanceof String) - title= (String) data; - if (hadFocus) - c.setFocus(); - } - } - - fTitle= title; - updateTitle(); - } - - /** - * Sets an additional and optional argument for the pane's title. - * Note: this method is for internal use only. Clients should not call this method. - * - * @param argument an optional argument for the pane's title - */ - public void setTitleArgument(String argument) { - fTitleArgument= argument; - updateTitle(); - } - - private void updateTitle() { - if (fTitle != null) { - if (fTitleArgument != null) { - String format= CompareMessages.getString("CompareViewerSwitchingPane.Titleformat"); //$NON-NLS-1$ - String t= MessageFormat.format(format, new String[] { fTitle, fTitleArgument } ); - setText(t); - } else - setText(fTitle); - } else { - setText(""); //$NON-NLS-1$ - } - } - - /** - * Returns the current input of this pane or null if the pane has no input. - * - * @return an <code>Object</code> that is the input to this pane or null if the pane has no input. - */ - public Object getInput() { - return fInput; - } - - /** - * Returns a viewer which is able to display the given input. - * If no viewer can be found, <code>null</code> is returned. - * The additional argument oldViewer represents the viewer currently installed - * in the pane (or <code>null</code> if no viewer is installed). - * It can be returned from this method if the current viewer can deal with the - * input (and no new viewer must be created). - * - * @param oldViewer the currently installed viewer or <code>null</code> - * @param input the input object for which a viewer must be determined or <code>null</code> - * @return a viewer for the given input, or <code>null</code> if no viewer can be determined - */ - abstract protected Viewer getViewer(Viewer oldViewer, Object input); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java deleted file mode 100644 index 5969b20da..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java +++ /dev/null @@ -1,1126 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.util.HashMap; -import java.util.ResourceBundle; -import java.util.Date; -import java.util.List; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.HashSet; -import java.util.Calendar; -import java.io.InputStream; -import java.text.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Widget; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableItem; -import org.eclipse.swt.widgets.Item; -import org.eclipse.swt.widgets.Button; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.dialogs.*; - -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * A dialog where one input element can be compared against - * a list of historic variants (editions) of the same input element. - * The dialog can be used to implement functions like "Compare/Replace with Version" or - * "Compare/Replace from Local History" on workspace resources. - * <p> - * In addition it is possible to specify a subsection of the input element - * (e.g. a method in a Java source file) by means of a "path". - * In this case the dialog compares only the subsection (as specified by the path) - * with the corresponding subsection in the list of editions. - * Only those editions are shown where the subsection differs from the same subsection in - * another edition thereby minimizing the number of presented variants. - * This functionality can be used to implement "Replace from Local History" - * for the Java language. - * <p> - * Subsections of an input element are determined by first finding an - * <code>IStructureCreator</code> for the input's type. - * Then the method <code>locate</code> is used to extract the subsection. - * <p> - * Each edition (variant in the list of variants) must implement the <code>IModificationDate</code> interface - * so that the dialog can sort the editions and present them in a tree structure where every - * node corresponds one day. - * <p> - * The functionality is surfaced in a single function <code>selectEdition</code>. - * <p> - * Clients may instantiate this class; it is not intended to be subclassed. - * </p> - * - * @see IModificationDate - * @see ITypedElement - */ -public class EditionSelectionDialog extends ResizableDialog { - - /** - * An item in an underlying edition. - */ - private static class Pair { - - private ITypedElement fEdition; - private ITypedElement fItem; - private String fContent; - private IStructureCreator fStructureCreator; - private boolean fHasError= false; - - Pair(IStructureCreator structureCreator, ITypedElement edition, ITypedElement item) { - fStructureCreator= structureCreator; - fEdition= edition; - fItem= item; - } - - Pair(IStructureCreator structureCreator, ITypedElement edition) { - this(structureCreator, edition, edition); - } - - ITypedElement getEdition() { - return fEdition; - } - - ITypedElement getItem() { - return fItem; - } - - /** - * The content is lazily loaded - */ - private String getContent() { - if (fContent == null) { - if (fStructureCreator != null) - fContent= fStructureCreator.getContents(fItem, false); - else { - if (fItem instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) fItem; - try { - InputStream is= sca.getContents(); - if (is != null) - fContent= Utilities.readString(is); - } catch (CoreException ex) { - } - } - } - if (fContent == null) - fContent= ""; //$NON-NLS-1$ - } - return fContent; - } - - /** - * Compares content of item. - */ - public boolean equals(Object other) { - if (other != null && other.getClass() == getClass()) { - if (getContent().equals(((Pair)other).getContent())) - return true; - } - return super.equals(other); - } - } - - // Configuration options - private CompareConfiguration fCompareConfiguration; - private ArrayList fArrayList= new ArrayList(); - /** use a side-by-side compare viewer */ - private boolean fCompare= true; - /** show target on right hand side */ - private boolean fTargetIsRight= false; - /** hide entries which have identical content */ - private boolean fHideIdentical= true; - /** add mode if true, otherwise replace mode */ - private boolean fAddMode= false; - /** compare mode if true, otherwise replace/add mode */ - private boolean fCompareMode= false; - /** perform structure compare on editions */ - private boolean fStructureCompare= false; - /** allow for multiple selection */ - private boolean fMultiSelect= false; - - /** - * Maps from members to their corresponding editions. - * Has only a single entry if dialog is used in "Replace" (and not "Add") mode. - */ - private HashMap fMemberEditions; - /** - * Maps from members to their corresponding selected edition. - */ - private HashMap fMemberSelection; - /** The editions of the current selected member */ - private List fCurrentEditions; - private Thread fThread; - private Pair fTargetPair; - /** The selected edition in the edition viewer */ - private ITypedElement fSelectedItem; - private String fTitleArg; - private Image fTitleImage; - - // SWT controls - private CompareViewerSwitchingPane fContentPane; - private Button fCommitButton; - private Table fMemberTable; - private CompareViewerPane fMemberPane; - private Tree fEditionTree; - private CompareViewerPane fEditionPane; - private Image fDateImage; - private Image fTimeImage; - private CompareViewerSwitchingPane fStructuredComparePane; - - /** - * Creates a new modal, resizable dialog. - * Various titles, icons, and labels are configured from the given resource bundle. - * The following resource keys are used: - * <pre> - * key type description - * title String dialog title - * width Integer initial width of dialog - * height Integer initial height of dialog - * treeTitleFormat MessageFormat pane title for edition tree; arg 0 is the target - * dateIcon String icon for node in edition tree; path relative to plugin - * timeIcon String icon for leaf in edition tree; path relative to plugin - * todayFormat MessageFormat format string if date is todays date; arg 0 is date - * yesterdayFormat MessageFormat format string if date is yesterdays date; arg 0 is date - * dayFormat MessageFormat format string if date is any other date; arg 0 is date - * editionLabel String label for editions side of compare viewer; arg 0 is the date - * targetLabel String label for target side of compare viewer - * buttonLabel String label for OK button; default is IDialogConstants.OK_LABEL - * </pre> - * - * @param parent if not <code>null</code> the new dialog stays on top of this parent shell - * @param bundle <code>ResourceBundle</code> to configure the dialog - */ - public EditionSelectionDialog(Shell parent, ResourceBundle bundle) { - super(parent, bundle); - - fCompareConfiguration= new CompareConfiguration(); - fCompareConfiguration.setLeftEditable(false); - fCompareConfiguration.setRightEditable(false); - - String iconName= Utilities.getString(fBundle, "dateIcon", "obj16/day_obj.gif"); //$NON-NLS-2$ //$NON-NLS-1$ - ImageDescriptor id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fDateImage= id.createImage(); - iconName= Utilities.getString(fBundle, "timeIcon", "obj16/resource_obj.gif"); //$NON-NLS-1$ //$NON-NLS-2$ - id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fTimeImage= id.createImage(); - } - - /** - * Sets an additional and optional argument for the edition pane's title. - * - * @param titleArgument an optional argument for the edition pane's title - * @since 2.0 - */ - public void setEditionTitleArgument(String titleArgument) { - fTitleArg= titleArgument; - } - - /** - * Sets an optional image for the edition pane's title. - * - * @param titleImage an optional image for the edition pane's title - * @since 2.0 - */ - public void setEditionTitleImage(Image titleImage) { - fTitleImage= titleImage; - } - - /** - * Select the previous edition (presenting a UI). - * - * @param target the input object against which the editions are compared; must not be <code>null</code> - * @param editions the list of editions (element type: <code>ITypedElement</code>s) - * @param path If <code>null</code> dialog shows full input; if non <code>null</code> it extracts a subsection - * @return returns the selected edition or <code>null</code> if error occurred. - * The returned <code>ITypedElement</code> is one of the original editions - * if <code>path</code> was <code>null</code>; otherwise - * it is an <code>ITypedElement</code> returned from <code>IStructureCreator.locate(path, item)</code> - * @since 2.0 - */ - public ITypedElement selectPreviousEdition(final ITypedElement target, ITypedElement[] inputEditions, Object ppath) { - Assert.isNotNull(target); - fTargetPair= new Pair(null, target); - - // sort input editions - final int count= inputEditions.length; - final IModificationDate[] editions= new IModificationDate[count]; - for (int i= 0; i < count; i++) - editions[i]= (IModificationDate) inputEditions[i]; - if (count > 1) - internalSort(editions, 0, count-1); - - // find StructureCreator if ppath is not null - IStructureCreator structureCreator= null; - if (ppath != null) { - String type= target.getType(); - IStructureCreatorDescriptor scd= CompareUIPlugin.getStructureCreator(type); - if (scd != null) - structureCreator= scd.createStructureCreator(); - } - - if (fAddMode) { - // does not work in add mode - return null; - } - - if (structureCreator != null) { - Pair pair= createPair(structureCreator, ppath, target); - if (pair != null) - fTargetPair= pair; - else - ppath= null; // couldn't extract item because of error - } - - // from front (newest) to back (oldest) - for (int i= 0; i < count; i++) { - - ITypedElement edition= (ITypedElement) editions[i]; - Pair pair= null; - - if (structureCreator != null && ppath != null) { - // extract sub element from edition - pair= createPair(structureCreator, ppath, edition); - } else { - pair= new Pair(null, edition); - } - - if (pair != null && pair.fHasError) - return null; - - if (pair != null && !fTargetPair.equals(pair)) { - return pair.fItem; - } - } - - // nothing found - return null; - } - - /** - * Presents this modal dialog with the functionality described in the class comment above. - * - * @param target the input object against which the editions are compared; must not be <code>null</code> - * @param editions the list of editions (element type: <code>ITypedElement</code>s) - * @param path If <code>null</code> dialog shows full input; if non <code>null</code> it extracts a subsection - * @return returns the selected edition or <code>null</code> if dialog was cancelled. - * The returned <code>ITypedElement</code> is one of the original editions - * if <code>path</code> was <code>null</code>; otherwise - * it is an <code>ITypedElement</code> returned from <code>IStructureCreator.locate(path, item)</code> - */ - public ITypedElement selectEdition(final ITypedElement target, ITypedElement[] inputEditions, Object ppath) { - - Assert.isNotNull(target); - fTargetPair= new Pair(null, target); - - // sort input editions - final int count= inputEditions.length; - final IModificationDate[] editions= new IModificationDate[count]; - for (int i= 0; i < count; i++) - editions[i]= (IModificationDate) inputEditions[i]; - if (count > 1) - internalSort(editions, 0, count-1); - - // find StructureCreator if ppath is not null - IStructureCreator structureCreator= null; - if (ppath != null) { - String type= target.getType(); - IStructureCreatorDescriptor scd= CompareUIPlugin.getStructureCreator(type); - if (scd != null) - structureCreator= scd.createStructureCreator(); - } - - if (!fAddMode) { - // replace mode - - if (structureCreator != null) { - Pair pair= createPair(structureCreator, ppath, target); - if (pair != null) - fTargetPair= pair; - else - ppath= null; // couldn't extract item because of error - } - - // set the left and right labels for the compare viewer - String targetLabel= getTargetLabel(target, fTargetPair.getItem()); - if (fTargetIsRight) - fCompareConfiguration.setRightLabel(targetLabel); - else - fCompareConfiguration.setLeftLabel(targetLabel); - - if (structureCreator != null && ppath != null) { // extract sub element - - final IStructureCreator sc= structureCreator; - final Object path= ppath; - - // construct the comparer thread - // and perform the background extract - fThread= new Thread() { - public void run() { - - // from front (newest) to back (oldest) - for (int i= 0; i < count; i++) { - - if (fEditionTree == null || fEditionTree.isDisposed()) - break; - ITypedElement edition= (ITypedElement) editions[i]; - - // extract sub element from edition - Pair pair= createPair(sc, path, edition); - if (pair != null) - sendPair(pair); - } - sendPair(null); - } - }; - } else { - // create tree widget - create(); - - // from front (newest) to back (oldest) - for (int i= 0; i < count; i++) - addMemberEdition(new Pair(null, (ITypedElement) editions[i])); - } - - } else { - // add mode - final Object container= ppath; - Assert.isNotNull(container); - - if (structureCreator == null) - return null; // error - - // extract all elements of container - final HashSet current= new HashSet(); - IStructureComparator sco= structureCreator.locate(container, target); - if (sco != null) { - Object[] children= sco.getChildren(); - if (children != null) - for (int i= 0; i < children.length; i++) - current.add(children[i]); - } - - final IStructureCreator sc= structureCreator; - - // construct the comparer thread - // and perform the background extract - fThread= new Thread() { - public void run() { - - // from front (newest) to back (oldest) - for (int i= 0; i < count; i++) { - - if (fEditionTree == null || fEditionTree.isDisposed()) - break; - ITypedElement edition= (ITypedElement) editions[i]; - - IStructureComparator sco2= sc.locate(container, edition); - if (sco2 != null) { - Object[] children= sco2.getChildren(); - if (children != null) { - for (int i2= 0; i2 < children.length; i2++) { - ITypedElement child= (ITypedElement) children[i2]; - if (!current.contains(child)) - sendPair(new Pair(sc, edition, child)); - } - } - } - } - sendPair(null); - } - }; - } - - open(); - - if (getReturnCode() == OK) - return fSelectedItem; - return null; - } - - private Pair createPair(IStructureCreator sc, Object path, ITypedElement input) { - IStructureComparator scmp= sc.locate(path, input); - if (scmp == null && sc.getStructure(input) == null) { // parse error - Pair p= new Pair(sc, input); - p.fHasError= true; - return p; - } - if (scmp instanceof ITypedElement) - return new Pair(sc, input, (ITypedElement) scmp); - return null; - } - - /** - * Controls whether identical entries are shown or not (default). - * This method must be called before <code>selectEdition</code>. - * - * @param hide if true identical entries are hidden; otherwise they are shown. - * @since 2.0 - */ - public void setHideIdenticalEntries(boolean hide) { - fHideIdentical= hide; - } - - /** - * Controls whether workspace target is on the left (the default) or right hand side. - * - * @param isRight if true target is shown on right hand side. - * @since 2.0 - */ - public void setTargetIsRight(boolean isRight) { - fTargetIsRight= isRight; - } - - /** - * Controls whether the <code>EditionSelectionDialog</code> is in 'add' mode - * or 'replace' mode (the default). - * - * @param addMode if true dialog is in 'add' mode. - * @since 2.0 - */ - public void setAddMode(boolean addMode) { - fAddMode= addMode; - fMultiSelect= addMode; - } - - /** - * Controls whether the <code>EditionSelectionDialog</code> is in 'compare' mode - * or 'add/replace' (the default) mode. - * - * @param addMode if true dialog is in 'add' mode. - * @since 2.0 - */ - public void setCompareMode(boolean compareMode) { - fCompareMode= compareMode; - fStructureCompare= fCompareMode && !fAddMode; - } - - /** - * Returns the input target that has been specified with the most recent call - * to <code>selectEdition</code>. If a not <code>null</code> path was specified this method - * returns a subsection of this target (<code>IStructureCreator.locate(path, target)</code>) - * instead of the input target. - * <p> - * For example if the <code>target</code> is a Java compilation unit and <code>path</code> specifies - * a method, the value returned from <code>getTarget</code> will be the method not the compilation unit. - * - * @return the last specified target or a subsection thereof. - */ - public ITypedElement getTarget() { - return fTargetPair.getItem(); - } - - /** - * Returns the editions that have been selected with the most - * recent call to <code>selectEdition</code>. - * - * @return the selected editions as an array. - * @since 2.1 - */ - public ITypedElement[] getSelection() { - ArrayList result= new ArrayList(); - if (fMemberSelection != null) { - Iterator iter= fArrayList.iterator(); - for (int i= 0; iter.hasNext(); i++) { - Object edition= iter.next(); - Object item= fMemberSelection.get(edition); - if (item != null) - result.add(item); - } - } else if (fSelectedItem != null) - result.add(fSelectedItem); - return (ITypedElement[]) result.toArray(new ITypedElement[result.size()]); - } - - /** - * Returns a label for identifying the target side of a compare viewer. - * This implementation extracts the value for the key "targetLabel" from the resource bundle - * and passes it as the format argument to <code>MessageFormat.format</code>. - * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string) - * is the name of the given input element. - * <p> - * Subclasses may override to create their own label. - * </p> - * - * @param target the target element for which a label must be returned - * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given target; otherwise the same as target - * @return a label the target side of a compare viewer - */ - protected String getTargetLabel(ITypedElement target, ITypedElement item) { - String format= null; - if (target instanceof ResourceNode) - format= Utilities.getString(fBundle, "workspaceTargetLabel", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "targetLabel"); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - return MessageFormat.format(format, new Object[] { target.getName() }); - } - - /** - * Returns a label for identifying the edition side of a compare viewer. - * This implementation extracts the value for the key "editionLabel" from the resource bundle - * and passes it as the format argument to <code>MessageFormat.format</code>. - * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string) - * is the formatted modification date of the given input element. - * <p> - * Subclasses may override to create their own label. - * </p> - * - * @param selectedEdition the selected edition for which a label must be returned - * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given selectedEdition; otherwise the same as selectedEdition - * @return a label for the edition side of a compare viewer - */ - protected String getEditionLabel(ITypedElement selectedEdition, ITypedElement item) { - String format= null; - if (selectedEdition instanceof ResourceNode) - format= Utilities.getString(fBundle, "workspaceEditionLabel", null); //$NON-NLS-1$ - else if (selectedEdition instanceof HistoryItem) - format= Utilities.getString(fBundle, "historyEditionLabel", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "editionLabel"); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - - String date= ""; //$NON-NLS-1$ - if (selectedEdition instanceof IModificationDate) { - long modDate= ((IModificationDate)selectedEdition).getModificationDate(); - date= DateFormat.getDateTimeInstance().format(new Date(modDate)); - } - - return MessageFormat.format(format, new Object[] { date }); - } - - /** - * Returns a label for identifying a node in the edition tree viewer. - * This implementation extracts the value for the key "workspaceTreeFormat" or - * "treeFormat" (in that order) from the resource bundle - * and passes it as the format argument to <code>MessageFormat.format</code>. - * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string) - * is the formatted modification date of the given input element. - * <p> - * Subclasses may override to create their own label. - * </p> - * - * @param edition the edition for which a label must be returned - * @param item if a path has been specified in <code>edition</code> a sub element of the given edition; otherwise the same as edition - * @return a label of a node in the edition tree viewer - * @since 2.0 - */ - protected String getShortEditionLabel(ITypedElement edition, ITypedElement item, Date date) { - String format= null; - if (edition instanceof ResourceNode) - format= Utilities.getString(fBundle, "workspaceTreeFormat", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "treeFormat", null); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - String ds= DateFormat.getTimeInstance().format(date); - return MessageFormat.format(format, new Object[] { ds }); - } - - /** - * Returns an image for identifying the edition side of a compare viewer. - * This implementation extracts the value for the key "editionLabel" from the resource bundle - * and passes it as the format argument to <code>MessageFormat.format</code>. - * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string) - * is the formatted modification date of the given input element. - * <p> - * Subclasses may override to create their own label. - * </p> - * - * @param selectedEdition the selected edition for which a label must be returned - * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given selectedEdition; otherwise the same as selectedEdition - * @return a label the edition side of a compare viewer - * @since 2.0 - */ - protected Image getEditionImage(ITypedElement selectedEdition, ITypedElement item) { - if (selectedEdition instanceof ResourceNode) - return selectedEdition.getImage(); - if (selectedEdition instanceof HistoryItem) - return fTimeImage; - return null; - } - - /* (non Javadoc) - * Creates SWT control tree. - */ - protected synchronized Control createDialogArea(Composite parent2) { - - Composite parent= (Composite) super.createDialogArea(parent2); - - getShell().setText(Utilities.getString(fBundle, "title")); //$NON-NLS-1$ - - Splitter vsplitter= new Splitter(parent, SWT.VERTICAL); - vsplitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL - | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); - - vsplitter.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fDateImage != null) - fDateImage.dispose(); - if (fTimeImage != null) - fTimeImage.dispose(); - } - } - ); - - if (fAddMode) { - // we need two panes: the left for the elements, the right one for the editions - Splitter hsplitter= new Splitter(vsplitter, SWT.HORIZONTAL); - - fMemberPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT); - fMemberPane.setText(Utilities.getString(fBundle, "memberPaneTitle")); //$NON-NLS-1$ - - int flags= SWT.H_SCROLL + SWT.V_SCROLL; - if (fMultiSelect) - flags|= SWT.CHECK; - fMemberTable= new Table(fMemberPane, flags); - fMemberTable.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (e.detail == SWT.CHECK) { - if (e.item instanceof TableItem) { - TableItem ti= (TableItem) e.item; - Object data= ti.getData(); - if (ti.getChecked()) - fArrayList.add(data); - else - fArrayList.remove(data); - - if (fCommitButton != null) - fCommitButton.setEnabled(fArrayList.size() > 0); - - fMemberTable.setSelection(new TableItem[] { ti }); - } - } - handleMemberSelect(e.item); - } - } - ); - fMemberPane.setContent(fMemberTable); - fMemberTable.setFocus(); - - fEditionPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT); - } else { - if (fStructureCompare) { - // we need two panes: the left for the elements, the right one for the structured diff - Splitter hsplitter= new Splitter(vsplitter, SWT.HORIZONTAL); - - fEditionPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT); - fStructuredComparePane= new CompareViewerSwitchingPane(hsplitter, SWT.BORDER | SWT.FLAT, true) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof ICompareInput) - return CompareUIPlugin.findStructureViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration); - return null; - } - }; - fStructuredComparePane.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - feedInput2(e.getSelection()); - } - } - ); - } else { - // only a single pane showing the editions - fEditionPane= new CompareViewerPane(vsplitter, SWT.BORDER | SWT.FLAT); - } - if (fTitleArg == null) - fTitleArg= fTargetPair.getItem().getName(); - String titleFormat= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$ - String title= MessageFormat.format(titleFormat, new String[] { fTitleArg }); - fEditionPane.setText(title); - if (fTitleImage != null) - fEditionPane.setImage(fTitleImage); - } - - fEditionTree= new Tree(fEditionPane, SWT.H_SCROLL + SWT.V_SCROLL); - fEditionTree.addSelectionListener( - new SelectionAdapter() { -// public void widgetDefaultSelected(SelectionEvent e) { -// handleDefaultSelected(); -// } - public void widgetSelected(SelectionEvent e) { - feedInput(e.item); - } - } - ); - fEditionPane.setContent(fEditionTree); - - // now start the thread (and forget about it) - if (fThread != null) { - fThread.start(); - fThread= null; - } - - fContentPane= new CompareViewerSwitchingPane(vsplitter, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - return CompareUIPlugin.findContentViewer(oldViewer, input, this, fCompareConfiguration); - } - }; - vsplitter.setWeights(new int[] { 30, 70 }); - - applyDialogFont(parent); - return parent; - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - String buttonLabel= Utilities.getString(fBundle, "buttonLabel", IDialogConstants.OK_LABEL); //$NON-NLS-1$ - if (fCompareMode) { - // only a 'Done' button - createButton(parent, IDialogConstants.CANCEL_ID, buttonLabel, false); - } else { - // a 'Cancel' and a 'Add/Replace' button - fCommitButton= createButton(parent, IDialogConstants.OK_ID, buttonLabel, true); - fCommitButton.setEnabled(false); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - } - - /** - * Overidden to disable dismiss on double click in compare mode. - * @since 2.0 - */ - protected void okPressed() { - if (fCompareMode) - ; // don't dismiss dialog - else - super.okPressed(); - } - - //---- private stuff ---------------------------------------------------------------------------------------- - - /** - * Asynchroneously sends a Pair (or null) to the UI thread. - */ - private void sendPair(final Pair pair) { - if (fEditionTree != null && !fEditionTree.isDisposed()) { - Display display= fEditionTree.getDisplay(); - display.asyncExec( - new Runnable() { - public void run() { - addMemberEdition(pair); - } - } - ); - } - } - - private static void internalSort(IModificationDate[] keys, int left, int right) { - - int original_left= left; - int original_right= right; - - IModificationDate mid= keys[(left + right) / 2]; - do { - while (keys[left].getModificationDate() > mid.getModificationDate()) - left++; - - while (mid.getModificationDate() > keys[right].getModificationDate()) - right--; - - if (left <= right) { - IModificationDate tmp= keys[left]; - keys[left]= keys[right]; - keys[right]= tmp; - left++; - right--; - } - } while (left <= right); - - if (original_left < right) - internalSort(keys, original_left, right); - - if (left < original_right) - internalSort(keys, left, original_right); - } - - /** - * Adds the given Pair to the member editions. - * If HIDE_IDENTICAL is true the new Pair is only added if its contents - * is different from the preceeding Pair. - * If the argument is <code>null</code> the message "No Editions found" is shown - * in the member or edition viewer. - */ - private void addMemberEdition(Pair pair) { - - if (pair == null) { // end of list of pairs - if (fMemberTable != null) { - if (!fMemberTable.isDisposed() && fMemberTable.getItemCount() == 0) { - if (fMultiSelect) { - fMemberTable.dispose(); - fMemberTable= new Table(fMemberPane, SWT.NONE); - fMemberPane.setContent(fMemberTable); - } - TableItem ti= new TableItem(fMemberTable, SWT.NONE); - ti.setText(Utilities.getString(fBundle, "noAdditionalMembersMessage")); //$NON-NLS-1$ - } - return; - } - if (fEditionTree != null && !fEditionTree.isDisposed() && fEditionTree.getItemCount() == 0) { - TreeItem ti= new TreeItem(fEditionTree, SWT.NONE); - ti.setText(Utilities.getString(fBundle, "notFoundInLocalHistoryMessage")); //$NON-NLS-1$ - } - return; - } - - if (fMemberEditions == null) - fMemberEditions= new HashMap(); - if (fMultiSelect && fMemberSelection == null) - fMemberSelection= new HashMap(); - - ITypedElement item= pair.getItem(); - List editions= (List) fMemberEditions.get(item); - if (editions == null) { - editions= new ArrayList(); - fMemberEditions.put(item, editions); - if (fMemberTable != null && !fMemberTable.isDisposed()) { - ITypedElement te= (ITypedElement)item; - String name= te.getName(); - - // find position - TableItem[] items= fMemberTable.getItems(); - int where= items.length; - for (int i= 0; i < where; i++) { - String n= items[i].getText(); - if (n.compareTo(name) > 0) { - where= i; - break; - } - } - - TableItem ti= new TableItem(fMemberTable, where, SWT.NULL); - ti.setImage(te.getImage()); - ti.setText(name); - ti.setData(editions); - } - } - if (fHideIdentical) { - Pair last= fTargetPair; - int size= editions.size(); - if (size > 0) - last= (Pair) editions.get(size-1); - if (last != null && last.equals(pair)) - return; // don't add since the new one is equal to old - } - editions.add(pair); - - if (!fAddMode || editions == fCurrentEditions) - addEdition(pair); - } - - /** - * Returns the number of s since Jan 1st, 1970. - * The given date is converted to GMT and daylight saving is taken into account too. - */ - private long dayNumber(long date) { - int ONE_DAY_MS= 24*60*60 * 1000; // one day in milli seconds - - Calendar calendar= Calendar.getInstance(); - long localTimeOffset= calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET); - - return (date + localTimeOffset) / ONE_DAY_MS; - } - - /** - * Adds the given Pair to the edition tree. - * It takes care of creating tree nodes for different dates. - */ - private void addEdition(Pair pair) { - if (fEditionTree == null || fEditionTree.isDisposed()) - return; - - // find last day - TreeItem[] days= fEditionTree.getItems(); - TreeItem lastDay= null; - if (days.length > 0) - lastDay= days[days.length-1]; - - boolean first= lastDay == null; - - ITypedElement edition= pair.getEdition(); - ITypedElement item= pair.getItem(); - - long ldate= ((IModificationDate)edition).getModificationDate(); - long day= dayNumber(ldate); - Date date= new Date(ldate); - if (lastDay == null || day != dayNumber(((Date)lastDay.getData()).getTime())) { - lastDay= new TreeItem(fEditionTree, SWT.NONE); - lastDay.setImage(fDateImage); - String df= DateFormat.getDateInstance().format(date); - long today= dayNumber(System.currentTimeMillis()); - - String formatKey; - if (day == today) - formatKey= "todayFormat"; //$NON-NLS-1$ - else if (day == today-1) - formatKey= "yesterdayFormat"; //$NON-NLS-1$ - else - formatKey= "dayFormat"; //$NON-NLS-1$ - String pattern= Utilities.getString(fBundle, formatKey); - if (pattern != null) - df= MessageFormat.format(pattern, new String[] { df }); - lastDay.setText(df); - lastDay.setData(date); - } - TreeItem ti= new TreeItem(lastDay, SWT.NONE); - ti.setImage(getEditionImage(edition, item)); - - String s= getShortEditionLabel(edition, item, date); - if (pair.fHasError) { - String pattern= Utilities.getString(fBundle, "parseErrorFormat"); //$NON-NLS-1$ - s= MessageFormat.format(pattern, new String[] { s } ); - } - ti.setText(s); - - ti.setData(pair); - - // determine selected TreeItem - TreeItem selection= first ? ti : null; - if (fMemberSelection != null) { - Object selected= fMemberSelection.get(fCurrentEditions); - if (selected != null) { - if (selected == pair.getItem()) - selection= ti; - else - selection= null; - } - } - if (selection != null) { - fEditionTree.setSelection(new TreeItem[] { selection }); - if (!fAddMode) - fEditionTree.setFocus(); - feedInput(selection); - } - - if (first) // expand first node - lastDay.setExpanded(true); - } - - /** - * Feeds selection from member viewer to edition viewer. - */ - private void handleMemberSelect(Widget w) { - Object data= w.getData(); - if (data instanceof List) { - List editions= (List) data; - if (editions != fCurrentEditions) { - fCurrentEditions= editions; - fEditionTree.removeAll(); - - String pattern= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$ - String title= MessageFormat.format(pattern, new Object[] { ((Item)w).getText() }); - fEditionPane.setText(title); - - Iterator iter= editions.iterator(); - while (iter.hasNext()) { - Object item= iter.next(); - if (item instanceof Pair) - addEdition((Pair) item); - } - } - } - } - - private void setInput(Object input) { - if (!fCompare && input instanceof ICompareInput) { - ICompareInput ci= (ICompareInput) input; - if (fTargetIsRight) - input= ci.getLeft(); - else - input= ci.getRight(); - } - fContentPane.setInput(input); - if (fStructuredComparePane != null) - fStructuredComparePane.setInput(input); - } - - /* - * Feeds selection from edition viewer to content (and structure) viewer. - */ - private void feedInput(Widget w) { - Object input= w.getData(); - boolean isOK= false; - if (input instanceof Pair) { - Pair pair= (Pair) input; - fSelectedItem= pair.getItem(); - isOK= !pair.fHasError; - - ITypedElement edition= pair.getEdition(); - String editionLabel= getEditionLabel(edition, fSelectedItem); - Image editionImage= getEditionImage(edition, fSelectedItem); - - if (fAddMode) { - if (fMemberSelection != null) - fMemberSelection.put(fCurrentEditions, fSelectedItem); - setInput(fSelectedItem); - fContentPane.setText(editionLabel); - fContentPane.setImage(editionImage); - } else { - if (fTargetIsRight) { - fCompareConfiguration.setLeftLabel(editionLabel); - fCompareConfiguration.setLeftImage(editionImage); - setInput(new DiffNode(fSelectedItem, fTargetPair.getItem())); - } else { - fCompareConfiguration.setRightLabel(editionLabel); - fCompareConfiguration.setRightImage(editionImage); - setInput(new DiffNode(fTargetPair.getItem(), fSelectedItem)); - } - } - } else { - fSelectedItem= null; - setInput(null); - } - if (fCommitButton != null) { - if (fMultiSelect) - fCommitButton.setEnabled(isOK && fSelectedItem != null && fArrayList.size() > 0); - else - fCommitButton.setEnabled(isOK && fSelectedItem != null && fTargetPair.getItem() != fSelectedItem); - } - } - - /* - * Feeds selection from structure viewer to content viewer. - */ - private void feedInput2(ISelection sel) { - if (sel instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection) sel; - if (ss.size() == 1) - fContentPane.setInput(ss.getFirstElement()); - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java deleted file mode 100644 index cc521e14e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.InputStream; -import java.io.BufferedInputStream; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.core.resources.IFileState; -import org.eclipse.core.runtime.CoreException; - -/** - * A combination <code>IFileState</code> and <code>ITypedElement</code> that can be used as - * an input to a compare viewer or other places where an <code>IStreamContentAccessor</code> - * is needed. - * <p> - * <p> - * Clients may instantiate this class; it is not intended to be subclassed. - * </p> - */ -public class HistoryItem implements IStreamContentAccessor, ITypedElement, IModificationDate { - - private ITypedElement fBase; - private IFileState fFileState; - - /** - * Creates a <code>HistoryItem</code> object which combines the given <code>IFileState</code> - * and <code>ITypedElement</code> into an object - * which is suitable as input for a compare viewer or <code>ReplaceWithEditionDialog</code>. - * - * @param base the implementation of the <code>ITypedElement</code> interface delegates to this base <code>ITypedElement</code> - * @param fileState the <code>IFileState</code> from which the streamable contents and the modification time is derived from - */ - public HistoryItem(ITypedElement base, IFileState fileState) { - fBase= base; - fFileState= fileState; - } - - /* (non-Javadoc) - * see ITypedElement.getName - */ - public String getName() { - return fBase.getName(); - } - - /* (non-Javadoc) - * see ITypedElement.getImage - */ - public Image getImage() { - return fBase.getImage(); - } - - /* (non-Javadoc) - * see ITypedElement.getType - */ - public String getType() { - return fBase.getType(); - } - - /* (non-Javadoc) - * see IModificationDate.getModificationDate - */ - public long getModificationDate() { - return fFileState.getModificationTime(); - } - - /* (non-Javadoc) - * see IStreamContentAccessor.getContents - */ - public InputStream getContents() throws CoreException { - return new BufferedInputStream(fFileState.getContents()); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java deleted file mode 100644 index 9aab4f126..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -/** - * An <code>IContentChangeListener</code> is informed about content changes of a - * <code>IContentChangeNotifier</code>. - * <p> - * Clients may implement this interface. - * </p> - * - * @see IContentChangeNotifier - */ -public interface IContentChangeListener { - - /** - * Called whenever the content of the given source has changed. - * - * @param source the source whose contents has changed - */ - void contentChanged(IContentChangeNotifier source); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java deleted file mode 100644 index fba34d2e6..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -/** - * Interface common to all objects that provide a means for registering - * for content change notification. - * <p> - * Clients may implement this interface. - * </p> - * - * @see IContentChangeListener - */ -public interface IContentChangeNotifier { - - /** - * Adds a content change listener to this notifier. - * Has no effect if an identical listener is already registered. - * - * @param listener a content changed listener - */ - void addContentChangeListener(IContentChangeListener listener); - - /** - * Removes the given content changed listener from this notifier. - * Has no effect if the listener is not registered. - * - * @param listener a content changed listener - */ - void removeContentChangeListener(IContentChangeListener listener); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java deleted file mode 100644 index 44fdc1c7f..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -/** - * Common interface for objects with editable contents. - * Typically it is implemented by objects that also implement - * the <code>IStreamContentAccessor</code> interface. - * <p> - * Clients may implement this interface. - * <p> - * Note that implementing <code>IEditableContent</code> does not - * automatically mean that it is editable. An object is only editable if - * it implements <code>IEditableContent</code> and the <code>isEditable</code> method returns <code>true</code>. - * - * @see IStreamContentAccessor - */ -public interface IEditableContent { - - /** - * Returns <code>true</code> if this object can be modified. - * If it returns <code>false</code> the other methods of this API must not be called. - * - * @return <code>true</code> if this object can be modified - */ - boolean isEditable(); - - /** - * Replaces the current content with the given new bytes. - * - * @param newContent this new contents replaces the old contents - */ - void setContent(byte[] newContent); - - /** - * This method is called on a parent to add or remove a child, - * or to copy the contents of a child. - * - * What to do is encoded in the two arguments as follows: - * <TABLE> - * <TR> - * <TD>add:</TD> - * <TD>child == null</TD> - * <TD>other != null</TD> - * </TR> - * <TR> - * <TD>remove:</TD> - * <TD>child != null</TD> - * <TD>other == null</TD> - * </TR> - * <TR> - * <TD>copy:</TD> - * <TD>child != null</TD> - * <TD>other != null</TD> - * </TR> - * </TABLE> - */ - ITypedElement replace(ITypedElement child, ITypedElement other); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java deleted file mode 100644 index 5e8def836..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -/** - * Common interface for objects with a modification date. The modification date - * can be used in the UI to give the user a general idea of how old an object is. - * <p> - * Clients may implement this interface. - * </p> - */ -public interface IModificationDate { - - /** - * Returns the modification time of this object. - * <p> - * Note that this value should only be used to give the user a general idea of how - * old the object is. - * - * @return the time of last modification, in milliseconds since January 1, 1970, 00:00:00 GMT - */ - long getModificationDate(); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java deleted file mode 100644 index 85f4f3485..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.jface.util.IPropertyChangeListener; - -/** - * Interface common to all objects that provide a means for registering - * for property change notification. - * <p> - * Clients may implement this interface. - * </p> - * - * @see org.eclipse.jface.util.IPropertyChangeListener - */ -public interface IPropertyChangeNotifier { - - /** - * Adds a listener for property changes to this notifier. - * Has no effect if an identical listener is already registered. - * - * @param listener a property change listener - */ - void addPropertyChangeListener(IPropertyChangeListener listener); - - /** - * Removes the given content change listener from this notifier. - * Has no effect if the identical listener is not registered. - * - * @param listener a property change listener - */ - void removePropertyChangeListener(IPropertyChangeListener listener); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java deleted file mode 100644 index f17b3184d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.InputStream; - -import org.eclipse.core.runtime.CoreException; - -/** - * An <code>IStreamContentAccessor</code> object represents a set of bytes which can be - * accessed by means of a stream. - * <p> - * Clients may implement this interface, or use the standard implementation, - * <code>BufferedContent</code>. - * - * @see BufferedContent - */ -public interface IStreamContentAccessor { - /** - * Returns an open <code>InputStream</code> for this object which can be used to retrieve the object's content. - * The client is responsible for closing the stream when finished. - * Returns <code>null</code> if this object has no streamable contents. - * - * @return an input stream containing the contents of this object - * @exception CoreException if the contents of this object could not be accessed - */ - InputStream getContents() throws CoreException; -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java deleted file mode 100644 index 15dd45c50..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.swt.graphics.Image; - -/** - * Interface for getting the name, image, and type for an object. - * <p> - * These methods are typically used to present an input object in the compare UI - * (<code>getName</code> and <code>getImage</code>) - * and for finding a viewer for a given input type (<code>getType</code>). - * <p> - * Clients may implement this interface. - */ -public interface ITypedElement { - - /** - * Type for a folder input (value <code>"FOLDER"</code>). - * Folders are comparison elements that have no contents, only a name and children. - */ - public static final String FOLDER_TYPE= "FOLDER"; //$NON-NLS-1$ - - /** - * Type for an element whose actual type is text (value <code>"txt"</code>). - */ - public static final String TEXT_TYPE= "txt"; //$NON-NLS-1$ - - /** - * Type for an element whose actual type could not - * be determined. (value <code>"???"</code>). - */ - public static final String UNKNOWN_TYPE= "???"; //$NON-NLS-1$ - - /** - * Returns the name of this object. - * The name is used when displaying this object in the UI. - * - * @return the name of this object - */ - String getName(); - - /** - * Returns an image for this object. - * This image is used when displaying this object in the UI. - * - * @return the image of this object or <code>null</code> if this type of input has no image - */ - Image getImage(); - - /** - * Returns the type of this object. For objects with a file name - * this is typically the file extension. For folders its the constant - * <code>FOLDER_TYPE</code>. - * The type is used for determining a suitable viewer for this object. - * - * @return the type of this object - */ - String getType(); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java deleted file mode 100644 index 918ed6bb4..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -/** - * A factory object for <code>Viewer</code>. - * <p> - * This interface is only required when creating a <code>Viewer</code> from a plugin.xml file. - * Since <code>Viewer</code>s have no default constructor they cannot be - * instantiated directly with <code>Class.forName</code>. - */ -public interface IViewerCreator { - - /** - * Creates a new viewer under the given SWT parent control. - * - * @param parent the SWT parent control under which to create the viewer's SWT control - * @param config a compare configuration the newly created viewer might want to use - * @return a new viewer - */ - Viewer createViewer(Composite parent, CompareConfiguration config); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java deleted file mode 100644 index b0fac3450..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.util.ResourceBundle; -import org.eclipse.jface.action.Action; - -import org.eclipse.compare.internal.CompareNavigator; -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.internal.Utilities; - -/** - * A <code>NavigationAction</code> is used to navigate through the individual - * differences of a <code>CompareEditorInput</code>. - * <p> - * Clients may instantiate this class; it is not intended to be subclassed. - * </p> - * @since 2.0 - */ -public class NavigationAction extends Action { - - private boolean fNext; - private CompareEditorInput fCompareEditorInput; - - - /** - * Creates a <code>NavigationAction</code>. - * - * @param next if <code>true</code> action goes to the next difference; otherwise to the previous difference. - */ - public NavigationAction(boolean next) { - this(CompareUIPlugin.getResourceBundle(), next); - } - - /** - * Creates a <code>NavigationAction</code> that initializes its attributes - * from the given <code>ResourceBundle</code>. - * - * @param bundle is used to initialize the action - * @param next if <code>true</code> action goes to the next difference; otherwise to the previous difference. - */ - public NavigationAction(ResourceBundle bundle, boolean next) { - Utilities.initAction(this, bundle, next ? "action.Next." : "action.Previous."); //$NON-NLS-2$ //$NON-NLS-1$ - fNext= next; - } - - public void run() { - if (fCompareEditorInput != null) { - Object adapter= fCompareEditorInput.getAdapter(CompareNavigator.class); - if (adapter instanceof CompareNavigator) - ((CompareNavigator)adapter).selectChange(fNext); - } - } - - /** - * Sets the <code>CompareEditorInput</code> on which this action operates. - * - * @param input the <code>CompareEditorInput</code> on which this action operates; if <code>null</code> action does nothing - */ - public void setCompareEditorInput(CompareEditorInput input) { - fCompareEditorInput= input; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java deleted file mode 100644 index 31c367b19..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java +++ /dev/null @@ -1,196 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.*; -import java.util.ArrayList; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.compare.structuremergeviewer.IStructureComparator; - -/** - * A <code>ResourceNode</code> wrappers an <code>IResources</code> so that it can be used - * as input for the differencing engine (interfaces <code>IStructureComparator</code> and <code>ITypedElement</code>) - * and the <code>ReplaceWithEditionDialog</code> (interfaces <code>ITypedElement</code> and <code>IModificationDate</code>). - * <p> - * Clients may instantiate this class; it is not intended to be subclassed. - * </p> - * - * @see EditionSelectionDialog - */ -public class ResourceNode extends BufferedContent - implements IStructureComparator, ITypedElement, IEditableContent, IModificationDate { - - private IResource fResource; - private ArrayList fChildren; - - - /** - * Creates a <code>ResourceNode</code> for the given resource. - * - * @param resource the resource - */ - public ResourceNode(IResource resource) { - fResource= resource; - Assert.isNotNull(resource); - } - - /** - * Returns the corresponding resource for this object. - * - * @return the corresponding resource - */ - public IResource getResource() { - return fResource; - } - - /* (non Javadoc) - * see IStreamContentAccessor.getContents - */ - public InputStream getContents() throws CoreException { - if (fResource instanceof IStorage) - return super.getContents(); - return null; - } - - /* (non Javadoc) - * see IModificationDate.getModificationDate - */ - public long getModificationDate() { - IPath path= fResource.getLocation(); - File file= path.toFile(); - return file.lastModified(); - } - - /* (non Javadoc) - * see ITypedElement.getName - */ - public String getName() { - if (fResource != null) - return fResource.getName(); - return null; - } - - /* (non Javadoc) - * see ITypedElement.getType - */ - public String getType() { - if (fResource instanceof IContainer) - return ITypedElement.FOLDER_TYPE; - if (fResource != null) { - String s= fResource.getFileExtension(); - if (s != null) - return s; - } - return ITypedElement.UNKNOWN_TYPE; - } - - /* (non Javadoc) - * see ITypedElement.getImage - */ - public Image getImage() { - return CompareUI.getImage(fResource); - } - - /** - * Returns <code>true</code> if the other object is of type <code>ITypedElement</code> - * and their names are identical. The content is not considered. - */ - /* (non Javadoc) - * see IStructureComparator.equals - */ - public boolean equals(Object other) { - if (other instanceof ITypedElement) { - String otherName= ((ITypedElement)other).getName(); - return getName().equals(otherName); - } - return super.equals(other); - } - - /** - * Returns the hash code of the name. - */ - /* (non Javadoc) - * see IStructureComparator.hashCode - */ - public int hashCode() { - return getName().hashCode(); - } - - /* (non Javadoc) - * see IStructureComparator.getChildren - */ - public Object[] getChildren() { - if (fChildren == null) { - fChildren= new ArrayList(); - if (fResource instanceof IContainer) { - try { - IResource members[]= ((IContainer)fResource).members(); - for (int i= 0; i < members.length; i++) { - IStructureComparator child= createChild(members[i]); - if (child != null) - fChildren.add(child); - } - } catch (CoreException ex) { - } - } - } - return fChildren.toArray(); - } - - /** - * This hook method is called from <code>getChildren</code> once for every - * member of a container resource. This implementation - * creates a new <code>ResourceNode</code> for the given child resource. - * Clients may override this method to create a different type of - * <code>IStructureComparator</code> or to filter children by returning <code>null</code>. - * - * @param child the child resource for which a <code>IStructureComparator</code> must be returned - * @return a <code>ResourceNode</code> for the given child or <code>null</code> - */ - protected IStructureComparator createChild(IResource child) { - return new ResourceNode(child); - } - - /** - * Returns an open stream if the corresponding resource implements the - * <code>IStorage</code> interface. Otherwise the value <code>null</code> is returned. - * - * @return a buffered input stream containing the contents of this storage - * @exception CoreException if the contents of this storage could not be accessed - */ - protected InputStream createStream() throws CoreException { - if (fResource instanceof IStorage) - return new BufferedInputStream(((IStorage)fResource).getContents()); - return null; - } - - /* (non Javadoc) - * see IEditableContent.isEditable - */ - public boolean isEditable() { - return true; - } - - /* (non Javadoc) - * see IEditableContent.replace - */ - public ITypedElement replace(ITypedElement child, ITypedElement other) { - return child; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java deleted file mode 100644 index 7e63053ab..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.custom.SashForm; - -/** - * The Splitter adds support for nesting to a SashForm. - * <P> - * If Splitters are nested directly: - * <UL> - * <LI>changing the visibility of a child may propagate upward to the parent Splitter if the child - * is the last child to become invisible or the first to become visible.</LI> - * <LI>maximizing a child makes it as large as the topmost enclosing Splitter</LI> - * </UL> - * - * @since 2.1 - */ -public class Splitter extends SashForm { - - private static final String VISIBILITY= "org.eclipse.compare.internal.visibility"; //$NON-NLS-1$ - - /** - * Constructs a new instance of this class given its parent - * and a style value describing its behavior and appearance. - * <p> - * The style value is either one of the style constants defined in - * class <code>SWT</code> which is applicable to instances of this - * class, or must be built by <em>bitwise OR</em>'ing together - * (that is, using the <code>int</code> "|" operator) two or more - * of those <code>SWT</code> style constants. The class description - * lists the style constants that are applicable to the class. - * Style bits are also inherited from superclasses. - * </p> - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - */ - public Splitter(Composite parent, int style) { - super(parent, style); - } - - /** - * Sets the visibility of the given child in this Splitter. If this change - * affects the visibility state of the whole Splitter, and if the Splitter - * is directly nested in one or more Splitters, this method recursively - * propagates the new state upward. - * - * @param child the child control for which the visibility is changed - * @param visible the new visibility state - */ - public void setVisible(Control child, boolean visible) { - - boolean wasEmpty= isEmpty(); - - child.setVisible(visible); - child.setData(VISIBILITY, new Boolean(visible)); - - if (wasEmpty != isEmpty()) { - // recursively walk up - Composite parent= getParent(); - if (parent instanceof Splitter) { - Splitter sp= (Splitter) parent; - sp.setVisible(this, visible); - sp.layout(); - } - } else { - layout(); - } - } - - /* (non-Javadoc) - * Recursively calls setMaximizedControl for all direct parents that are - * itself Splitters. - */ - public void setMaximizedControl(Control control) { - if (control == null || control == getMaximizedControl()) - super.setMaximizedControl(null); - else - super.setMaximizedControl(control); - - // recursively walk upward - Composite parent= getParent(); - if (parent instanceof Splitter) - ((Splitter) parent).setMaximizedControl(this); - else - layout(true); - } - - /* (non-Javadoc) - * Returns true if Splitter has no children or if all children are invisible. - */ - private boolean isEmpty() { - Control[] controls= getChildren(); - for (int i= 0; i < controls.length; i++) - if (isVisible(controls[i])) - return false; - return true; - } - - /* (non-Javadoc) - * Returns the visibility state of the given child control. If the - * control is a Sash, this method always returns false. - */ - private boolean isVisible(Control child) { - if (child instanceof Sash) - return false; - Object data= child.getData(VISIBILITY); - if (data instanceof Boolean) - return ((Boolean)data).booleanValue(); - return true; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java deleted file mode 100644 index f497f18c4..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java +++ /dev/null @@ -1,314 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.*; -import java.util.Iterator; -import java.util.HashMap; -import java.util.zip.*; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.compare.internal.Utilities; - - -/** - * This implementation of the <code>IStructureCreator</code> interface - * makes the contents of a zip archive available as a - * hierarchical structure of <code>IStructureComparator</code>s. - * <p> - * It is used when comparing the internal structure of a zip archive. - * - * @since 2.0 - */ -public class ZipFileStructureCreator implements IStructureCreator { - - /** - * Common base class for ZipFolder and ZipFile - */ - static abstract class ZipResource implements IStructureComparator, ITypedElement { - - private String fName; - - ZipResource(String name) { - fName= name; - } - - public String getName() { - return fName; - } - - public Image getImage() { - return CompareUI.getImage(getType()); - } - - /** - * Returns true if other is ITypedElement and names are equal. - * @see IComparator#equals - */ - public boolean equals(Object other) { - if (other instanceof ITypedElement) - return fName.equals(((ITypedElement) other).getName()); - return super.equals(other); - } - - public int hashCode() { - return fName.hashCode(); - } - } - - static class ZipFolder extends ZipResource { - - private HashMap fChildren= new HashMap(10); - - ZipFolder(String name) { - super(name); - } - - public String getType() { - return ITypedElement.FOLDER_TYPE; - } - - public Object[] getChildren() { - Object[] children= new Object[fChildren.size()]; - Iterator iter= fChildren.values().iterator(); - for (int i= 0; iter.hasNext(); i++) - children[i]= iter.next(); - return children; - } - - ZipFile createContainer(String path) { - String entry= path; - int pos= path.indexOf('/'); - if (pos < 0) - pos= path.indexOf('\\'); - if (pos >= 0) { - entry= path.substring(0, pos); - path= path.substring(pos + 1); - } else if (entry.length() > 0) { - ZipFile ze= new ZipFile(entry); - fChildren.put(entry, ze); - return ze; - } else - return null; - - ZipFolder folder= null; - if (fChildren != null) { - Object o= fChildren.get(entry); - if (o instanceof ZipFolder) - folder= (ZipFolder) o; - } - - if (folder == null) { - folder= new ZipFolder(entry); - fChildren.put(entry, folder); - } - - return folder.createContainer(path); - } - } - - static class ZipFile extends ZipResource implements IStreamContentAccessor { - - private byte[] fContents; - - ZipFile(String name) { - super(name); - } - - public String getType() { - String s= this.getName(); - int pos= s.lastIndexOf('.'); - if (pos >= 0) - return s.substring(pos + 1); - return ITypedElement.UNKNOWN_TYPE; - } - - public Object[] getChildren() { - return null; - } - - public InputStream getContents() { - if (fContents == null) - fContents= new byte[0]; - return new ByteArrayInputStream(fContents); - } - - byte[] getBytes() { - return fContents; - } - - void setBytes(byte[] buffer) { - fContents= buffer; - } - - void appendBytes(byte[] buffer, int length) { - if (length > 0) { - int oldLen= 0; - if (fContents != null) - oldLen= fContents.length; - byte[] newBuf= new byte[oldLen + length]; - if (oldLen > 0) - System.arraycopy(fContents, 0, newBuf, 0, oldLen); - System.arraycopy(buffer, 0, newBuf, oldLen, length); - fContents= newBuf; - } - } - } - - private String fTitle; - - /** - * Create a new ZipFileStructureCreator. - */ - public ZipFileStructureCreator() { - this(Utilities.getString("ZipStructureCreator.name")); //$NON-NLS-1$ - } - - /** - * Create a new ZipFileStructureCreator with the given title. - * The title is returned by the method <code>getName()</code>. - * @param title the title of this strcuture creator - */ - public ZipFileStructureCreator(String title) { - fTitle= title; - } - - public String getName() { - return fTitle; - } - - public IStructureComparator getStructure(Object input) { - - InputStream is= null; - - if (input instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) input; - try { - is= sca.getContents(); - } catch (CoreException ex) { - } - } - - if (is == null) - return null; - - ZipInputStream zip= new ZipInputStream(is); - ZipFolder root= new ZipFolder(""); //$NON-NLS-1$ - try { - for (;;) { - ZipEntry entry= zip.getNextEntry(); - if (entry == null) - break; - - ZipFile ze= root.createContainer(entry.getName()); - if (ze != null) { - int length= (int) entry.getSize(); - if (length >= 0) { - byte[] buffer= new byte[length]; - int offset= 0; - - do { - int n= zip.read(buffer, offset, length); - offset += n; - length -= n; - } while (length > 0); - - ze.setBytes(buffer); - } else { - byte[] buffer= new byte[1024]; - int n; - do { - n= zip.read(buffer, 0, 1024); - ze.appendBytes(buffer, n); - } while (n >= 0); - } - } - zip.closeEntry(); - } - } catch (IOException ex) { - return null; - } finally { - try { - zip.close(); - } catch (IOException ex) { - } - } - - if (root.fChildren.size() == 1) { - Iterator iter= root.fChildren.values().iterator(); - return (IStructureComparator) iter.next(); - } - return root; - } - - public String getContents(Object o, boolean ignoreWhitespace) { - if (o instanceof ZipFile) { - byte[] bytes= ((ZipFile)o).getBytes(); - if (bytes != null) - return new String(bytes); - return ""; //$NON-NLS-1$ - } - return null; - } - - /** - * Returns <code>false</code> since we cannot update a zip archive. - * @return <code>false</code> - */ - public boolean canSave() { - return false; - } - - /** - * Called whenever a copy operation has been performed on a tree node. - * This implementation throws an <code>AssertionFailedException</code> - * since we cannot update a zip archive. - * - * @param structure the node for which to save the new content - * @param input the object from which the structure tree was created in <code>getStructure</code> - */ - public void save(IStructureComparator structure, Object input) { - Assert.isTrue(false); // Cannot update zip archive - } - - public IStructureComparator locate(Object path, Object source) { - return null; - } - - /** - * Returns <code>false</code> since this <code>IStructureCreator</code> - * cannot rewrite the diff tree in order to fold certain combinations of - * additons and deletions. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - * @return <code>false</code> - */ - public boolean canRewriteTree() { - return false; - } - - /** - * Empty implementation since this <code>IStructureCreator</code> - * cannot rewrite the diff tree in order to fold certain combinations of - * additons and deletions. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - */ - public void rewriteTree(Differencer diff, IDiffContainer root) { - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java deleted file mode 100644 index e6e83c4db..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java +++ /dev/null @@ -1,978 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.compare.contentmergeviewer; - -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.ui.IKeyBindingService; -import org.eclipse.ui.IWorkbenchPartSite; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.jface.util.*; -import org.eclipse.jface.action.*; -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.viewers.ContentViewer; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ISelection; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.compare.internal.*; - -/** - * An abstract compare and merge viewer with two side-by-side content areas - * and an optional content area for the ancestor. The implementation makes no - * assumptions about the content type. - * <p> - * <code>ContentMergeViewer</code> - * <ul> - * <li>implements the overall layout and defines hooks so that subclasses - * can easily provide an implementation for a specific content type, - * <li>implements the UI for making the areas resizable, - * <li>has an action for controlling whether the ancestor area is visible or not, - * <li>has actions for copying one side of the input to the other side, - * <li>tracks the dirty state of the left and right sides and send out notification - * on state changes. - * </ul> - * A <code>ContentMergeViewer</code> accesses its - * model by means of a content provider which must implement the - * <code>IMergeViewerContentProvider</code> interface. - * </p> - * <p> - * Clients may wish to use the standard concrete subclass <code>TextMergeViewer</code>, - * or define their own subclass. - * - * @see IMergeViewerContentProvider - * @see TextMergeViewer - */ -public abstract class ContentMergeViewer extends ContentViewer - implements IPropertyChangeNotifier, ISavable { - - class SaveAction extends MergeViewerAction { - - SaveAction(boolean left) { - super(true, false, false); - Utilities.initAction(this, getResourceBundle(), "action.save."); //$NON-NLS-1$ - } - - public void run() { - saveContent(getInput()); - } - }; - - /** - * Property names. - */ - private static final String ANCESTOR_ENABLED= ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE; - - /* package */ static final int HORIZONTAL= 1; - /* package */ static final int VERTICAL= 2; - - static final double HSPLIT= 0.5; - static final double VSPLIT= 0.3; - - private class ContentMergeViewerLayout extends Layout { - - public Point computeSize(Composite c, int w, int h, boolean force) { - return new Point(100, 100); - } - - public void layout(Composite composite, boolean force) { - - // determine some derived sizes - int headerHeight= fLeftLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y; - Rectangle r= composite.getClientArea(); - - int centerWidth= getCenterWidth(); - int width1= (int)((r.width-centerWidth)*fHSplit); - int width2= r.width-width1-centerWidth; - - int height1= 0; - int height2= 0; - if (fAncestorEnabled && fShowAncestor) { - height1= (int)((r.height-(2*headerHeight))*fVSplit); - height2= r.height-(2*headerHeight)-height1; - } else { - height1= 0; - height2= r.height-headerHeight; - } - - int y= 0; - - if (fAncestorEnabled && fShowAncestor) { - fAncestorLabel.setBounds(0, y, r.width, headerHeight); - fAncestorLabel.setVisible(true); - y+= headerHeight; - handleResizeAncestor(0, y, r.width, height1); - y+= height1; - } else { - fAncestorLabel.setVisible(false); - handleResizeAncestor(0, 0, 0, 0); - } - - fLeftLabel.getSize(); // without this resizing would not always work - - if (centerWidth > 3) { - fLeftLabel.setBounds(0, y, width1+1, headerHeight); - fDirectionLabel.setVisible(true); - fDirectionLabel.setBounds(width1+1, y, centerWidth-1, headerHeight); - fRightLabel.setBounds(width1+centerWidth, y, width2, headerHeight); - } else { - fLeftLabel.setBounds(0, y, width1, headerHeight); - fDirectionLabel.setVisible(false); - fRightLabel.setBounds(width1, y, r.width-width1, headerHeight); - } - - y+= headerHeight; - - if (fCenter != null && !fCenter.isDisposed()) - fCenter.setBounds(width1, y, centerWidth, height2); - - handleResizeLeftRight(0, y, width1, centerWidth, width2, height2); - } - } - - class Resizer extends MouseAdapter implements MouseMoveListener { - - Control fControl; - int fX, fY; - int fWidth1, fWidth2; - int fHeight1, fHeight2; - int fDirection; - boolean fLiveResize; - boolean fIsDown; - - public Resizer(Control c, int dir) { - fDirection= dir; - fControl= c; - fLiveResize= !(fControl instanceof Sash); - fControl.addMouseListener(this); - fControl.addMouseMoveListener(this); - fControl.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - fControl= null; - } - } - ); - } - - public void mouseDoubleClick(MouseEvent e) { - if ((fDirection & HORIZONTAL) != 0) - fHSplit= HSPLIT; - if ((fDirection & VERTICAL) != 0) - fVSplit= VSPLIT; - fComposite.layout(true); - } - - public void mouseDown(MouseEvent e) { - Composite parent= fControl.getParent(); - - Point s= parent.getSize(); - Point as= fAncestorLabel.getSize(); - Point ys= fLeftLabel.getSize(); - Point ms= fRightLabel.getSize(); - - fWidth1= ys.x; - fWidth2= ms.x; - fHeight1= fLeftLabel.getLocation().y-as.y; - fHeight2= s.y-(fLeftLabel.getLocation().y+ys.y); - - fX= e.x; - fY= e.y; - fIsDown= true; - } - - public void mouseUp(MouseEvent e) { - fIsDown= false; - if (!fLiveResize) - resize(e); - } - - public void mouseMove(MouseEvent e) { - if (fIsDown && fLiveResize) - resize(e); - } - - private void resize(MouseEvent e) { - int dx= e.x-fX; - int dy= e.y-fY; - - int centerWidth= fCenter.getSize().x; - - if (fWidth1 + dx > centerWidth && fWidth2 - dx > centerWidth) { - fWidth1+= dx; - fWidth2-= dx; - if ((fDirection & HORIZONTAL) != 0) - fHSplit= (double)fWidth1/(double)(fWidth1+fWidth2); - } - if (fHeight1 + dy > centerWidth && fHeight2 - dy > centerWidth) { - fHeight1+= dy; - fHeight2-= dy; - if ((fDirection & VERTICAL) != 0) - fVSplit= (double)fHeight1/(double)(fHeight1+fHeight2); - } - - fComposite.layout(true); - fControl.getDisplay().update(); - } - }; - - /** Style bits for top level composite */ - private int fStyles; - private ResourceBundle fBundle; - private CompareConfiguration fCompareConfiguration; - private IPropertyChangeListener fPropertyChangeListener; - private ICompareInputChangeListener fCompareInputChangeListener; - private ListenerList fListenerList; - boolean fConfirmSave= true; - - private double fHSplit= HSPLIT; // width ratio of left and right panes - private double fVSplit= VSPLIT; // height ratio of ancestor and bottom panes - - private boolean fAncestorEnabled= true; // show ancestor in case of conflicts - /* package */ boolean fShowAncestor= false; // if current input has conflicts - private boolean fIsThreeWay= false; - private ActionContributionItem fAncestorItem; - - private Action fCopyLeftToRightAction; // copy from left to right - private Action fCopyRightToLeftAction; // copy from right to left - - MergeViewerAction fLeftSaveAction; - MergeViewerAction fRightSaveAction; - - private IKeyBindingService fKeyBindingService; - - // SWT widgets - /* package */ Composite fComposite; - private CLabel fAncestorLabel; - private CLabel fLeftLabel; - private CLabel fRightLabel; - /* package */ CLabel fDirectionLabel; - /* package */ Control fCenter; - - //---- SWT resources to be disposed - private Image fRightArrow; - private Image fLeftArrow; - private Image fBothArrow; - //---- end - - /** - * Creates a new content merge viewer and initializes with a resource bundle and a - * configuration. - * - * @param bundle the resource bundle - * @param cc the configuration object - */ - protected ContentMergeViewer(int style, ResourceBundle bundle, CompareConfiguration cc) { - fStyles= style; - fBundle= bundle; - - fAncestorEnabled= Utilities.getBoolean(cc, ANCESTOR_ENABLED, fAncestorEnabled); - fConfirmSave= Utilities.getBoolean(cc, CompareEditor.CONFIRM_SAVE_PROPERTY, fConfirmSave); - - setContentProvider(new MergeViewerContentProvider(cc)); - - fCompareInputChangeListener= new ICompareInputChangeListener() { - public void compareInputChanged(ICompareInput input) { - ContentMergeViewer.this.internalRefresh(input); - } - }; - - fCompareConfiguration= cc; - if (fCompareConfiguration != null) { - fPropertyChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - ContentMergeViewer.this.propertyChange(event); - } - }; - fCompareConfiguration.addPropertyChangeListener(fPropertyChangeListener); - } - - fLeftSaveAction= new SaveAction(true); - fLeftSaveAction.setEnabled(false); - fRightSaveAction= new SaveAction(false); - fRightSaveAction.setEnabled(false); - } - - //---- hooks --------------------- - - /** - * Returns the viewer's name. - * - * @return the viewer's name - */ - public String getTitle() { - return Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$ - } - - /** - * Creates the SWT controls for the ancestor, left, and right - * content areas of this compare viewer. - * Implementations typically hold onto the controls - * so that they can be initialized with the input objects in method - * <code>updateContent</code>. - * - * @param composite the container for the three areas - */ - abstract protected void createControls(Composite composite); - - /** - * Lays out the ancestor area of the compare viewer. - * It is called whenever the viewer is resized or when the sashes between - * the areas are moved to adjust the size of the areas. - * - * @param x the horizontal position of the ancestor area within its container - * @param y the vertical position of the ancestor area within its container - * @param width the width of the ancestor area - * @param height the height of the ancestor area - */ - abstract protected void handleResizeAncestor(int x, int y, int width, int height); - - /** - * Lays out the left and right areas of the compare viewer. - * It is called whenever the viewer is resized or when the sashes between - * the areas are moved to adjust the size of the areas. - * - * @param x the horizontal position of the left area within its container - * @param y the vertical position of the left and right area within its container - * @param leftWidth the width of the left area - * @param centerWidth the width of the gap between the left and right areas - * @param rightWidth the width of the right area - * @param height the height of the left and right areas - */ - abstract protected void handleResizeLeftRight(int x, int y, int leftWidth, int centerWidth, - int rightWidth, int height); - - /** - * Contributes items to the given <code>ToolBarManager</code>. - * It is called when this viewer is installed in its container and if the container - * has a <code>ToolBarManager</code>. - * The <code>ContentMergeViewer</code> implementation of this method does nothing. - * Subclasses may reimplement. - * - * @param toolBarManager the toolbar manager to contribute to - */ - protected void createToolItems(ToolBarManager toolBarManager) { - } - - /** - * Initializes the controls of the three content areas with the given input objects. - * - * @param ancestor the input for the ancestor area - * @param left the input for the left area - * @param right the input for the right area - */ - abstract protected void updateContent(Object ancestor, Object left, Object right); - - /** - * Copies the content of one side to the other side. - * Called from the (internal) actions for copying the sides of the viewer's input object. - * - * @param leftToRight if <code>true</code>, the left side is copied to the right side; - * if <code>false</code>, the right side is copied to the left side - */ - abstract protected void copy(boolean leftToRight); - - /** - * Returns the byte contents of the left or right side. If the viewer - * has no editable content <code>null</code> can be returned. - * - * @param left if <code>true</code>, the byte contents of the left area is returned; - * if <code>false</code>, the byte contents of the right area - * @return the content as an array of bytes, or <code>null</code> - */ - abstract protected byte[] getContents(boolean left); - - //---------------------------- - - /** - * Returns the resource bundle of this viewer. - * - * @return the resource bundle - */ - protected ResourceBundle getResourceBundle() { - return fBundle; - } - - /** - * Returns the compare configuration of this viewer, - * or <code>null</code> if this viewer does not yet have a configuration. - * - * @return the compare configuration, or <code>null</code> if none - */ - protected CompareConfiguration getCompareConfiguration() { - return fCompareConfiguration; - } - - /** - * The <code>ContentMergeViewer</code> implementation of this - * <code>ContentViewer</code> method - * checks to ensure that the content provider is an <code>IMergeViewerContentProvider</code>. - */ - public void setContentProvider(IContentProvider contentProvider) { - Assert.isTrue(contentProvider instanceof IMergeViewerContentProvider); - super.setContentProvider(contentProvider); - } - - /* package */ IMergeViewerContentProvider getMergeContentProvider() { - return (IMergeViewerContentProvider) getContentProvider(); - } - - /** - * The <code>ContentMergeViewer</code> implementation of this - * <code>Viewer</code> method returns the empty selection. Subclasses may override. - */ - public ISelection getSelection() { - return new ISelection() { - public boolean isEmpty() { - return true; - } - }; - } - - /** - * The <code>ContentMergeViewer</code> implementation of this - * <code>Viewer</code> method does nothing. Subclasses may reimplement. - */ - public void setSelection(ISelection s, boolean reveal) { - } - - /* package */ void propertyChange(PropertyChangeEvent event) { - - String key= event.getProperty(); - - if (key.equals(ANCESTOR_ENABLED)) { - fAncestorEnabled= Utilities.getBoolean(getCompareConfiguration(), ANCESTOR_ENABLED, fAncestorEnabled); - fComposite.layout(true); - return; - } - } - - void setAncestorVisibility(boolean visible, boolean enabled) { - if (fAncestorItem != null) { - Action action= (Action) fAncestorItem.getAction(); - if (action != null) { - action.setChecked(visible); - action.setEnabled(enabled); - } - } - if (fCompareConfiguration != null) - fCompareConfiguration.setProperty(ANCESTOR_ENABLED, new Boolean(visible)); - } - - //---- input - - /* package */ boolean isThreeWay() { - return fIsThreeWay; - } - - /** - * Internal hook method called when the input to this viewer is - * initially set or subsequently changed. - * <p> - * The <code>ContentMergeViewer</code> implementation of this <code>Viewer</code> - * method tries to save the old input by calling <code>doSave(...)</code> and - * then calls <code>internalRefresh(...)</code>. - * - * @param input the new input of this viewer, or <code>null</code> if there is no new input - * @param oldInput the old input element, or <code>null</code> if there was previously no input - */ - protected final void inputChanged(Object input, Object oldInput) { - - if (input != oldInput) - if (oldInput instanceof ICompareInput) - ((ICompareInput)oldInput).removeCompareInputChangeListener(fCompareInputChangeListener); - - boolean success= doSave(input, oldInput); - - if (input != oldInput) - if (input instanceof ICompareInput) - ((ICompareInput)input).addCompareInputChangeListener(fCompareInputChangeListener); - - if (success) { - setLeftDirty(false); - setRightDirty(false); - } - - if (input != oldInput) - internalRefresh(input); - } - - /** - * This method is called from the <code>Viewer</code> method <code>inputChanged</code> - * to save any unsaved changes of the old input. - * <p> - * The <code>ContentMergeViewer</code> implementation of this - * method calls <code>saveContent(...)</code>. If confirmation has been turned on - * with <code>setConfirmSave(true)</code>, a confirmation alert is posted before saving. - * </p> - * Clients can override this method and are free to decide whether - * they want to call the inherited method. - * @param newInput the new input of this viewer, or <code>null</code> if there is no new input - * @param oldInput the old input element, or <code>null</code> if there was previously no input - * @return <code>true</code> if saving was successful, or if the user didn't want to save (by pressing 'NO' in the confirmation dialog). - * @since 2.0 - */ - protected boolean doSave(Object newInput, Object oldInput) { - - // before setting the new input we have to save the old - if (fLeftSaveAction.isEnabled() || fRightSaveAction.isEnabled()) { - - // post alert - if (fConfirmSave) { - Shell shell= fComposite.getShell(); - - MessageDialog dialog= new MessageDialog(shell, - Utilities.getString(getResourceBundle(), "saveDialog.title"), //$NON-NLS-1$ - null, // accept the default window icon - Utilities.getString(getResourceBundle(), "saveDialog.message"), //$NON-NLS-1$ - MessageDialog.QUESTION, - new String[] { - IDialogConstants.YES_LABEL, - IDialogConstants.NO_LABEL, - }, - 0); // default button index - - switch (dialog.open()) { // open returns index of pressed button - case 0: - saveContent(oldInput); - break; - case 1: - setLeftDirty(false); - setRightDirty(false); - break; - case 2: - throw new ViewerSwitchingCancelled(); - } - } else - saveContent(oldInput); - return true; - } - return false; - } - - /** - * Controls whether <code>doSave(Object, Object)</code> asks for confirmation before saving - * the old input with <code>saveContent(Object)</code>. - * @param enable a value of <code>true</code> enables confirmation - * @since 2.0 - */ - public void setConfirmSave(boolean enable) { - fConfirmSave= enable; - } - - /* (non Javadoc) - * see Viewer.refresh - */ - public void refresh() { - internalRefresh(getInput()); - } - - private void internalRefresh(Object input) { - - IMergeViewerContentProvider content= getMergeContentProvider(); - if (content != null) { - Object ancestor= content.getAncestorContent(input); - if (input instanceof ICompareInput) - fIsThreeWay= (((ICompareInput)input).getKind() & Differencer.DIRECTION_MASK) != 0; - else - fIsThreeWay= ancestor != null; - - if (fAncestorItem != null) - fAncestorItem.setVisible(fIsThreeWay); - - boolean oldFlag= fShowAncestor; - fShowAncestor= fIsThreeWay && content.showAncestor(input); - - if (fAncestorEnabled && oldFlag != fShowAncestor) - fComposite.layout(true); - - ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(fComposite.getParent()); - if (tbm != null) { - updateToolItems(); - tbm.update(true); - tbm.getControl().getParent().layout(true); - } - - updateHeader(); - - Object left= content.getLeftContent(input); - Object right= content.getRightContent(input); - updateContent(ancestor, left, right); - } - } - - //---- layout & SWT control creation - - /** - * Builds the SWT controls for the three areas of a compare/merge viewer. - * <p> - * Calls the hooks <code>createControls</code> and <code>createToolItems</code> - * to let subclasses build the specific content areas and to add items to - * an enclosing toolbar. - * <p> - * This method must only be called in the constructor of subclasses. - * - * @param parent the parent control - * @return the new control - */ - protected final Control buildControl(Composite parent) { - - fComposite= new Composite(parent, fStyles) { - public boolean setFocus() { - return internalSetFocus(); - } - }; - fComposite.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle()); - - hookControl(fComposite); // hook help & dispose listener - - fComposite.setLayout(new ContentMergeViewerLayout()); - - int style= SWT.SHADOW_OUT; - fAncestorLabel= new CLabel(fComposite, style); - - fLeftLabel= new CLabel(fComposite, style); - new Resizer(fLeftLabel, VERTICAL); - - fDirectionLabel= new CLabel(fComposite, style); - fDirectionLabel.setAlignment(SWT.CENTER); - new Resizer(fDirectionLabel, HORIZONTAL | VERTICAL); - - fRightLabel= new CLabel(fComposite, style); - new Resizer(fRightLabel, VERTICAL); - - if (fCenter == null || fCenter.isDisposed()) - fCenter= createCenter(fComposite); - - createControls(fComposite); - - IWorkbenchPartSite ps= Utilities.findSite(fComposite); - fKeyBindingService= ps != null ? ps.getKeyBindingService() : null; - - ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(parent); - if (tbm != null) { - tbm.removeAll(); - - // define groups - tbm.add(new Separator("modes")); //$NON-NLS-1$ - tbm.add(new Separator("merge")); //$NON-NLS-1$ - tbm.add(new Separator("navigation")); //$NON-NLS-1$ - - CompareConfiguration cc= getCompareConfiguration(); - - if (cc.isRightEditable()) { - fCopyLeftToRightAction= - new Action() { - public void run() { - copy(true); - } - }; - Utilities.initAction(fCopyLeftToRightAction, getResourceBundle(), "action.CopyLeftToRight."); //$NON-NLS-1$ - tbm.appendToGroup("merge", fCopyLeftToRightAction); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, fCopyLeftToRightAction, "org.eclipse.compare.copyAllLeftToRight"); //$NON-NLS-1$ - } - - if (cc.isLeftEditable()) { - fCopyRightToLeftAction= - new Action() { - public void run() { - copy(false); - } - }; - Utilities.initAction(fCopyRightToLeftAction, getResourceBundle(), "action.CopyRightToLeft."); //$NON-NLS-1$ - tbm.appendToGroup("merge", fCopyRightToLeftAction); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, fCopyRightToLeftAction, "org.eclipse.compare.copyAllRightToLeft"); //$NON-NLS-1$ - } - - Action a= new ChangePropertyAction(fBundle, fCompareConfiguration, "action.EnableAncestor.", ANCESTOR_ENABLED); //$NON-NLS-1$ - a.setChecked(fAncestorEnabled); - fAncestorItem= new ActionContributionItem(a); - fAncestorItem.setVisible(false); - tbm.appendToGroup("modes", fAncestorItem); //$NON-NLS-1$ - - createToolItems(tbm); - updateToolItems(); - - tbm.update(true); - } - - return fComposite; - } - - /* package */ boolean internalSetFocus() { - return false; - } - - /* package */ int getCenterWidth() { - return 3; - } - - /* package */ boolean getAncestorEnabled() { - return fAncestorEnabled; - } - - /* package */ Control createCenter(Composite parent) { - Sash sash= new Sash(parent, SWT.VERTICAL); - new Resizer(sash, HORIZONTAL); - return sash; - } - - /* package */ Control getCenter() { - return fCenter; - } - - /* - * @see Viewer.getControl() - */ - public Control getControl() { - return fComposite; - } - - /** - * Called on the viewer disposal. - * Unregisters from the compare configuration. - * Clients may extend if they have to do additional cleanup. - */ - protected void handleDispose(DisposeEvent event) { - - if (fKeyBindingService != null) { - if (fCopyLeftToRightAction != null) - fKeyBindingService.unregisterAction(fCopyLeftToRightAction); - if (fCopyRightToLeftAction != null) - fKeyBindingService.unregisterAction(fCopyRightToLeftAction); - fKeyBindingService= null; - } - - Object input= getInput(); - if (input instanceof ICompareInput) - ((ICompareInput)input).removeCompareInputChangeListener(fCompareInputChangeListener); - - if (fCompareConfiguration != null && fPropertyChangeListener != null) { - fCompareConfiguration.removePropertyChangeListener(fPropertyChangeListener); - fPropertyChangeListener= null; - } - - fAncestorLabel= null; - fLeftLabel= null; - fDirectionLabel= null; - fRightLabel= null; - fCenter= null; - - if (fRightArrow != null) { - fRightArrow.dispose(); - fRightArrow= null; - } - if (fLeftArrow != null) { - fLeftArrow.dispose(); - fLeftArrow= null; - } - if (fBothArrow != null) { - fBothArrow.dispose(); - fBothArrow= null; - } - - super.handleDispose(event); - } - - /** - * Updates the enabled state of the toolbar items. - * <p> - * This method is called whenever the state of the items needs updating. - * <p> - * Subclasses may extend this method, although this is generally not required. - */ - protected void updateToolItems() { - - IMergeViewerContentProvider content= getMergeContentProvider(); - - Object input= getInput(); - - if (fCopyLeftToRightAction != null) { - boolean enable= content.isRightEditable(input); -// if (enable && input instanceof ICompareInput) { -// ITypedElement e= ((ICompareInput) input).getLeft(); -// if (e == null) -// enable= false; -// } - fCopyLeftToRightAction.setEnabled(enable); - } - - if (fCopyRightToLeftAction != null) { - boolean enable= content.isLeftEditable(input); -// if (enable && input instanceof ICompareInput) { -// ITypedElement e= ((ICompareInput) input).getRight(); -// if (e == null) -// enable= false; -// } - fCopyRightToLeftAction.setEnabled(enable); - } - } - - /** - * Updates the headers of the three areas - * by querying the content provider for a name and image for - * the three sides of the input object. - * <p> - * This method is called whenever the header must be updated. - * <p> - * Subclasses may extend this method, although this is generally not required. - */ - protected void updateHeader() { - - IMergeViewerContentProvider content= getMergeContentProvider(); - Object input= getInput(); - - if (fAncestorLabel != null) { - fAncestorLabel.setImage(content.getAncestorImage(input)); - fAncestorLabel.setText(content.getAncestorLabel(input)); - } - if (fLeftLabel != null) { - fLeftLabel.setImage(content.getLeftImage(input)); - fLeftLabel.setText(content.getLeftLabel(input)); - } - if (fRightLabel != null) { - fRightLabel.setImage(content.getRightImage(input)); - fRightLabel.setText(content.getRightLabel(input)); - } - } - -// private Image loadImage(String name) { -// ImageDescriptor id= ImageDescriptor.createFromFile(ContentMergeViewer.class, name); -// if (id != null) -// return id.createImage(); -// return null; -// } - - /** - * Calculates the height of the header. - */ - /* package */ int getHeaderHeight() { - int headerHeight= fLeftLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y; - headerHeight= Math.max(headerHeight, fDirectionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y); - return headerHeight; - } - - //---- merge direction - - /** - * Returns true if both sides are editable. - */ - /* package */ boolean canToggleMergeDirection() { - IMergeViewerContentProvider content= getMergeContentProvider(); - Object input= getInput(); - return content.isLeftEditable(input) && content.isRightEditable(input); - } - - //---- dirty state & saving state - - /* (non Javadoc) - * see IPropertyChangeNotifier.addPropertyChangeListener - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - if (fListenerList == null) - fListenerList= new ListenerList(); - fListenerList.add(listener); - } - - /* (non Javadoc) - * see IPropertyChangeNotifier.removePropertyChangeListener - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - if (fListenerList != null) { - fListenerList.remove(listener); - if (fListenerList.isEmpty()) - fListenerList= null; - } - } - - /* package */ void fireDirtyState(boolean state) { - Utilities.firePropertyChange(fListenerList, this, CompareEditorInput.DIRTY_STATE, null, new Boolean(state)); - } - - /** - * Sets the dirty state of the left side of this viewer. - * If the new value differs from the old - * all registered listener are notified with - * a <code>PropertyChangeEvent</code> with the - * property name <code>CompareEditorInput.DIRTY_STATE</code>. - * - * @param dirty the state of the left side dirty flag - */ - protected void setLeftDirty(boolean dirty) { - if (fLeftSaveAction.isEnabled() != dirty) { - fLeftSaveAction.setEnabled(dirty); - fireDirtyState(dirty); - } - } - - /** - * Sets the dirty state of the right side of this viewer. - * If the new value differs from the old - * all registered listener are notified with - * a <code>PropertyChangeEvent</code> with the - * property name <code>CompareEditorInput.DIRTY_STATE</code>. - * - * @param dirty the state of the right side dirty flag - */ - protected void setRightDirty(boolean dirty) { - if (fRightSaveAction.isEnabled() != dirty) { - fRightSaveAction.setEnabled(dirty); - fireDirtyState(dirty); - } - } - - /** - * Save the viewers's content. - * Note: this method is for internal use only. Clients should not call this method. - * @since 2.0 - */ - public void save(IProgressMonitor pm) throws CoreException { - saveContent(getInput()); - } - - /** - * Save modified content back to input elements via the content provider. - */ - /* package */ void saveContent(Object oldInput) { - - // write back modified contents - IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider(); - - boolean leftEmpty= content.getLeftContent(oldInput) == null; - boolean rightEmpty= content.getRightContent(oldInput) == null; - - if (fCompareConfiguration.isLeftEditable() && fLeftSaveAction.isEnabled()) { - byte[] bytes= getContents(true); - if (leftEmpty && bytes != null && bytes.length == 0) - bytes= null; - setLeftDirty(false); - content.saveLeftContent(oldInput, bytes); - } - - if (fCompareConfiguration.isRightEditable() && fRightSaveAction.isEnabled()) { - byte[] bytes= getContents(false); - if (rightEmpty && bytes != null && bytes.length == 0) - bytes= null; - setRightDirty(false); - content.saveRightContent(oldInput, bytes); - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java deleted file mode 100644 index 45d4482ef..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.swt.widgets.Shell; -import org.eclipse.core.runtime.IProgressMonitor; -import java.lang.reflect.InvocationTargetException; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.operation.ModalContext; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; - - -class DelayedProgressMonitor implements IProgressMonitor { - - ProgressMonitorDialog fProgressDialog; - IProgressMonitor fRealProgressMonitor; - String fTaskName; - String fSubTaskName; - int fTotalWork; - int fWorked; - boolean fCancelable; - Shell fShell; - int fTime; - - - DelayedProgressMonitor(Shell shell) { - fShell= shell; - } - - /* - * @see IProgressMonitor#beginTask(String, int) - */ - public void beginTask(String name, int totalWork) { - fTaskName= name; - fTotalWork= totalWork; - fTime= 0; - } - - /* - * @see IProgressMonitor#done() - */ - public void done() { - if (fRealProgressMonitor != null) - fRealProgressMonitor.done(); - } - - /* - * @see IProgressMonitor#internalWorked(double) - */ - public void internalWorked(double work) { - if (fRealProgressMonitor != null) { - fRealProgressMonitor.internalWorked(work); - } - } - - private void checkTimeout() { - if (fRealProgressMonitor == null) { - - //if (fTime++ < 100) - // return; - - fProgressDialog= new ProgressMonitorDialog(fShell); - fProgressDialog.setCancelable(true); - fProgressDialog.open(); - fRealProgressMonitor= fProgressDialog.getProgressMonitor(); - fRealProgressMonitor.beginTask(fTaskName, fTotalWork); - if (fSubTaskName != null) - fRealProgressMonitor.subTask(fSubTaskName); - fRealProgressMonitor.worked(fWorked); - } - } - - /* - * @see IProgressMonitor#isCanceled() - */ - public boolean isCanceled() { - checkTimeout(); - if (fRealProgressMonitor != null) - return fRealProgressMonitor.isCanceled(); - return false; - } - - /* - * @see IProgressMonitor#setCanceled(boolean) - */ - public void setCanceled(boolean value) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.setCanceled(value); - else - fCancelable= value; - } - - /* - * @see IProgressMonitor#setTaskName(String) - */ - public void setTaskName(String name) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.setTaskName(name); - else - fTaskName= name; - } - - /* - * @see IProgressMonitor#subTask(String) - */ - public void subTask(String name) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.subTask(name); - else - fSubTaskName= name; - } - - /* - * @see IProgressMonitor#worked(int) - */ - public void worked(int work) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.internalWorked(work); - else { - fWorked+= work; - checkTimeout(); - } - } - - public static void run(Shell shell, boolean fork, boolean cancelable, IRunnableWithProgress runnable) - throws InvocationTargetException, InterruptedException { - - DelayedProgressMonitor pm= new DelayedProgressMonitor(shell); - pm.checkTimeout(); - try { - ModalContext.run(runnable, fork, pm, shell.getDisplay()); - } finally { - if (pm.fProgressDialog != null) - pm.fProgressDialog.close(); - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java deleted file mode 100644 index 851749d79..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.IDocument; - - -/** - * Defines a subrange in a document. - * <p> - * It is used by text viewers that can work on a subrange of a document. For example, - * a text viewer for Java compilation units might use this to restrict the view - * to a single method. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * - * @see TextMergeViewer - * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode - */ -public interface IDocumentRange { - - /** - * The position category typically used for an <code>IDocumentRange</code> position - * (value <code>"DocumentRangeCategory"</code>). - * @since 2.0 - */ - public static final String RANGE_CATEGORY= "DocumentRangeCategory"; //$NON-NLS-1$ - - /** - * Returns the underlying document. - * - * @return the underlying document - */ - IDocument getDocument(); - - /** - * Returns a position that specifies a subrange in the underlying document, - * or <code>null</code> if this document range spans the whole underlying document. - * - * @return a position that specifies a subrange in the underlying document, or <code>null</code> - */ - Position getRange(); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java deleted file mode 100644 index d4a206666..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.jface.viewers.IContentProvider; - - -/** - * A content provider that mediates between a <code>ContentMergeViewer</code>'s model - * and the viewer itself. - * <p> - * Clients may implement this interface. - * </p> - * - * @see ContentMergeViewer - */ -public interface IMergeViewerContentProvider extends IContentProvider { - - //---- ancestor side - - /** - * Returns the label for the ancestor side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the label for the ancestor side of a <code>ContentMergeViewer</code> - */ - String getAncestorLabel(Object input); - - /** - * Returns an optional image for the ancestor side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the image for the ancestor side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Image getAncestorImage(Object input); - - /** - * Returns the contents for the ancestor side of a <code>ContentMergeViewer</code>. - * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the content for the ancestor side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Object getAncestorContent(Object input); - - /** - * Returns whether the ancestor side of the given input element should be shown. - * - * @return <code>true</code> if the ancestor side of the given input element should be shown - */ - boolean showAncestor(Object input); - - //---- left side - - /** - * Returns the label for the left side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the label for the left side of a <code>ContentMergeViewer</code> - */ - String getLeftLabel(Object input); - - /** - * Returns an optional image for the left side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the image for the left side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Image getLeftImage(Object input); - - /** - * Returns the contents for the left side of a <code>ContentMergeViewer</code>. - * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the content for the left side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Object getLeftContent(Object input); - - /** - * Returns whether the left side is editable. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return <code>true</code> if the left side of a <code>ContentMergeViewer</code> is editable - */ - boolean isLeftEditable(Object input); - - /** - * Saves new contents for the left side of the <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @param bytes the new contents to save for the left side - */ - void saveLeftContent(Object input, byte[] bytes); - - //---- right side - - /** - * Returns the label for the right side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the label for the right side of a <code>ContentMergeViewer</code> - */ - String getRightLabel(Object input); - - /** - * Returns an optional image for the right side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the image for the right side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Image getRightImage(Object input); - - /** - * Returns the contents for the right side of a <code>ContentMergeViewer</code>. - * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the content for the right side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Object getRightContent(Object input); - - /** - * Returns whether the right side is editable. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return <code>true</code> if the right side of a <code>ContentMergeViewer</code> is editable - */ - boolean isRightEditable(Object input); - - /** - * Saves new contents for the right side of the <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @param bytes the new contents to save for the right side - */ - void saveRightContent(Object input, byte[] bytes); -} - - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java deleted file mode 100644 index 27354bf82..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.compare.rangedifferencer.IRangeComparator; - - -/** - * For performing a so-called "token compare" on a line of text. - * This interface extends the <code>IRangeComparator</code> interface - * so that it can be used by the <code>TextMergeViewer</code>. - * <p> - * <code>TextMergeViewer</code> activates the token compare when navigating into - * a range of differing lines. At first the lines are selected as a block. - * When navigating into this block the token compare shows for every line - * the differing token by selecting them. - * <p> - * <code>TextMergeViewer</code>'s default token comparator works on characters separated - * by whitespace. If a different strategy is needed (for example, to use Java tokens in - * a Java-aware merge viewer), clients may create their own token - * comparators by implementing this interface (and overriding the - * <code>TextMergeViewer.createTokenComparator</code> factory method). - * </p> - * - * @see TextMergeViewer - */ -public interface ITokenComparator extends IRangeComparator { - - /** - * Returns the start character position of the token with the given index. - * If the index is out of range (but not negative) the character position - * behind the last character (the length of the input string) is returned. - * - * @param index index of the token for which to return the start position - * @return the start position of the token with the given index - * @throws java.lang.IndexOutOfBoundsException if index is negative - */ - int getTokenStart(int index); - - /** - * Returns the character length of the token with the given index. - * If the index is out of range (but not negative) the value 0 is returned. - * - * @param index index of the token for which to return the start position - * @return the character length of the token with the given index - * @throws java.lang.IndexOutOfBoundsException if index is negative - */ - int getTokenLength(int index); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java deleted file mode 100644 index fea9dc5b1..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java +++ /dev/null @@ -1,4143 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * channingwalton@mac.com - curved line code - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import java.util.List; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Map; -import java.util.HashMap; -import java.util.ResourceBundle; -import java.io.UnsupportedEncodingException; -import java.text.MessageFormat; - -import java.lang.reflect.InvocationTargetException; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Cursor; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.custom.*; - -import org.eclipse.jface.action.*; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.*; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; - -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IKeyBindingService; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPartSite; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.compare.internal.MergeSourceViewer; -import org.eclipse.compare.internal.BufferedCanvas; -import org.eclipse.compare.internal.Utilities; -import org.eclipse.compare.internal.TokenComparator; -import org.eclipse.compare.internal.DocLineComparator; -import org.eclipse.compare.internal.ComparePreferencePage; -import org.eclipse.compare.internal.INavigatable; -import org.eclipse.compare.internal.CompareNavigator; -import org.eclipse.compare.internal.TimeoutContext; -import org.eclipse.compare.internal.DocumentManager; -import org.eclipse.compare.internal.CompareMessages; -import org.eclipse.compare.rangedifferencer.*; -import org.eclipse.compare.structuremergeviewer.*; - -/** - * A text merge viewer uses the <code>RangeDifferencer</code> to perform a - * textual, line-by-line comparison of two (or three) input documents. - * It is based on the <code>ContentMergeViewer</code> and uses <code>TextViewer</code>s - * to implement the ancestor, left, and right content areas. - * <p> - * In the three-way compare case ranges of differing lines are highlighted and framed - * with different colors to show whether the difference is an incoming, outgoing, or conflicting change. - * The <code>TextMergeViewer</code> supports the notion of a current "differing range" - * and provides toolbar buttons to navigate from one range to the next (or previous). - * <p> - * If there is a current "differing range" and the underlying document is editable - * the <code>TextMergeViewer</code> enables actions in context menu and toolbar to - * copy a range from one side to the other side, thereby performing a merge operation. - * <p> - * In addition to a line-by-line comparison the <code>TextMergeViewer</code> - * uses a token based compare on differing lines. - * The token compare is activated when navigating into - * a range of differing lines. At first the lines are selected as a block. - * When navigating into this block the token compare shows for every line - * the differing token by selecting them. - * <p> - * The <code>TextMergeViewer</code>'s default token compare works on characters separated - * by whitespace. If a different strategy is needed (for example, Java tokens in - * a Java-aware merge viewer), clients can create their own token - * comparators by implementing the <code>ITokenComparator</code> interface and overriding the - * <code>TextMergeViewer.createTokenComparator</code> factory method). - * <p> - * Access to the <code>TextMergeViewer</code>'s model is by means of an - * <code>IMergeViewerContentProvider</code>. Its <code>get<it>X</it></code>Content</code> methods must return - * either an <code>IDocument</code>, an <code>IDocumentRange</code>, or an <code>IStreamContentAccessor</code>. - * In the <code>IDocumentRange</code> case the <code>TextMergeViewer</code> - * works on a subrange of a document. In the <code>IStreamContentAccessor</code> case - * a document is created internally and initialized from the stream. - * <p> - * A <code>TextMergeViewer</code> can be used as is. However clients may subclass - * to customize the behavior. For example a <code>MergeTextViewer</code> for Java would override - * the <code>configureTextViewer</code> method to configure the <code>TextViewer</code> for Java source code, - * the <code>createTokenComparator</code> method to create a Java specific tokenizer. - * - * @see org.eclipse.compare.rangedifferencer.RangeDifferencer - * @see org.eclipse.jface.text.TextViewer - * @see ITokenComparator - * @see IDocumentRange - * @see org.eclipse.compare.IStreamContentAccessor - */ -public class TextMergeViewer extends ContentMergeViewer { - - private static final boolean DEBUG= false; - - private static final String[] GLOBAL_ACTIONS= { - IWorkbenchActionConstants.UNDO, - IWorkbenchActionConstants.REDO, - IWorkbenchActionConstants.CUT, - IWorkbenchActionConstants.COPY, - IWorkbenchActionConstants.PASTE, - IWorkbenchActionConstants.DELETE, - IWorkbenchActionConstants.SELECT_ALL, - IWorkbenchActionConstants.SAVE - }; - private static final String[] TEXT_ACTIONS= { - MergeSourceViewer.UNDO_ID, - MergeSourceViewer.REDO_ID, - MergeSourceViewer.CUT_ID, - MergeSourceViewer.COPY_ID, - MergeSourceViewer.PASTE_ID, - MergeSourceViewer.DELETE_ID, - MergeSourceViewer.SELECT_ALL_ID, - MergeSourceViewer.SAVE_ID - }; - - private static final String BUNDLE_NAME= "org.eclipse.compare.contentmergeviewer.TextMergeViewerResources"; //$NON-NLS-1$ - - // constants - /** Width of left and right vertical bar */ - private static final int MARGIN_WIDTH= 6; - /** Width of center bar */ - private static final int CENTER_WIDTH= 34; - /** Width of birds eye view */ - private static final int BIRDS_EYE_VIEW_WIDTH= 12; - /** Width of birds eye view */ - private static final int BIRDS_EYE_VIEW_INSET= 2; - /** */ - private static final int RESOLVE_SIZE= 5; - /** if true copying conflicts from one side to other concatenates both sides */ - private static final boolean APPEND_CONFLICT= true; - - /** line width of change borders */ - private static final int LW= 1; - /** Selects between smartTokenDiff and mergingTokenDiff */ - private static final boolean USE_MERGING_TOKEN_DIFF= false; - /** When calculating differences show Progress after this timeout (in milliseconds) */ - private static final int TIMEOUT= 2000; - - // determines whether a change between left and right is considered incoming or outgoing - private boolean fLeftIsLocal; - private boolean fShowCurrentOnly= false; - private boolean fShowCurrentOnly2= false; - private int fMarginWidth= MARGIN_WIDTH; - private int fTopInset; - - // Colors - private RGB fBackground; - private RGB fForeground; - private boolean fPollSystemForeground= true; - private boolean fPollSystemBackground= true; - - private RGB SELECTED_INCOMING; - private RGB INCOMING; - private RGB INCOMING_FILL; - - private RGB SELECTED_CONFLICT; - private RGB CONFLICT; - private RGB CONFLICT_FILL; - - private RGB SELECTED_OUTGOING; - private RGB OUTGOING; - private RGB OUTGOING_FILL; - - private RGB RESOLVED; - - private boolean fEndOfDocReached; - private IDocumentListener fDocumentListener; - - private IPreferenceStore fPreferenceStore; - private IPropertyChangeListener fPreferenceChangeListener; - - /** All diffs for calculating scrolling position (includes line ranges without changes) */ - private ArrayList fAllDiffs; - /** Subset of above: just real differences. */ - private ArrayList fChangeDiffs; - /** The current diff */ - private Diff fCurrentDiff; - - private HashMap fNewAncestorRanges= new HashMap(); - private HashMap fNewLeftRanges= new HashMap(); - private HashMap fNewRightRanges= new HashMap(); - - private 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 boolean fUseSplines= true; - private boolean fUseSingleLine= true; - private boolean fUseResolveUI= fUseSingleLine; // resolve UI only for single lines private boolean fShowSummeryIcon; - - private String fSymbolicFontName; - - private ActionContributionItem fNextItem; // goto next difference - private ActionContributionItem fPreviousItem; // goto previous difference - private ActionContributionItem fCopyDiffLeftToRightItem; - private ActionContributionItem fCopyDiffRightToLeftItem; - - private IKeyBindingService fKeyBindingService; - - private boolean fSynchronizedScrolling= true; - private boolean fShowMoreInfo= false; - - private MergeSourceViewer fFocusPart; - - private boolean fSubDoc= true; - private IPositionUpdater fPositionUpdater; - private boolean fIsMotif; - private boolean fIsCarbon; - - - // SWT widgets - private BufferedCanvas fAncestorCanvas; - private BufferedCanvas fLeftCanvas; - private BufferedCanvas fRightCanvas; - private Canvas fScrollCanvas; - private ScrollBar fVScrollBar; - private Canvas fBirdsEyeCanvas; - private Canvas fSummaryHeader; - private HeaderPainter fHeaderPainter; - - // SWT resources to be disposed - private Map fColors; - private Cursor fBirdsEyeCursor; - - // points for center curves - private double[] fBasicCenterCurve; - - private Button fCenterButton; - private Diff fButtonDiff; - - class HeaderPainter implements PaintListener { - - private static final int INSET= BIRDS_EYE_VIEW_INSET; - - private RGB fIndicatorColor; - private Color fSeparatorColor; - - public HeaderPainter() { - fSeparatorColor= getColor(fSummaryHeader.getDisplay(), ViewForm.borderInsideRGB); - } - - /** - * Returns true on color change - */ - public boolean setColor(RGB color) { - RGB oldColor= fIndicatorColor; - fIndicatorColor= color; - if (color == null) - return oldColor != null; - if (oldColor != null) - return !color.equals(oldColor); - return true; - } - - private void drawBevelRect(GC gc, int x, int y, int w, int h, Color topLeft, Color bottomRight) { - gc.setForeground(topLeft); - gc.drawLine(x, y, x + w -1, y); - gc.drawLine(x, y, x, y + h -1); - - gc.setForeground(bottomRight); - gc.drawLine(x + w, y, x + w, y + h); - gc.drawLine(x, y + h, x + w, y + h); - } - - public void paintControl(PaintEvent e) { - - Point s= fSummaryHeader.getSize(); - - if (fIndicatorColor != null) { - Display d= fSummaryHeader.getDisplay(); - e.gc.setBackground(getColor(d, fIndicatorColor)); - int min= Math.min(s.x, s.y)-2*INSET; - Rectangle r= new Rectangle((s.x-min)/2, (s.y-min)/2, min, min); - e.gc.fillRectangle(r); - if (d != null) - drawBevelRect(e.gc, r.x, r.y, r.width -1, r.height -1, d.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW), d.getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW)); - - e.gc.setForeground(fSeparatorColor); - e.gc.setLineWidth(1); - e.gc.drawLine(0+1, s.y-1, s.x-1-1, s.y-1); - } - } - }; - - /** - * The position updater used to adapt the positions representing - * the child document ranges to changes of the parent document. - */ - class ChildPositionUpdater extends DefaultPositionUpdater { - - /** - * Creates the position updated. - */ - protected ChildPositionUpdater(String category) { - super(category); - } - - /** - * Child document ranges cannot be deleted other then by calling - * freeChildDocument. - */ - protected boolean notDeleted() { - return true; - } - - /** - * If an insertion happens at a child document's start offset, the - * position is extended rather than shifted. Also, if something is added - * right behind the end of the position, the position is extended rather - * than kept stable. - */ - protected void adaptToInsert() { - - if (fPosition == fLeft.getRegion() || fPosition == fRight.getRegion()) { - int myStart= fPosition.offset; - int myEnd= fPosition.offset + fPosition.length; - myEnd= Math.max(myStart, myEnd); - - int yoursStart= fOffset; - int yoursEnd= fOffset + fReplaceLength -1; - yoursEnd= Math.max(yoursStart, yoursEnd); - - if (myEnd < yoursStart) - return; - - if (myStart <= yoursStart) - fPosition.length += fReplaceLength; - else - fPosition.offset += fReplaceLength; - } else { - super.adaptToInsert(); - } - } - } - - /** - * A Diff represents synchronized character ranges in two or three Documents. - * The MergeTextViewer uses Diffs to find differences in line and token ranges. - */ - /* package */ class Diff { - /** character range in ancestor document */ - Position fAncestorPos; - /** character range in left document */ - Position fLeftPos; - /** character range in right document */ - Position fRightPos; - /** if this is a TokenDiff fParent points to the enclosing LineDiff */ - Diff fParent; - /** if Diff has been resolved */ - boolean fResolved; - int fDirection; - boolean fIsToken= false; - /** child token diffs */ - ArrayList fDiffs; - boolean fIsWhitespace= false; - - /** - * Create Diff from two ranges and an optional parent diff. - */ - Diff(Diff parent, int dir, IDocument ancestorDoc, Position aRange, int ancestorStart, int ancestorEnd, - IDocument leftDoc, Position lRange, int leftStart, int leftEnd, - IDocument rightDoc, Position rRange, int rightStart, int rightEnd) { - fParent= parent != null ? parent : this; - fDirection= dir; - - fLeftPos= createPosition(leftDoc, lRange, leftStart, leftEnd); - fRightPos= createPosition(rightDoc, rRange, rightStart, rightEnd); - if (ancestorDoc != null) - fAncestorPos= createPosition(ancestorDoc, aRange, ancestorStart, ancestorEnd); - } - - Position getPosition(char type) { - switch (type) { - case 'A': - return fAncestorPos; - case 'L': - return fLeftPos; - case 'R': - return fRightPos; - } - return null; - } - - boolean isInRange(char type, int pos) { - Position p= getPosition(type); - return (pos >= p.offset) && (pos < (p.offset+p.length)); - } - - String changeType() { - boolean leftEmpty= fLeftPos.length == 0; - boolean rightEmpty= fRightPos.length == 0; - - if (fDirection == RangeDifference.LEFT) { - if (!leftEmpty && rightEmpty) - return CompareMessages.getString("TextMergeViewer.changeType.addition"); //$NON-NLS-1$ - if (leftEmpty && !rightEmpty) - return CompareMessages.getString("TextMergeViewer.changeType.deletion"); //$NON-NLS-1$ - } else { - if (leftEmpty && !rightEmpty) - return CompareMessages.getString("TextMergeViewer.changeType.addition"); //$NON-NLS-1$ - if (!leftEmpty && rightEmpty) - return CompareMessages.getString("TextMergeViewer.changeType.deletion"); //$NON-NLS-1$ - } - return CompareMessages.getString("TextMergeViewer.changeType.change"); //$NON-NLS-1$ - } - - Image getImage() { - int code= Differencer.CHANGE; - switch (fDirection) { - case RangeDifference.RIGHT: - code+= Differencer.LEFT; - break; - case RangeDifference.LEFT: - code+= Differencer.RIGHT; - break; - case RangeDifference.ANCESTOR: - case RangeDifference.CONFLICT: - code+= Differencer.CONFLICTING; - break; - } - if (code != 0) - return getCompareConfiguration().getImage(code); - return null; - } - - Position createPosition(IDocument doc, Position range, int start, int end) { - try { - int l= end-start; - if (range != null) { - int dl= range.length; - if (l > dl) - l= dl; - } else { - int dl= doc.getLength(); - if (start+l > dl) - l= dl-start; - } - - Position p= null; - try { - p= new Position(start, l); - } catch (RuntimeException ex) { - //System.out.println("Diff.createPosition: " + start + " " + l); - } - - try { - doc.addPosition(IDocumentRange.RANGE_CATEGORY, p); - } catch (BadPositionCategoryException ex) { - } - return p; - } catch (BadLocationException ee) { - //System.out.println("Diff.createPosition: " + start + " " + end); - } - return null; - } - - void add(Diff d) { - if (fDiffs == null) - fDiffs= new ArrayList(); - fDiffs.add(d); - } - - boolean isDeleted() { - if (fAncestorPos != null && fAncestorPos.isDeleted()) - return true; - return fLeftPos.isDeleted() || fRightPos.isDeleted(); - } - - void setResolved(boolean r) { - fResolved= r; - if (r) - fDiffs= null; - } - - boolean isResolved() { - if (!fResolved && fDiffs != null) { - Iterator e= fDiffs.iterator(); - while (e.hasNext()) { - Diff d= (Diff) e.next(); - if (!d.isResolved()) - return false; - } - return true; - } - return fResolved; - } - -// private boolean isIncoming() { -// switch (fDirection) { -// case RangeDifference.RIGHT: -// if (fLeftIsLocal) -// return true; -// break; -// case RangeDifference.LEFT: -// if (!fLeftIsLocal) -// return true; -// break; -// } -// return false; -// } - - private boolean isIncomingOrConflicting() { - switch (fDirection) { - case RangeDifference.RIGHT: - if (fLeftIsLocal) - return true; - break; - case RangeDifference.LEFT: - if (!fLeftIsLocal) - return true; - break; - case RangeDifference.CONFLICT: - return true; - } - return false; - } - -// private boolean isUnresolvedIncoming() { -// if (fResolved) -// return false; -// return isIncoming(); -// } - - private boolean isUnresolvedIncomingOrConflicting() { - if (fResolved) - return false; - return isIncomingOrConflicting(); - } - - Position getPosition(MergeSourceViewer w) { - if (w == fLeft) - return fLeftPos; - if (w == fRight) - return fRightPos; - if (w == fAncestor) - return fAncestorPos; - return null; - } - - /** - * Returns true if given character range overlaps with this Diff. - */ - boolean contains(MergeSourceViewer w, int start, int end) { - Position h= getPosition(w); - if (h != null) { - int offset= h.getOffset(); - if (start >= offset) { - int endPos= offset+h.getLength(); - if (end < endPos) - return true; - if (endPos == w.getDocument().getLength()) - return true; - } - } - return false; - } - - int getMaxDiffHeight(boolean withAncestor) { - Point region= new Point(0, 0); - int h= fLeft.getLineRange(fLeftPos, region).y; - if (withAncestor) - h= Math.max(h, fAncestor.getLineRange(fAncestorPos, region).y); - return Math.max(h, fRight.getLineRange(fRightPos, region).y); - } - - int getAncestorHeight() { - Point region= new Point(0, 0); - return fAncestor.getLineRange(fAncestorPos, region).y; - } - - int getLeftHeight() { - Point region= new Point(0, 0); - return fLeft.getLineRange(fLeftPos, region).y; - } - - int getRightHeight() { - Point region= new Point(0, 0); - return fRight.getLineRange(fRightPos, region).y; - } - } - - //---- MergeTextViewer - - /** - * Creates a text merge viewer under the given parent control. - * - * @param parent the parent control - * @param configuration the configuration object - */ - public TextMergeViewer(Composite parent, CompareConfiguration configuration) { - this(parent, SWT.NULL, configuration); - } - - /** - * Creates a text merge viewer under the given parent control. - * - * @param parent the parent control - * @param style SWT style bits for top level composite of this viewer - * @param configuration the configuration object - */ - public TextMergeViewer(Composite parent, int style, CompareConfiguration configuration) { - super(style, ResourceBundle.getBundle(BUNDLE_NAME), configuration); - - fSymbolicFontName= getClass().getName(); - - String platform= SWT.getPlatform(); - fIsMotif= "motif".equals(platform); //$NON-NLS-1$ - fIsCarbon= "carbon".equals(platform); //$NON-NLS-1$ - - if (fIsMotif) - fMarginWidth= 0; - - Display display= parent.getDisplay(); - - fPreferenceChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - TextMergeViewer.this.propertyChange(event); - } - }; - - fPreferenceStore= configuration.getPreferenceStore(); - if (fPreferenceStore != null) { - fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener); - - checkForColorUpdate(display); - - fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false); //$NON-NLS-1$ - fSynchronizedScrolling= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING); - fShowMoreInfo= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_MORE_INFO); - fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS); - //fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES); - fUseSingleLine= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SINGLE_LINE); - fUseResolveUI= fUseSingleLine; - //fUseResolveUI= fPreferenceStore.getBoolean(ComparePreferencePage.USE_RESOLVE_UI); - } - - fDocumentListener= new IDocumentListener() { - - public void documentAboutToBeChanged(DocumentEvent e) { - } - - public void documentChanged(DocumentEvent e) { - TextMergeViewer.this.documentChanged(e); - } - }; - - buildControl(parent); - - INavigatable nav= new INavigatable() { - public boolean gotoDifference(boolean next) { - return navigate(next, false, false); - } - }; - fComposite.setData(INavigatable.NAVIGATOR_PROPERTY, nav); - - fBirdsEyeCursor= new Cursor(parent.getDisplay(), SWT.CURSOR_HAND); - - JFaceResources.getFontRegistry().addListener(fPreferenceChangeListener); - updateFont(); - } - - private void updateFont() { - Font f= JFaceResources.getFont(fSymbolicFontName); - if (f != null) { - if (fAncestor != null) - fAncestor.setFont(f); - if (fLeft != null) - fLeft.setFont(f); - if (fRight != null) - fRight.setFont(f); - } - } - - private void checkForColorUpdate(Display display) { - if (fPollSystemForeground) { - RGB fg= display.getSystemColor(SWT.COLOR_LIST_FOREGROUND).getRGB(); - if (fForeground == null || !fg.equals(fForeground)) { - fForeground= fg; - updateColors(display); - } - } - if (fPollSystemBackground) { - RGB bg= display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB(); - if (fBackground == null || !bg.equals(fBackground)) { - fBackground= bg; - updateColors(display); - } - } - } - - /** - * Sets the viewer's background color to the given RGB value. - * If the value is <code>null</code> the system's default background color is used. - * @param background the background color or <code>null</code> to use the system's default background color - * @since 2.0 - */ - public void setBackgroundColor(RGB background) { - fPollSystemBackground= (background == null); - fBackground= background; - updateColors(null); - } - - private RGB getBackground(Display display) { - if (fBackground != null) - return fBackground; - if (display == null) - display= fComposite.getDisplay(); - return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB(); - } - - /** - * Sets the viewer's foreground color to the given RGB value. - * If the value is <code>null</code> the system's default foreground color is used. - * @param foreground the foreground color or <code>null</code> to use the system's default foreground color - * @since 2.0 - */ - public void setForegroundColor(RGB foreground) { - fPollSystemForeground= (foreground == null); - fForeground= foreground; - updateColors(null); - } - - private RGB getForeground(Display display) { - if (fForeground != null) - return fForeground; - if (display == null) - display= fComposite.getDisplay(); - return display.getSystemColor(SWT.COLOR_LIST_FOREGROUND).getRGB(); - } - - private void updateColors(Display display) { - - if (display == null) - display= fComposite.getDisplay(); - - Color color= null; - if (fBackground != null) - color= getColor(display, fBackground); - - if (fAncestor != null) - fAncestor.setBackgroundColor(color); - if (fLeft != null) - fLeft.setBackgroundColor(color); - if (fRight != null) - fRight.setBackgroundColor(color); - - RGB bg= getBackground(display); - SELECTED_INCOMING= new RGB(0, 0, 255); - INCOMING= interpolate(SELECTED_INCOMING, bg, 0.6); - INCOMING_FILL= interpolate(SELECTED_INCOMING, bg, 0.97); - - SELECTED_CONFLICT= new RGB(255, 0, 0); - CONFLICT= interpolate(SELECTED_CONFLICT, bg, 0.6); - CONFLICT_FILL= interpolate(SELECTED_CONFLICT, bg, 0.97); - - SELECTED_OUTGOING= getForeground(display); - OUTGOING= interpolate(SELECTED_OUTGOING, bg, 0.6); - OUTGOING_FILL= interpolate(SELECTED_OUTGOING, bg, 0.97); - - RESOLVED= new RGB(0, 255, 0); - - refreshBirdsEyeView(); - invalidateLines(); - - updateAllDiffBackgrounds(display); - } - - /** - * Invalidates the current presentation by invalidating the three text viewers. - * @since 2.0 - */ - public void invalidateTextPresentation() { - if (fAncestor != null) - fAncestor.invalidateTextPresentation(); - if (fLeft != null) - fLeft.invalidateTextPresentation(); - if (fRight != null) - fRight.invalidateTextPresentation(); - } - - /** - * Configures the passed text viewer. - * This method is called after the three text viewers have been created for the - * content areas. - * The <code>TextMergeViewer</code> implementation of this method does nothing. - * Subclasses may reimplement to provide a specific configuration for the text viewer. - * - * @param textViewer the text viewer to configure - */ - protected void configureTextViewer(TextViewer textViewer) { - } - - /** - * Creates an <code>ITokenComparator</code> which is used to show the - * intra line differences. - * The <code>TextMergeViewer</code> implementation of this method returns a - * tokenizer that breaks a line into words separated by whitespace. - * Subclasses may reimplement to provide a specific tokenizer. - * - * @return a ITokenComparator which is used for a second level token compare. - */ - protected ITokenComparator createTokenComparator(String s) { - return new TokenComparator(s); - } - - /** - * Returns a document partitioner which is suitable for the underlying content type. - * This method is only called if the input provided by the content provider is a - * <code>IStreamContentAccessor</code> and an internal document must be created. This - * document is initialized with the partitioner returned from this method. - * <p> - * The <code>TextMergeViewer</code> implementation of this method returns - * <code>null</code>. Subclasses may reimplement to create a partitioner for a - * specific content type. - * - * @return a document partitioner, or <code>null</code> - */ - protected IDocumentPartitioner getDocumentPartitioner() { - return null; - } - - /** - * Called on the viewer disposal. - * Unregisters from the compare configuration. - * Clients may extend if they have to do additional cleanup. - */ - protected void handleDispose(DisposeEvent event) { - - if (fKeyBindingService != null) { - IAction a; - if (fNextItem != null) { - a= fNextItem.getAction(); - if (a != null) - fKeyBindingService.unregisterAction(a); - } - if (fPreviousItem != null) { - a= fPreviousItem.getAction(); - if (a != null) - fKeyBindingService.unregisterAction(a); - } - if (fCopyDiffLeftToRightItem != null) { - a= fCopyDiffLeftToRightItem.getAction(); - if (a != null) - fKeyBindingService.unregisterAction(a); - } - if (fCopyDiffRightToLeftItem != null) { - a= fCopyDiffRightToLeftItem.getAction(); - if (a != null) - fKeyBindingService.unregisterAction(a); - } - fKeyBindingService= null; - } - - Object input= getInput(); - DocumentManager.remove(getDocument2('A', input)); - DocumentManager.remove(getDocument2('L', input)); - DocumentManager.remove(getDocument2('R', input)); - - if (DEBUG) - DocumentManager.dump(); - - if (fPreferenceChangeListener != null) { - JFaceResources.getFontRegistry().removeListener(fPreferenceChangeListener); - if (fPreferenceStore != null) - fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener); - fPreferenceChangeListener= null; - } - - fLeftCanvas= null; - fRightCanvas= null; - fVScrollBar= null; - fBirdsEyeCanvas= null; - fSummaryHeader= null; - - unsetDocument(fAncestor); - unsetDocument(fLeft); - unsetDocument(fRight); - - if (fColors != null) { - Iterator i= fColors.values().iterator(); - while (i.hasNext()) { - Color color= (Color) i.next(); - if (!color.isDisposed()) - color.dispose(); - } - fColors= null; - } - - if (fBirdsEyeCursor != null) { - fBirdsEyeCursor.dispose(); - fBirdsEyeCursor= null; - } - - super.handleDispose(event); - } - - //------------------------------------------------------------------------------------------------------------- - //--- internal ------------------------------------------------------------------------------------------------ - //------------------------------------------------------------------------------------------------------------- - - /** - * Creates the specific SWT controls for the content areas. - * Clients must not call or override this method. - */ - protected void createControls(Composite composite) { - - WorkbenchHelp.setHelp(composite, ICompareContextIds.TEXT_MERGE_VIEW); - - // 1st row - if (fMarginWidth > 0) { - fAncestorCanvas= new BufferedCanvas(composite, SWT.NONE) { - public void doPaint(GC gc) { - paintSides(gc, fAncestor, fAncestorCanvas, false); - } - }; - fAncestorCanvas.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - setCurrentDiff2(handleMouseInSides(fAncestorCanvas, fAncestor, e.y), false); - } - } - ); - } - - fAncestor= createPart(composite); - fAncestor.setEditable(false); - - fSummaryHeader= new Canvas(composite, SWT.NONE); - fHeaderPainter= new HeaderPainter(); - fSummaryHeader.addPaintListener(fHeaderPainter); - updateResolveStatus(); - - // 2nd row - if (fMarginWidth > 0) { - fLeftCanvas= new BufferedCanvas(composite, SWT.NONE) { - public void doPaint(GC gc) { - paintSides(gc, fLeft, fLeftCanvas, false); - } - }; - fLeftCanvas.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - setCurrentDiff2(handleMouseInSides(fLeftCanvas, fLeft, e.y), false); - } - } - ); - } - - fLeft= createPart(composite); - fLeft.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); - fLeft.addAction(MergeSourceViewer.SAVE_ID, fLeftSaveAction); - - fRight= createPart(composite); - fRight.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); - fRight.addAction(MergeSourceViewer.SAVE_ID, fRightSaveAction); - - if (fMarginWidth > 0) { - fRightCanvas= new BufferedCanvas(composite, SWT.NONE) { - public void doPaint(GC gc) { - paintSides(gc, fRight, fRightCanvas, fSynchronizedScrolling); - } - }; - fRightCanvas.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - setCurrentDiff2(handleMouseInSides(fRightCanvas, fRight, e.y), false); - } - } - ); - } - - fScrollCanvas= new Canvas(composite, SWT.V_SCROLL); - //Rectangle trim= fScrollCanvas.computeTrim(0, 0, 0, 0); - Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0); - fTopInset= trim.y; - - fVScrollBar= fScrollCanvas.getVerticalBar(); - fVScrollBar.setIncrement(1); - fVScrollBar.setVisible(true); - fVScrollBar.addListener(SWT.Selection, - new Listener() { - public void handleEvent(Event e) { - int vpos= ((ScrollBar)e.widget).getSelection(); - scrollVertical(vpos, vpos, vpos, null); - } - } - ); - - fBirdsEyeCanvas= new BufferedCanvas(composite, SWT.NONE) { - public void doPaint(GC gc) { - paintBirdsEyeView(this, gc); - } - }; - //fBirdsEyeCanvas.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_YELLOW)); - fBirdsEyeCanvas.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - setCurrentDiff2(handlemouseInBirdsEyeView(fBirdsEyeCanvas, e.y), true); - } - } - ); - fBirdsEyeCanvas.addMouseMoveListener( - new MouseMoveListener() { - - private Cursor fLastCursor; - - public void mouseMove(MouseEvent e) { - Cursor cursor= null; - Diff diff= handlemouseInBirdsEyeView(fBirdsEyeCanvas, e.y); - if (diff != null && diff.fDirection != Differencer.NO_CHANGE) - cursor= fBirdsEyeCursor; - if (fLastCursor != cursor) { - fBirdsEyeCanvas.setCursor(cursor); - fLastCursor= cursor; - } - } - } - ); - } - - private void setCurrentDiff2(Diff diff, boolean reveal) { - if (diff != null && diff.fDirection != Differencer.NO_CHANGE) { - //fCurrentDiff= null; - setCurrentDiff(diff, reveal); - } - } - - private Diff handleMouseInSides(Canvas canvas, MergeSourceViewer tp, int my) { - - int lineHeight= tp.getTextWidget().getLineHeight(); - int visibleHeight= tp.getViewportHeight(); - - if (! fHiglightRanges) - return null; - - if (fChangeDiffs != null) { - int shift= tp.getVerticalScrollOffset() + (2-LW); - - Point region= new Point(0, 0); - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly2 && !isCurrentDiff(diff)) - continue; - - tp.getLineRange(diff.getPosition(tp), region); - int y= (region.x * lineHeight) + shift; - int h= region.y * lineHeight; - - if (y+h < 0) - continue; - if (y >= visibleHeight) - break; - - if (my >= y && my < y+h) - return diff; - } - } - return null; - } - - private Diff getDiffUnderMouse(Canvas canvas, int mx, int my, Rectangle r) { - - if (! fSynchronizedScrolling) - return null; - - int lineHeight= fLeft.getTextWidget().getLineHeight(); - int visibleHeight= fRight.getViewportHeight(); - - Point size= canvas.getSize(); - int w= size.x; - - if (! fHiglightRanges) - return null; - - if (fChangeDiffs != null) { - int lshift= fLeft.getVerticalScrollOffset(); - int rshift= fRight.getVerticalScrollOffset(); - - Point region= new Point(0, 0); - - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly2 && !isCurrentDiff(diff)) - continue; - - fLeft.getLineRange(diff.fLeftPos, region); - int ly= (region.x * lineHeight) + lshift; - int lh= region.y * lineHeight; - - fRight.getLineRange(diff.fRightPos, region); - int ry= (region.x * lineHeight) + rshift; - int rh= region.y * lineHeight; - - if (Math.max(ly+lh, ry+rh) < 0) - continue; - if (Math.min(ly, ry) >= visibleHeight) - break; - - int cx= (w-RESOLVE_SIZE)/2; - int cy= ((ly+lh/2) + (ry+rh/2) - RESOLVE_SIZE)/2; - if (my >= cy && my < cy+RESOLVE_SIZE && mx >= cx && mx < cx+RESOLVE_SIZE) { - if (r != null) { - r.x= cx+RESOLVE_SIZE/2-10; - r.y= cy+RESOLVE_SIZE/2-10; - r.width= 20; - r.height= 20; - } - return diff; - } - } - } - return null; - } - - private Diff handlemouseInBirdsEyeView(Canvas canvas, int my) { - int yy, hh; - - Point size= canvas.getSize(); - - int virtualHeight= fSynchronizedScrolling ? getVirtualHeight() : getRightHeight(); - if (virtualHeight < getViewportHeight()) - return null; - - int y= 0; - if (fAllDiffs != null) { - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - int h= fSynchronizedScrolling ? diff.getMaxDiffHeight(fShowAncestor) - : diff.getRightHeight(); - if (useChange(diff.fDirection) && !diff.fIsWhitespace) { - - yy= (y*size.y)/virtualHeight; - hh= (h*size.y)/virtualHeight; - if (hh < 3) - hh= 3; - - if (my >= yy && my < yy+hh) - return diff; - } - y+= h; - } - } - return null; - } - - private void paintBirdsEyeView(Canvas canvas, GC gc) { - - Color c; - Rectangle r= new Rectangle(0, 0, 0, 0); - int yy, hh; - - Point size= canvas.getSize(); - - int virtualHeight= fSynchronizedScrolling ? getVirtualHeight() : getRightHeight(); - if (virtualHeight < getViewportHeight()) - return; - - Display display= canvas.getDisplay(); - int y= 0; - if (fAllDiffs != null) { - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - int h= fSynchronizedScrolling ? diff.getMaxDiffHeight(fShowAncestor) - : diff.getRightHeight(); - - if (useChange(diff.fDirection) && !diff.fIsWhitespace) { - - yy= (y*size.y)/virtualHeight; - hh= (h*size.y)/virtualHeight; - if (hh < 3) - hh= 3; - - c= getColor(display, getFillColor(diff)); - if (c != null) { - gc.setBackground(c); - gc.fillRectangle(BIRDS_EYE_VIEW_INSET, yy, size.x-(2*BIRDS_EYE_VIEW_INSET),hh); - } - c= getColor(display, getStrokeColor(diff)); - if (c != null) { - gc.setForeground(c); - r.x= BIRDS_EYE_VIEW_INSET; - r.y= yy; - r.width= size.x-(2*BIRDS_EYE_VIEW_INSET)-1; - r.height= hh; - if (diff == fCurrentDiff || - (fCurrentDiff != null && diff == fCurrentDiff.fParent)) { - gc.setLineWidth(2); - r.x++; - r.y++; - r.width--; - r.height--; - } else { - gc.setLineWidth(1); - } - gc.drawRectangle(r); - } - } - - y+= h; - } - } - } - - private void refreshBirdsEyeView() { - if (fBirdsEyeCanvas != null) - fBirdsEyeCanvas.redraw(); - } - - /** - * Called whenever setFocus() is called on the ContentViewer's top level SWT Composite. - * This implementation sets the focus to the first enabled text widget. - */ - /* package */ boolean internalSetFocus() { - if (fFocusPart == null) { - if (fLeft != null && fLeft.getEnabled()) { - fFocusPart= fLeft; - } else if (fRight != null && fRight.getEnabled()) { - fFocusPart= fRight; - } else if (fAncestor != null && fAncestor.getEnabled()) { - fFocusPart= fAncestor; - } - } - if (fFocusPart != null) { - StyledText st= fFocusPart.getTextWidget(); - if (st != null) - return st.setFocus(); - } - return false; // could not set focus - } - - - class HoverResizer extends Resizer { - Canvas fCanvas; - public HoverResizer(Canvas c, int dir) { - super(c, dir); - fCanvas= c; - } - public void mouseMove(MouseEvent e) { - if (!fIsDown && showResolveUI() && handleMouseMoveOverCenter(fCanvas, e.x, e.y)) - return; - super.mouseMove(e); - } - } - - /** - * Creates the central Canvas. - * Called from ContentMergeViewer. - */ - /* package */ Control createCenter(Composite parent) { - if (fSynchronizedScrolling) { - final Canvas canvas= new BufferedCanvas(parent, SWT.NONE) { - public void doPaint(GC gc) { - paintCenter(this, gc); - } - }; - if (!fUseResolveUI) { - new Resizer(canvas, HORIZONTAL); - } else { - - new HoverResizer(canvas, HORIZONTAL); - - fCenterButton= new Button(canvas, "carbon".equals(SWT.getPlatform()) ? SWT.FLAT : SWT.PUSH); //$NON-NLS-1$ - fCenterButton.setText("<"); //$NON-NLS-1$ - fCenterButton.pack(); - fCenterButton.setVisible(false); - fCenterButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - fCenterButton.setVisible(false); - if (fButtonDiff != null) { - setCurrentDiff(fButtonDiff, false); - copy(fCurrentDiff, false, fCurrentDiff.fDirection == RangeDifference.CONFLICT); - } - } - } - ); - } - - return canvas; - } - return super.createCenter(parent); - } - - private boolean handleMouseMoveOverCenter(Canvas canvas, int x, int y) { - Rectangle r= new Rectangle(0, 0, 0, 0); - Diff diff= getDiffUnderMouse(canvas, x, y, r); - if (diff != null && !diff.isUnresolvedIncomingOrConflicting()) - diff= null; - if (diff != fButtonDiff) { - if (diff != null) { - if (fLeft.isEditable()) { - fButtonDiff= diff; - fCenterButton.setText("<"); //$NON-NLS-1$ - String tt= fCopyDiffRightToLeftItem.getAction().getToolTipText(); - fCenterButton.setToolTipText(tt); - fCenterButton.setBounds(r); - fCenterButton.setVisible(true); - } else if (fRight.isEditable()) { - fButtonDiff= diff; - fCenterButton.setText(">"); //$NON-NLS-1$ - String tt= fCopyDiffLeftToRightItem.getAction().getToolTipText(); - fCenterButton.setToolTipText(tt); - fCenterButton.setBounds(r); - fCenterButton.setVisible(true); - } else - fButtonDiff= null; - } else { - fCenterButton.setVisible(false); - fButtonDiff= null; - } - } - return fButtonDiff != null; - } - - /** - * Returns width of central canvas. - * Overridden from ContentMergeViewer. - */ - /* package */ int getCenterWidth() { - if (fSynchronizedScrolling) - return CENTER_WIDTH; - return super.getCenterWidth(); - } - - /** - * Creates and initializes a text part. - */ - private MergeSourceViewer createPart(Composite parent) { - - final MergeSourceViewer part= new MergeSourceViewer(parent, getResourceBundle()); - final StyledText te= part.getTextWidget(); - - if (!fConfirmSave) - part.hideSaveAction(); - - te.addPaintListener( - new PaintListener() { - public void paintControl(PaintEvent e) { - paint(e, part); - } - } - ); - te.addKeyListener( - new KeyAdapter() { - public void keyPressed(KeyEvent e) { - handleSelectionChanged(part); - } - } - ); - te.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - //syncViewport(part); - handleSelectionChanged(part); - } - } - ); - - te.addFocusListener( - new FocusAdapter() { - public void focusGained(FocusEvent fe) { - fFocusPart= part; - connectGlobalActions(fFocusPart); - } - public void focusLost(FocusEvent fe) { - connectGlobalActions(null); - } - } - ); - - part.addViewportListener( - new IViewportListener() { - public void viewportChanged(int verticalPosition) { - syncViewport(part); - } - } - ); - - Font font= JFaceResources.getFont(fSymbolicFontName); - if (font != null) - te.setFont(font); - - if (fBackground != null) // not default - te.setBackground(getColor(parent.getDisplay(), fBackground)); - - configureTextViewer(part); - - return part; - } - - private void connectGlobalActions(MergeSourceViewer part) { - IActionBars actionBars= Utilities.findActionBars(fComposite); - if (actionBars != null) { - for (int i= 0; i < GLOBAL_ACTIONS.length; i++) { - IAction action= null; - if (part != null) { - action= part.getAction(TEXT_ACTIONS[i]); - if (action == null && TEXT_ACTIONS[i].equals(MergeSourceViewer.SAVE_ID)) { - if (part == fLeft) - action= fLeftSaveAction; - else - action= fRightSaveAction; - } - } - actionBars.setGlobalActionHandler(GLOBAL_ACTIONS[i], action); - } - actionBars.updateActionBars(); - } - } - - ITypedElement getLeg(char type, Object input) { - if (input instanceof ICompareInput) { - switch (type) { - case 'A': - return ((ICompareInput)input).getAncestor(); - case 'L': - return ((ICompareInput)input).getLeft(); - case 'R': - return ((ICompareInput)input).getRight(); - } - } - return null; - } - - IDocument getDocument(char type, Object input) { - ITypedElement te= getLeg(type, input); - if (te instanceof IDocument) - return (IDocument) te; - if (te instanceof IDocumentRange) - return ((IDocumentRange) te).getDocument(); - if (te instanceof IStreamContentAccessor) - return DocumentManager.get(te); - return null; - } - - IDocument getDocument2(char type, Object input) { - IDocument doc= getDocument(type, input); - if (doc != null) - return doc; - - if (input instanceof IDiffElement) { - IDiffContainer parent= ((IDiffElement)input).getParent(); - return getDocument(type, parent); - } - return null; - } - - /** - * Returns true if the given inputs map to the same documents - */ - boolean sameDoc(char type, Object newInput, Object oldInput) { - IDocument newDoc= getDocument2(type, newInput); - IDocument oldDoc= getDocument2(type, oldInput); - return newDoc == oldDoc; - } - - /** - * Overridden to prevent save confirmation if new input is sub document of current input. - * @param newInput the new input of this viewer, or <code>null</code> if there is no new input - * @param oldInput the old input element, or <code>null</code> if there was previously no input - * @return <code>true</code> if saving was successful, or if the user didn't want to save (by pressing 'NO' in the confirmation dialog). - * @since 2.0 - */ - protected boolean doSave(Object newInput, Object oldInput) { - - if (oldInput != null && newInput != null) { - // check whether underlying documents have changed. - if (sameDoc('A', newInput, oldInput) && - sameDoc('L', newInput, oldInput) && - sameDoc('R', newInput, oldInput)) { - if (DEBUG) System.out.println("----- Same docs !!!!"); //$NON-NLS-1$ - return false; - } - } - - if (DEBUG) System.out.println("***** New docs !!!!"); //$NON-NLS-1$ - - IDocument aDoc= getDocument2('A', oldInput); - DocumentManager.remove(aDoc); - IDocument lDoc= getDocument2('L', oldInput); - DocumentManager.remove(lDoc); - IDocument rDoc= getDocument2('R', oldInput); - DocumentManager.remove(rDoc); - - if (DEBUG) - DocumentManager.dump(); - - return super.doSave(newInput, oldInput); - } - - private ITypedElement getParent(char type) { - Object input= getInput(); - if (input instanceof IDiffElement) { - IDiffContainer parent= ((IDiffElement)input).getParent(); - return getLeg(type, parent); - } - return null; - } - - /** - * Initializes the text viewers of the three content areas with the given input objects. - * Subclasses may extend. - */ - protected void updateContent(Object ancestor, Object left, Object right) { - - boolean emptyInput= (ancestor == null && left == null && right == null); - - int n= 0; - if (left != null) - n++; - if (right != null) - n++; - fHiglightRanges= n > 1; - - // clear stuff - fCurrentDiff= null; - fChangeDiffs= null; - fAllDiffs= null; - fEndOfDocReached= false; - - 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()) { - if (true) { // see #13844 - selectFirstDiff(); - } else { - // delay so that StyledText widget gets a chance to resize itself - // (otherwise selectFirstDiff would not know its visible area) - fComposite.getDisplay().asyncExec( - new Runnable() { - public void run() { - selectFirstDiff(); - } - } - ); - } - } - } - - private void updateDiffBackground(Diff diff) { - - if (! fHiglightRanges) - return; - - if (diff == null || diff.fIsToken) - return; - - if (fShowCurrentOnly && !isCurrentDiff(diff)) - return; - - Color c= getColor(null, getFillColor(diff)); - if (c == null) - return; - - if (isThreeWay()) - fAncestor.setLineBackground(diff.fAncestorPos, c); - fLeft.setLineBackground(diff.fLeftPos, c); - fRight.setLineBackground(diff.fRightPos, c); - } - - private void updateAllDiffBackgrounds(Display display) { - if (fChangeDiffs != null) { - boolean threeWay= isThreeWay(); - Iterator iter= fChangeDiffs.iterator(); - while (iter.hasNext()) { - Diff diff= (Diff) iter.next(); - Color c= getColor(display, getFillColor(diff)); - if (threeWay) - fAncestor.setLineBackground(diff.fAncestorPos, c); - fLeft.setLineBackground(diff.fLeftPos, c); - fRight.setLineBackground(diff.fRightPos, c); - } - } - } - - boolean isCurrentDiff(Diff diff) { - if (diff == null) - return false; - if (diff == fCurrentDiff) - return true; - if (fCurrentDiff != null && fCurrentDiff.fParent == diff) - return true; - return false; - } - - /** - * Called whenver one of the documents changes. - * Sets the dirty state of this viewer and updates the lines. - * Implements IDocumentListener. - */ - private void documentChanged(DocumentEvent e) { - - IDocument doc= e.getDocument(); - - if (doc == fLeft.getDocument()) { - 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; -// } - - /** - * This method is called if a range of text on one side is copied into an empty subdocument - * on the other side. The method returns the position where the subdocument is placed into the base document. - * This default implementation determines the position by using the text range differencer. - * However this position is not always optimal for specific types of text. - * So subclasses (which are awrae of the type of text they are dealing with) - * may override this method to find a better position where to insert a newly added - * piece of text. - * @param type the side for which the insertion position should be determined: 'A' for ancestor, 'L' for left hand side, 'R' for right hand side. - * @param input the current input object of this viewer - * @since 2.0 - */ - protected int findInsertionPosition(char type, ICompareInput input) { - - ITypedElement other= null; - char otherType= 0; - - switch (type) { - case 'A': - other= input.getLeft(); - otherType= 'L'; - if (other == null) { - other= input.getRight(); - otherType= 'R'; - } - break; - case 'L': - other= input.getRight(); - otherType= 'R'; - if (other == null) { - other= input.getAncestor(); - otherType= 'A'; - } - break; - case 'R': - other= input.getLeft(); - otherType= 'L'; - if (other == null) { - other= input.getAncestor(); - otherType= 'A'; - } - break; - } - - if (other instanceof IDocumentRange) { - IDocumentRange dr= (IDocumentRange) other; - Position p= dr.getRange(); - Diff diff= findDiff(otherType, p.offset); - if (diff != null) { - switch (type) { - case 'A': - if (diff.fAncestorPos != null) - return diff.fAncestorPos.offset; - break; - case 'L': - if (diff.fLeftPos != null) - return diff.fLeftPos.offset; - break; - case 'R': - if (diff.fRightPos != null) - return diff.fRightPos.offset; - break; - } - } - } - return 0; - } - - /** - * Returns true if a new Document could be installed. - */ - private boolean setDocument(MergeSourceViewer tp, char type, Object o) { - - if (tp == null) - return false; - - IDocument newDoc= null; - Position range= null; - - if (o instanceof IDocumentRange) { - newDoc= ((IDocumentRange)o).getDocument(); - range= ((IDocumentRange)o).getRange(); - - } else if (o instanceof IDocument) { - newDoc= (IDocument) o; - - } else if (o instanceof IStreamContentAccessor) { - - newDoc= DocumentManager.get(o); - if (newDoc == null) { - IStreamContentAccessor sca= (IStreamContentAccessor) o; - String s= null; - - try { - s= Utilities.readString(sca.getContents()); - } catch (CoreException ex) { - } - - newDoc= new Document(s != null ? s : ""); //$NON-NLS-1$ - DocumentManager.put(o, newDoc); - IDocumentPartitioner partitioner= getDocumentPartitioner(); - if (partitioner != null) { - newDoc.setDocumentPartitioner(partitioner); - partitioner.connect(newDoc); - } - } - } else if (o == null) { // deletion on one side - - ITypedElement parent= getParent(type); // we try to find an insertion position within the deletion's parent - - if (parent instanceof IDocumentRange) { - newDoc= ((IDocumentRange)parent).getDocument(); - newDoc.addPositionCategory(IDocumentRange.RANGE_CATEGORY); - Object input= getInput(); - range= getNewRange(type, input); - if (range == null) { - int pos= 0; - if (input instanceof ICompareInput) - pos= findInsertionPosition(type, (ICompareInput)input); - range= new Position(pos, 0); - try { - newDoc.addPosition(IDocumentRange.RANGE_CATEGORY, range); - } catch (BadPositionCategoryException ex) { - if (DEBUG) System.out.println("BadPositionCategoryException: " + ex); //$NON-NLS-1$ - } catch (BadLocationException ex) { - if (DEBUG) System.out.println("BadLocationException: " + ex); //$NON-NLS-1$ - } - addNewRange(type, input, range); - } - } else if (parent instanceof IDocument) { - newDoc= ((IDocumentRange)o).getDocument(); - } - } - - boolean enabled= true; - if (newDoc == null) { - //System.out.println("setDocument: create new Document"); - newDoc= new Document(""); //$NON-NLS-1$ - enabled= false; - } - - IDocument oldDoc= tp.getDocument(); - - if (newDoc != oldDoc) { - - // got a new document - - unsetDocument(tp); - - if (newDoc != null) { - newDoc.addPositionCategory(IDocumentRange.RANGE_CATEGORY); - if (fPositionUpdater == null) - fPositionUpdater= new ChildPositionUpdater(IDocumentRange.RANGE_CATEGORY); - else - newDoc.removePositionUpdater(fPositionUpdater); - newDoc.addPositionUpdater(fPositionUpdater); - } - - // install new document - if (newDoc != null) { - - tp.setRegion(range); - if (fSubDoc) { - if (range != null) { - IRegion r= normalizeDocumentRegion(newDoc, toRegion(range)); - tp.setDocument(newDoc, r.getOffset(), r.getLength()); - } else - tp.setDocument(newDoc); - } else - tp.setDocument(newDoc); - - newDoc.addDocumentListener(fDocumentListener); - } - - } else { // same document but different range - - tp.setRegion(range); - if (fSubDoc) { - if (range != null) { - IRegion r= normalizeDocumentRegion(newDoc, toRegion(range)); - tp.setVisibleRegion(r.getOffset(), r.getLength()); - } else - tp.resetVisibleRegion(); - } else - tp.resetVisibleRegion(); - } - - tp.setEnabled(enabled); - - return enabled; - } - - private Position getNewRange(char type, Object input) { - switch (type) { - case 'A': - return (Position) fNewAncestorRanges.get(input); - case 'L': - return (Position) fNewLeftRanges.get(input); - case 'R': - return (Position) fNewRightRanges.get(input); - } - return null; - } - - private void addNewRange(char type, Object input, Position range) { - switch (type) { - case 'A': - fNewAncestorRanges.put(input, range); - break; - case 'L': - fNewLeftRanges.put(input, range); - break; - case 'R': - fNewRightRanges.put(input, range); - break; - } - } - - private void unsetDocument(MergeSourceViewer tp) { - IDocument oldDoc= tp.getDocument(); - if (oldDoc != null) { - // deinstall old positions - if (fPositionUpdater != null) - oldDoc.removePositionUpdater(fPositionUpdater); - try { - oldDoc.removePositionCategory(IDocumentRange.RANGE_CATEGORY); - } catch (BadPositionCategoryException ex) { - } - - oldDoc.removeDocumentListener(fDocumentListener); - } - } - - /** - * Returns the contents of the underlying document as an array of bytes. - * - * @param left if <code>true</code> the contents of the left side is returned; otherwise the right side - * @return the contents of the left or right document or null - */ - protected byte[] getContents(boolean left) { - MergeSourceViewer v= left ? fLeft : fRight; - if (v != null) { - IDocument d= v.getDocument(); - if (d != null) { - String contents= d.get(); - if (contents != null) { - byte[] bytes; - try { - bytes= contents.getBytes(ResourcesPlugin.getEncoding()); - } catch(UnsupportedEncodingException ex) { - // use default encoding - bytes= contents.getBytes(); - } - return bytes; - } - } - } - return null; - } - - private IRegion normalizeDocumentRegion(IDocument doc, IRegion region) { - - if (region == null || doc == null) - return region; - - int maxLength= doc.getLength(); - - int start= region.getOffset(); - if (start < 0) - start= 0; - else if (start > maxLength) - start= maxLength; - - int length= region.getLength(); - if (length < 0) - length= 0; - else if (start + length > maxLength) - length= maxLength - start; - - return new Region(start, length); - } - - protected final void handleResizeAncestor(int x, int y, int width, int height) { - if (width > 0) { - Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0); - int scrollbarHeight= trim.height; - if (Utilities.okToUse(fAncestorCanvas)) - fAncestorCanvas.setVisible(true); - if (fAncestor.isControlOkToUse()) - fAncestor.getTextWidget().setVisible(true); - - if (fAncestorCanvas != null) { - fAncestorCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight); - x+= fMarginWidth; - width-= fMarginWidth; - } - fAncestor.getTextWidget().setBounds(x, y, width, height); - } else { - if (Utilities.okToUse(fAncestorCanvas)) - fAncestorCanvas.setVisible(false); - if (fAncestor.isControlOkToUse()) { - StyledText t= fAncestor.getTextWidget(); - t.setVisible(false); - t.setBounds(0, 0, 0, 0); - if (fFocusPart == fAncestor) { - fFocusPart= fLeft; - fFocusPart.getTextWidget().setFocus(); - } - } - } - } - - /** - * Lays out everything. - */ - protected final void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2, int height) { - - if (fBirdsEyeCanvas != null) - width2-= BIRDS_EYE_VIEW_WIDTH; - - Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0); - int scrollbarHeight= trim.height; - if (fIsCarbon) - scrollbarHeight-= 3; // get rid of the focus ring - - Composite composite= (Composite) getControl(); - - int leftTextWidth= width1; - if (fLeftCanvas != null) { - fLeftCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight); - x+= fMarginWidth; - leftTextWidth-= fMarginWidth; - } - - fLeft.getTextWidget().setBounds(x, y, leftTextWidth, height); - x+= leftTextWidth; - - if (fCenter == null || fCenter.isDisposed()) - fCenter= createCenter(composite); - fCenter.setBounds(x, y, centerWidth, height-scrollbarHeight); - x+= centerWidth; - - if (!fSynchronizedScrolling) { // canvas is to the left of text - if (fRightCanvas != null) { - fRightCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight); - fRightCanvas.redraw(); - x+= fMarginWidth; - } - // we draw the canvas to the left of the text widget - } - - int scrollbarWidth= 0; - if (fSynchronizedScrolling && fScrollCanvas != null) { - //scrollbarWidth= fScrollCanvas.computeTrim(0, 0, 0, 0).width; - scrollbarWidth= fLeft.getTextWidget().computeTrim(0, 0, 0, 0).width; - if (fIsCarbon) - scrollbarWidth-= 6; // get rid of the focus ring - } - int rightTextWidth= width2-scrollbarWidth; - if (fRightCanvas != null) - rightTextWidth-= fMarginWidth; - fRight.getTextWidget().setBounds(x, y, rightTextWidth, height); - x+= rightTextWidth; - - if (fSynchronizedScrolling) { - if (fRightCanvas != null) { // canvas is to the right of the text - fRightCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight); - x+= fMarginWidth; - } - if (fScrollCanvas != null) - fScrollCanvas.setBounds(x, y, scrollbarWidth, height-scrollbarHeight); - } - - if (fBirdsEyeCanvas != null) { - int verticalScrollbarButtonHeight= scrollbarWidth; - int horizontalScrollbarButtonHeight= scrollbarHeight; - if (fIsCarbon) { - verticalScrollbarButtonHeight+= 2; - horizontalScrollbarButtonHeight= 18; - } - if (fSummaryHeader != null) - fSummaryHeader.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, verticalScrollbarButtonHeight); - y+= verticalScrollbarButtonHeight; - fBirdsEyeCanvas.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, height-(2*verticalScrollbarButtonHeight+horizontalScrollbarButtonHeight)); - } - - // doesn't work since TextEditors don't have their correct size yet. - updateVScrollBar(); - refreshBirdsEyeView(); - } - - /** - * Track selection changes to update the current Diff. - */ - private void handleSelectionChanged(MergeSourceViewer tw) { - Point p= tw.getSelectedRange(); - Diff d= findDiff(tw, p.x, p.x+p.y); - updateStatus(d); - setCurrentDiff(d, false); // don't select or reveal - } - - private static IRegion toRegion(Position position) { - if (position != null) - return new Region(position.getOffset(), position.getLength()); - return null; - } - - //---- the differencing - - private static int maxWork(IRangeComparator a, IRangeComparator l, IRangeComparator r) { - int ln= l.getRangeCount(); - int rn= r.getRangeCount(); - if (a != null) { - int an= a.getRangeCount(); - return (2 * Math.max(an, ln)) + (2 * Math.max(an, rn)); - } - return 2 * Math.max(ln, rn); - } - - /** - * Perform a two level 2- or 3-way diff. - * The first level is based on line comparison, the second level on token comparison. - */ - private void doDiff() { - - fAllDiffs= new ArrayList(); - fChangeDiffs= new ArrayList(); - fCurrentDiff= null; - - IDocument aDoc= null; - IDocument lDoc= fLeft.getDocument(); - IDocument rDoc= fRight.getDocument(); - if (lDoc == null || rDoc == null) - return; - - Position aRegion= null; - Position lRegion= fLeft.getRegion(); - Position rRegion= fRight.getRegion(); - - boolean threeWay= isThreeWay(); - - if (threeWay && !fIgnoreAncestor) { - aDoc= fAncestor.getDocument(); - aRegion= fAncestor.getRegion(); - } - - fAncestor.resetLineBackground(); - fLeft.resetLineBackground(); - fRight.resetLineBackground(); - - boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false); - - DocLineComparator sright= new DocLineComparator(rDoc, toRegion(rRegion), ignoreWhiteSpace); - DocLineComparator sleft= new DocLineComparator(lDoc, toRegion(lRegion), ignoreWhiteSpace); - DocLineComparator sancestor= null; - if (aDoc != null) - sancestor= new DocLineComparator(aDoc, toRegion(aRegion), ignoreWhiteSpace); - - if (!fSubDoc && rRegion != null && lRegion != null) { - // we have to add a diff for the ignored lines - - int astart= 0; - int as= 0; - if (aRegion != null) { - astart= aRegion.getOffset(); - as= Math.max(0, astart-1); - } - int ys= Math.max(0, lRegion.getOffset()-1); - int ms= Math.max(0, rRegion.getOffset()-1); - - if (as > 0 || ys > 0 || ms > 0) { - Diff diff= new Diff(null, RangeDifference.NOCHANGE, - aDoc, aRegion, 0, astart, - lDoc, lRegion, 0, lRegion.getOffset(), - rDoc, rRegion, 0, rRegion.getOffset()); - fAllDiffs.add(diff); - } - } - - final ResourceBundle bundle= getResourceBundle(); - - final Object[] result= new Object[1]; - final DocLineComparator sa= sancestor, sl= sleft, sr= sright; - IRunnableWithProgress runnable= new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - String progressTitle= Utilities.getString(bundle, "compareProgressTask.title"); //$NON-NLS-1$ - monitor.beginTask(progressTitle, maxWork(sa, sl, sr)); - try { - result[0]= RangeDifferencer.findRanges(monitor, sa, sl, sr); - } catch (OutOfMemoryError ex) { - System.gc(); - throw new InvocationTargetException(ex); - } - if (monitor.isCanceled()) { // cancelled - throw new InterruptedException(); - } - monitor.done(); - } - }; - - RangeDifference[] e= null; - try { - TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable); - e= (RangeDifference[]) result[0]; - } catch (InvocationTargetException ex) { - String title= Utilities.getString(bundle, "tooComplexError.title"); //$NON-NLS-1$ - String format= Utilities.getString(bundle, "tooComplexError.format"); //$NON-NLS-1$ - String msg= MessageFormat.format(format, new Object[] { Integer.toString(TIMEOUT/1000) } ); - MessageDialog.openError(fComposite.getShell(), title, msg); - e= null; - } catch (InterruptedException ex) { - // - } - - if (e == null) { - // we create a NOCHANGE range for the whole document - Diff diff= new Diff(null, RangeDifference.NOCHANGE, - aDoc, aRegion, 0, aDoc != null ? aDoc.getLength() : 0, - lDoc, lRegion, 0, lDoc.getLength(), - rDoc, rRegion, 0, rDoc.getLength()); - - fAllDiffs.add(diff); - } else { - for (int i= 0; i < e.length; i++) { - String a= null, s= null, d= null; - RangeDifference es= e[i]; - - int kind= es.kind(); - - int ancestorStart= 0; - int ancestorEnd= 0; - if (sancestor != null) { - ancestorStart= sancestor.getTokenStart(es.ancestorStart()); - ancestorEnd= getTokenEnd2(sancestor, es.ancestorStart(), es.ancestorLength()); - } - - int leftStart= sleft.getTokenStart(es.leftStart()); - int leftEnd= getTokenEnd2(sleft, es.leftStart(), es.leftLength()); - - int rightStart= sright.getTokenStart(es.rightStart()); - int rightEnd= getTokenEnd2(sright, es.rightStart(), es.rightLength()); - - Diff diff= new Diff(null, kind, - aDoc, aRegion, ancestorStart, ancestorEnd, - lDoc, lRegion, leftStart, leftEnd, - rDoc, rRegion, rightStart, rightEnd); - - fAllDiffs.add(diff); // remember all range diffs for scrolling - - if (ignoreWhiteSpace) { - if (sancestor != null) - a= extract2(aDoc, sancestor, es.ancestorStart(), es.ancestorLength()); - s= extract2(lDoc, sleft, es.leftStart(), es.leftLength()); - d= extract2(rDoc, sright, es.rightStart(), es.rightLength()); - - if ((a == null || a.trim().length() == 0) && s.trim().length() == 0 && d.trim().length() == 0) { - diff.fIsWhitespace= true; - continue; - } - } - - if (useChange(kind)) { - fChangeDiffs.add(diff); // here we remember only the real diffs - updateDiffBackground(diff); - - if (s == null) - s= extract2(lDoc, sleft, es.leftStart(), es.leftLength()); - if (d == null) - d= extract2(rDoc, sright, es.rightStart(), es.rightLength()); - - if (s.length() > 0 && d.length() > 0) { - if (a == null && sancestor != null) - a= extract2(aDoc, sancestor, es.ancestorStart(), es.ancestorLength()); - if (USE_MERGING_TOKEN_DIFF) - mergingTokenDiff(diff, aDoc, a, rDoc, d, lDoc, s); - else - simpleTokenDiff(diff, aDoc, a, rDoc, d, lDoc, s); - } - } - } - } - - if (!fSubDoc && rRegion != null && lRegion != null) { - // we have to add a diff for the ignored lines - - int aEnd= 0; - int aLen= 0; - if (aRegion != null && aDoc != null) { - aEnd= aRegion.getOffset()+aRegion.getLength(); - aLen= aDoc.getLength(); - } - Diff diff= new Diff(null, RangeDifference.NOCHANGE, - aDoc, aRegion, aEnd, aLen, - lDoc, lRegion, lRegion.getOffset()+lRegion.getLength(), lDoc.getLength(), - rDoc, rRegion, rRegion.getOffset()+rRegion.getLength(), rDoc.getLength()); - fAllDiffs.add(diff); - } - } - - private Diff findDiff(char type, int pos) { - - IDocument aDoc= null; - IDocument lDoc= fLeft.getDocument(); - IDocument rDoc= fRight.getDocument(); - if (lDoc == null || rDoc == null) - return null; - - Position aRegion= null; - Position lRegion= null; - Position rRegion= null; - - boolean threeWay= isThreeWay(); - - if (threeWay && !fIgnoreAncestor) - aDoc= fAncestor.getDocument(); - - boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false); - - DocLineComparator sright= new DocLineComparator(rDoc, toRegion(rRegion), ignoreWhiteSpace); - DocLineComparator sleft= new DocLineComparator(lDoc, toRegion(lRegion), ignoreWhiteSpace); - DocLineComparator sancestor= null; - if (aDoc != null) - sancestor= new DocLineComparator(aDoc, toRegion(aRegion), ignoreWhiteSpace); - - final ResourceBundle bundle= getResourceBundle(); - - final Object[] result= new Object[1]; - final DocLineComparator sa= sancestor, sl= sleft, sr= sright; - IRunnableWithProgress runnable= new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - String progressTitle= Utilities.getString(bundle, "compareProgressTask.title"); //$NON-NLS-1$ - monitor.beginTask(progressTitle, maxWork(sa, sl, sr)); - try { - result[0]= RangeDifferencer.findRanges(monitor, sa, sl, sr); - } catch (OutOfMemoryError ex) { - System.gc(); - throw new InvocationTargetException(ex); - } - if (monitor.isCanceled()) { // cancelled - throw new InterruptedException(); - } - monitor.done(); - } - }; - - RangeDifference[] e= null; - try { - TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable); - e= (RangeDifference[]) result[0]; - } catch (InvocationTargetException ex) { - String title= Utilities.getString(bundle, "tooComplexError.title"); //$NON-NLS-1$ - String format= Utilities.getString(bundle, "tooComplexError.format"); //$NON-NLS-1$ - String msg= MessageFormat.format(format, new Object[] { Integer.toString(TIMEOUT/1000) } ); - MessageDialog.openError(fComposite.getShell(), title, msg); - e= null; - } catch (InterruptedException ex) { - // - } - - if (e != null) { - for (int i= 0; i < e.length; i++) { - RangeDifference es= e[i]; - - int kind= es.kind(); - - int ancestorStart= 0; - int ancestorEnd= 0; - if (sancestor != null) { - ancestorStart= sancestor.getTokenStart(es.ancestorStart()); - ancestorEnd= getTokenEnd2(sancestor, es.ancestorStart(), es.ancestorLength()); - } - - int leftStart= sleft.getTokenStart(es.leftStart()); - int leftEnd= getTokenEnd2(sleft, es.leftStart(), es.leftLength()); - - int rightStart= sright.getTokenStart(es.rightStart()); - int rightEnd= getTokenEnd2(sright, es.rightStart(), es.rightLength()); - - Diff diff= new Diff(null, kind, - aDoc, aRegion, ancestorStart, ancestorEnd, - lDoc, lRegion, leftStart, leftEnd, - rDoc, rRegion, rightStart, rightEnd); - - if (diff.isInRange(type, pos)) - return diff; - } - } - - return null; - } - - /** - * Returns true if kind of change should be shown. - */ - private boolean useChange(int kind) { - if (kind == RangeDifference.NOCHANGE) - return false; - if (kind == RangeDifference.ANCESTOR) - return fShowPseudoConflicts; - return true; - } - - private int getTokenEnd(ITokenComparator tc, int start, int count) { - if (count <= 0) - return tc.getTokenStart(start); - int index= start + count - 1; - return tc.getTokenStart(index) + tc.getTokenLength(index); - } - - private static int getTokenEnd2(ITokenComparator tc, int start, int length) { - return tc.getTokenStart(start + length); - } - - /** - * Returns the content of lines in the specified range as a String. - * This includes the line separators. - * - * @param doc the document from which to extract the characters - * @param start index of first line - * @param length number of lines - * @return the contents of the specified line range as a String - */ - private String extract2(IDocument doc, ITokenComparator tc, int start, int length) { - int count= tc.getRangeCount(); - if (length > 0 && count > 0) { - -// -// int startPos= tc.getTokenStart(start); -// int endPos= startPos; -// -// if (length > 1) -// endPos= tc.getTokenStart(start + (length-1)); -// endPos+= tc.getTokenLength(start + (length-1)); -// - - int startPos= tc.getTokenStart(start); - int endPos; - - if (length == 1) { - endPos= startPos + tc.getTokenLength(start); - } else { - endPos= tc.getTokenStart(start + length); - } - - try { - return doc.get(startPos, endPos - startPos); - } catch (BadLocationException e) { - } - - } - return ""; //$NON-NLS-1$ - } - - /** - * Performs a token based 3-way diff on the character range specified by the given baseDiff. - */ - private void simpleTokenDiff(final Diff baseDiff, - IDocument ancestorDoc, String a, - IDocument rightDoc, String d, - IDocument leftDoc, String s) { - - int ancestorStart= 0; - ITokenComparator sa= null; - if (ancestorDoc != null) { - ancestorStart= baseDiff.fAncestorPos.getOffset(); - sa= createTokenComparator(a); - } - - int rightStart= baseDiff.fRightPos.getOffset(); - ITokenComparator sm= createTokenComparator(d); - - int leftStart= baseDiff.fLeftPos.getOffset(); - ITokenComparator sy= createTokenComparator(s); - - RangeDifference[] e= RangeDifferencer.findRanges(sa, sy, sm); - for (int i= 0; i < e.length; i++) { - RangeDifference es= e[i]; - int kind= es.kind(); - if (kind != RangeDifference.NOCHANGE) { - - int ancestorStart2= ancestorStart; - int ancestorEnd2= ancestorStart; - if (ancestorDoc != null) { - ancestorStart2 += sa.getTokenStart(es.ancestorStart()); - ancestorEnd2 += getTokenEnd(sa, es.ancestorStart(), es.ancestorLength()); - } - - int leftStart2= leftStart + sy.getTokenStart(es.leftStart()); - int leftEnd2= leftStart + getTokenEnd(sy, es.leftStart(), es.leftLength()); - - int rightStart2= rightStart + sm.getTokenStart(es.rightStart()); - int rightEnd2= rightStart + getTokenEnd(sm, es.rightStart(), es.rightLength()); - - Diff diff= new Diff(baseDiff, kind, - ancestorDoc, null, ancestorStart2, ancestorEnd2, - leftDoc, null, leftStart2, leftEnd2, - rightDoc, null, rightStart2, rightEnd2); - - // ensure that token diff is smaller than basediff - int leftS= baseDiff.fLeftPos.offset; - int leftE= baseDiff.fLeftPos.offset+baseDiff.fLeftPos.length; - int rightS= baseDiff.fRightPos.offset; - int rightE= baseDiff.fRightPos.offset+baseDiff.fRightPos.length; - if (leftS != leftStart2 || leftE != leftEnd2 || - rightS != rightStart2 || rightE != rightEnd2) { - diff.fIsToken= true; - // add to base Diff - baseDiff.add(diff); - } - } - } - } - - /** - * Performs a "smart" token based 3-way diff on the character range specified by the given baseDiff. - * It is "smart" because it tries to minimize the number of token diffs by merging them. - */ - private void mergingTokenDiff(Diff baseDiff, - IDocument ancestorDoc, String a, - IDocument rightDoc, String d, - IDocument leftDoc, String s) { - ITokenComparator sa= null; - int ancestorStart= 0; - if (ancestorDoc != null) { - sa= createTokenComparator(a); - ancestorStart= baseDiff.fAncestorPos.getOffset(); - } - - int rightStart= baseDiff.fRightPos.getOffset(); - ITokenComparator sm= createTokenComparator(d); - - int leftStart= baseDiff.fLeftPos.getOffset(); - ITokenComparator sy= createTokenComparator(s); - - RangeDifference[] r= RangeDifferencer.findRanges(sa, sy, sm); - for (int i= 0; i < r.length; i++) { - RangeDifference es= r[i]; - // determine range of diffs in one line - int start= i; - int leftLine= -1; - int rightLine= -1; - try { - leftLine= leftDoc.getLineOfOffset(leftStart+sy.getTokenStart(es.leftStart())); - rightLine= rightDoc.getLineOfOffset(rightStart+sm.getTokenStart(es.rightStart())); - } catch (BadLocationException e) { - } - i++; - for (; i < r.length; i++) { - es= r[i]; - try { - if (leftLine != leftDoc.getLineOfOffset(leftStart+sy.getTokenStart(es.leftStart()))) - break; - if (rightLine != rightDoc.getLineOfOffset(rightStart+sm.getTokenStart(es.rightStart()))) - break; - } catch (BadLocationException e) { - } - } - int end= i; - - // find first diff from left - RangeDifference first= null; - for (int ii= start; ii < end; ii++) { - es= r[ii]; - if (useChange(es.kind())) { - first= es; - break; - } - } - - // find first diff from mine - RangeDifference last= null; - for (int ii= end-1; ii >= start; ii--) { - es= r[ii]; - if (useChange(es.kind())) { - last= es; - break; - } - } - - if (first != null && last != null) { - - int ancestorStart2= 0; - int ancestorEnd2= 0; - if (ancestorDoc != null) { - ancestorStart2= ancestorStart+sa.getTokenStart(first.ancestorStart()); - ancestorEnd2= ancestorStart+getTokenEnd(sa, last.ancestorStart(), last.ancestorLength()); - } - - int leftStart2= leftStart+sy.getTokenStart(first.leftStart()); - int leftEnd2= leftStart+getTokenEnd(sy, last.leftStart(), last.leftLength()); - - int rightStart2= rightStart+sm.getTokenStart(first.rightStart()); - int rightEnd2= rightStart+getTokenEnd(sm, last.rightStart(), last.rightLength()); - Diff diff= new Diff(baseDiff, first.kind(), - ancestorDoc, null, ancestorStart2, ancestorEnd2+1, - leftDoc, null, leftStart2, leftEnd2+1, - rightDoc, null, rightStart2, rightEnd2+1); - diff.fIsToken= true; - baseDiff.add(diff); - } - } - } - - //---- update UI stuff - - private void updateControls() { - - boolean leftToRight= false; - boolean rightToLeft= false; - - updateStatus(fCurrentDiff); - updateResolveStatus(); - - if (fCurrentDiff != null) { - IMergeViewerContentProvider cp= getMergeContentProvider(); - if (cp != null) { - rightToLeft= cp.isLeftEditable(getInput()); - leftToRight= cp.isRightEditable(getInput()); - } - } - - if (fDirectionLabel != null) { - if (fHiglightRanges && fCurrentDiff != null && isThreeWay() && !fIgnoreAncestor) { - fDirectionLabel.setImage(fCurrentDiff.getImage()); - } else { - fDirectionLabel.setImage(null); - } - } - - if (fCopyDiffLeftToRightItem != null) - ((Action)fCopyDiffLeftToRightItem.getAction()).setEnabled(leftToRight); - if (fCopyDiffRightToLeftItem != null) - ((Action)fCopyDiffRightToLeftItem.getAction()).setEnabled(rightToLeft); - - boolean enableNavigation= false; - if (fCurrentDiff == null && fChangeDiffs != null && fChangeDiffs.size() > 0) - enableNavigation= true; - else if (fChangeDiffs != null && fChangeDiffs.size() > 1) - enableNavigation= true; - else if (fCurrentDiff != null && fCurrentDiff.fDiffs != null) - enableNavigation= true; - else if (fCurrentDiff != null && fCurrentDiff.fIsToken) - enableNavigation= true; - - if (fNextItem != null) { - IAction a= fNextItem.getAction(); - a.setEnabled(enableNavigation); - } - if (fPreviousItem != null) { - IAction a= fPreviousItem.getAction(); - a.setEnabled(enableNavigation); - } - } - - private void updateResolveStatus() { - - RGB rgb= null; - - if (showResolveUI()) { - // we only show red or green if there is at least one incoming or conflicting change - int incomingOrConflicting= 0; - int unresolvedIncoming= 0; - int unresolvedConflicting= 0; - - if (fChangeDiffs != null) { - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff d= (Diff) e.next(); - if (d.isIncomingOrConflicting() /* && useChange(d.fDirection) && !d.fIsWhitespace */) { - incomingOrConflicting++; - if (!d.fResolved) { - if (d.fDirection == RangeDifference.CONFLICT) { - unresolvedConflicting++; - break; // we can stop here because a conflict has the maximum priority - } else { - unresolvedIncoming++; - } - } - } - } - } - - if (incomingOrConflicting > 0) { - if (unresolvedConflicting > 0) - rgb= SELECTED_CONFLICT; - else if (unresolvedIncoming > 0) - rgb= SELECTED_INCOMING; - else - rgb= RESOLVED; - } - } - - if (fHeaderPainter.setColor(rgb)) - fSummaryHeader.redraw(); - } - - private void updateStatus(Diff diff) { - - if (! fShowMoreInfo) - return; - - IActionBars bars= Utilities.findActionBars(fComposite); - if (bars == null) - return; - IStatusLineManager slm= bars.getStatusLineManager(); - if (slm == null) - return; - - String diffDescription; - - if (diff == null) { - diffDescription= CompareMessages.getString("TextMergeViewer.diffDescription.noDiff.format"); //$NON-NLS-1$ - } else { - - if (diff.fIsToken) // we don't show special info for token diffs - diff= diff.fParent; - - String format= CompareMessages.getString("TextMergeViewer.diffDescription.diff.format"); //$NON-NLS-1$ - diffDescription= MessageFormat.format(format, - new String[] { - getDiffType(diff), // 0: diff type - getDiffNumber(diff), // 1: diff number - getDiffRange(fLeft, diff.fLeftPos), // 2: left start line - getDiffRange(fRight, diff.fRightPos) // 3: left end line - } - ); - } - - String format= CompareMessages.getString("TextMergeViewer.statusLine.format"); //$NON-NLS-1$ - String s= MessageFormat.format(format, - new String[] { - getCursorPosition(fLeft), // 0: left column - getCursorPosition(fRight), // 1: right column - diffDescription // 2: diff description - } - ); - - slm.setMessage(s); - } - - private void clearStatus() { - - IActionBars bars= Utilities.findActionBars(fComposite); - if (bars == null) - return; - IStatusLineManager slm= bars.getStatusLineManager(); - if (slm == null) - return; - - slm.setMessage(null); - } - - private String getDiffType(Diff diff) { - String s= ""; //$NON-NLS-1$ - switch(diff.fDirection) { - case RangeDifference.LEFT: - s= CompareMessages.getString("TextMergeViewer.direction.outgoing"); //$NON-NLS-1$ - break; - case RangeDifference.RIGHT: - s= CompareMessages.getString("TextMergeViewer.direction.incoming"); //$NON-NLS-1$ - break; - case RangeDifference.CONFLICT: - s= CompareMessages.getString("TextMergeViewer.direction.conflicting"); //$NON-NLS-1$ - break; - } - String format= CompareMessages.getString("TextMergeViewer.diffType.format"); //$NON-NLS-1$ - return MessageFormat.format(format, new String[] { s, diff.changeType() } ); - } - - private String getDiffNumber(Diff diff) { - // find the diff's number - int diffNumber= 0; - if (fChangeDiffs != null) { - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff d= (Diff) e.next(); - diffNumber++; - if (d == diff) - break; - } - } - return Integer.toString(diffNumber); - } - - private String getDiffRange(MergeSourceViewer v, Position pos) { - Point p= v.getLineRange(pos, new Point(0, 0)); - int startLine= p.x+1; - int endLine= p.x+p.y; - - String format; - if (endLine < startLine) - format= CompareMessages.getString("TextMergeViewer.beforeLine.format"); //$NON-NLS-1$ - else - format= CompareMessages.getString("TextMergeViewer.range.format"); //$NON-NLS-1$ - return MessageFormat.format(format, - new String[] { Integer.toString(startLine), - Integer.toString(endLine) } ); - } - - /** - * Returns a description of the cursor position. - * - * @return a description of the cursor position - */ - private String getCursorPosition(MergeSourceViewer v) { - if (v != null) { - StyledText styledText= v.getTextWidget(); - - IDocument document= v.getDocument(); - if (document != null) { - int offset= v.getVisibleRegion().getOffset(); - int caret= offset + styledText.getCaretOffset(); - - try { - - int line=document.getLineOfOffset(caret); - - int lineOffset= document.getLineOffset(line); - int occurrences= 0; - for (int i= lineOffset; i < caret; i++) - if ('\t' == document.getChar(i)) - ++ occurrences; - - int tabWidth= styledText.getTabs(); - int column= caret - lineOffset + (tabWidth -1) * occurrences; - - String format= CompareMessages.getString("TextMergeViewer.cursorPosition.format"); //$NON-NLS-1$ - return MessageFormat.format(format, - new String[] { Integer.toString(line + 1), Integer.toString(column + 1) } ); - - } catch (BadLocationException x) { - } - } - } - return ""; //$NON-NLS-1$ - } - - protected void updateHeader() { - - super.updateHeader(); - - updateControls(); - } - - /** - * Creates the two items for copying a difference range from one side to the other - * and adds them to the given toolbar manager. - */ - protected void createToolItems(ToolBarManager tbm) { - - IWorkbenchPartSite ps= Utilities.findSite(fComposite); - fKeyBindingService= ps != null ? ps.getKeyBindingService() : null; - - final String ignoreAncestorActionKey= "action.IgnoreAncestor."; //$NON-NLS-1$ - Action ignoreAncestorAction= new Action() { - public void run() { - setIgnoreAncestor(! fIgnoreAncestor); - Utilities.initToggleAction(this, getResourceBundle(), ignoreAncestorActionKey, fIgnoreAncestor); - } - }; - ignoreAncestorAction.setChecked(fIgnoreAncestor); - Utilities.initAction(ignoreAncestorAction, getResourceBundle(), ignoreAncestorActionKey); - Utilities.initToggleAction(ignoreAncestorAction, getResourceBundle(), ignoreAncestorActionKey, fIgnoreAncestor); - - fIgnoreAncestorItem= new ActionContributionItem(ignoreAncestorAction); - fIgnoreAncestorItem.setVisible(false); - tbm.appendToGroup("modes", fIgnoreAncestorItem); //$NON-NLS-1$ - - tbm.add(new Separator()); - - Action a= new Action() { - public void run() { - navigate(true, true, true); - } - }; - Utilities.initAction(a, getResourceBundle(), "action.NextDiff."); //$NON-NLS-1$ - fNextItem= new ActionContributionItem(a); - tbm.appendToGroup("navigation", fNextItem); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.selectNextChange"); //$NON-NLS-1$ - - a= new Action() { - public void run() { - navigate(false, true, true); - } - }; - Utilities.initAction(a, getResourceBundle(), "action.PrevDiff."); //$NON-NLS-1$ - fPreviousItem= new ActionContributionItem(a); - tbm.appendToGroup("navigation", fPreviousItem); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.selectPreviousChange"); //$NON-NLS-1$ - - - CompareConfiguration cc= getCompareConfiguration(); - - if (cc.isRightEditable()) { - a= new Action() { - public void run() { - copyDiffLeftToRight(); - } - }; - Utilities.initAction(a, getResourceBundle(), "action.CopyDiffLeftToRight."); //$NON-NLS-1$ - fCopyDiffLeftToRightItem= new ActionContributionItem(a); - fCopyDiffLeftToRightItem.setVisible(true); - tbm.appendToGroup("merge", fCopyDiffLeftToRightItem); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.copyLeftToRight"); //$NON-NLS-1$ - } - - if (cc.isLeftEditable()) { - a= new Action() { - public void run() { - copyDiffRightToLeft(); - } - }; - Utilities.initAction(a, getResourceBundle(), "action.CopyDiffRightToLeft."); //$NON-NLS-1$ - fCopyDiffRightToLeftItem= new ActionContributionItem(a); - fCopyDiffRightToLeftItem.setVisible(true); - tbm.appendToGroup("merge", fCopyDiffRightToLeftItem); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.copyRightToLeft"); //$NON-NLS-1$ - } - } - - /* package */ void propertyChange(PropertyChangeEvent event) { - - String key= event.getProperty(); - - if (key.equals(CompareConfiguration.IGNORE_WHITESPACE) - || key.equals(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS)) { - - fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS); - - // clear stuff - fCurrentDiff= null; - fChangeDiffs= null; - fAllDiffs= null; - - doDiff(); - - updateControls(); - invalidateLines(); - updateVScrollBar(); - refreshBirdsEyeView(); - - selectFirstDiff(); - -// } else if (key.equals(ComparePreferencePage.USE_SPLINES)) { -// fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES); -// invalidateLines(); - - } else if (key.equals(ComparePreferencePage.USE_SINGLE_LINE)) { - fUseSingleLine= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SINGLE_LINE); - fUseResolveUI= fUseSingleLine; - fBasicCenterCurve= null; - updateResolveStatus(); - invalidateLines(); - -// } else if (key.equals(ComparePreferencePage.USE_RESOLVE_UI)) { -// fUseResolveUI= fPreferenceStore.getBoolean(ComparePreferencePage.USE_RESOLVE_UI); -// updateResolveStatus(); -// invalidateLines(); - - } else if (key.equals(fSymbolicFontName)) { - updateFont(); - invalidateLines(); - - } else if (key.equals(ComparePreferencePage.SYNCHRONIZE_SCROLLING)) { - - boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING); - if (b != fSynchronizedScrolling) - toggleSynchMode(); - - } else if (key.equals(ComparePreferencePage.SHOW_MORE_INFO)) { - - boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_MORE_INFO); - if (b != fShowMoreInfo) { - fShowMoreInfo= b; - if (fShowMoreInfo) - updateStatus(fCurrentDiff); - else - clearStatus(); - } - - } else - super.propertyChange(event); - } - - private void setIgnoreAncestor(boolean ignore) { - if (ignore != fIgnoreAncestor) { - fIgnoreAncestor= ignore; - setAncestorVisibility(false, !fIgnoreAncestor); - - // clear stuff - fCurrentDiff= null; - fChangeDiffs= null; - fAllDiffs= null; - - doDiff(); - - invalidateLines(); - updateVScrollBar(); - refreshBirdsEyeView(); - - selectFirstDiff(); - } - } - - private void selectFirstDiff() { - - if (fLeft == null || fRight == null) { - return; - } - if (fLeft.getDocument() == null || fRight.getDocument() == null) { - return; - } - - Diff firstDiff= null; - if (CompareNavigator.getDirection(fComposite)) - firstDiff= findNext(fRight, fChangeDiffs, -1, -1, false); - else - firstDiff= findPrev(fRight, fChangeDiffs, 9999999, 9999999, false); - setCurrentDiff(firstDiff, true); - } - - private void toggleSynchMode() { - fSynchronizedScrolling= ! fSynchronizedScrolling; - - scrollVertical(0, 0, 0, null); - - // throw away central control (Sash or Canvas) - Control center= getCenter(); - if (center != null && !center.isDisposed()) - center.dispose(); - - fLeft.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); - fRight.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); - - fComposite.layout(true); - } - - protected void updateToolItems() { - - if (fIgnoreAncestorItem != null) - fIgnoreAncestorItem.setVisible(isThreeWay()); - - super.updateToolItems(); - } - - //---- painting lines - - /** - * - */ - private void updateLines(IDocument d) { - - boolean left= false; - boolean right= false; - - // FIXME: this optimization is incorrect because - // it doesn't take replace operations into account where - // the old and new line count does not differ - if (d == fLeft.getDocument()) { - int l= fLeft.getLineCount(); - left= fLeftLineCount != l; - fLeftLineCount= l; - } else if (d == fRight.getDocument()) { - int l= fRight.getLineCount(); - right= fRightLineCount != l; - fRightLineCount= l; - } - - if (left || right) { - - if (left) { - if (fLeftCanvas != null) - fLeftCanvas.redraw(); - } else { - if (fRightCanvas != null) - fRightCanvas.redraw(); - } - Control center= getCenter(); - if (center != null) - center.redraw(); - - updateVScrollBar(); - refreshBirdsEyeView(); - } - } - - private void invalidateLines() { - if (isThreeWay()) { - if (Utilities.okToUse(fAncestorCanvas)) - fAncestorCanvas.redraw(); - if (fAncestor != null && fAncestor.isControlOkToUse()) - fAncestor.getTextWidget().redraw(); - } - - if (Utilities.okToUse(fLeftCanvas)) - fLeftCanvas.redraw(); - - if (fLeft != null && fLeft.isControlOkToUse()) - fLeft.getTextWidget().redraw(); - - if (Utilities.okToUse(getCenter())) - getCenter().redraw(); - - if (fRight != null && fRight.isControlOkToUse()) - fRight.getTextWidget().redraw(); - - if (Utilities.okToUse(fRightCanvas)) - fRightCanvas.redraw(); - } - - private boolean showResolveUI() { - if (!fUseResolveUI || !isThreeWay() || fIgnoreAncestor) - return false; - CompareConfiguration cc= getCompareConfiguration(); - if (cc == null) - return false; - // we only enable the new resolve ui if exactly one side is editable - boolean l= cc.isLeftEditable(); - boolean r= cc.isRightEditable(); - //return (l && !r) || (r && !l); - return l || r; - } - - private void paintCenter(Canvas canvas, GC g) { - - Display display= canvas.getDisplay(); - - checkForColorUpdate(display); - - if (! fSynchronizedScrolling) - return; - - int lineHeight= fLeft.getTextWidget().getLineHeight(); - int visibleHeight= fRight.getViewportHeight(); - - Point size= canvas.getSize(); - int x= 0; - int w= size.x; - - g.setBackground(canvas.getBackground()); - g.fillRectangle(x+1, 0, w-2, size.y); - - if (!fIsMotif) { - // draw thin line between center ruler and both texts - g.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW)); - g.fillRectangle(0, 0, 1, size.y); - g.fillRectangle(w-1, 0, 1, size.y); - } - - if (! fHiglightRanges) - return; - - boolean showResolveUI= showResolveUI(); - - if (fChangeDiffs != null) { - int lshift= fLeft.getVerticalScrollOffset(); - int rshift= fRight.getVerticalScrollOffset(); - - Point region= new Point(0, 0); - - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly2 && !isCurrentDiff(diff)) - continue; - - fLeft.getLineRange(diff.fLeftPos, region); - int ly= (region.x * lineHeight) + lshift; - int lh= region.y * lineHeight; - - fRight.getLineRange(diff.fRightPos, region); - int ry= (region.x * lineHeight) + rshift; - int rh= region.y * lineHeight; - - if (Math.max(ly+lh, ry+rh) < 0) - continue; - if (Math.min(ly, ry) >= visibleHeight) - break; - - fPts[0]= x; fPts[1]= ly; fPts[2]= w; fPts[3]= ry; - fPts[6]= x; fPts[7]= ly+lh; fPts[4]= w; fPts[5]= ry+rh; - - Color fillColor= getColor(display, getFillColor(diff)); - Color strokeColor= getColor(display, getStrokeColor(diff)); - - if (fUseSingleLine) { - int w2= 3; - - g.setBackground(fillColor); - g.fillRectangle(0, ly, w2, lh); // left - g.fillRectangle(w-w2, ry, w2, rh); // right - - g.setLineWidth(LW); - g.setForeground(strokeColor); - g.drawRectangle(0-1, ly, w2, lh); // left - g.drawRectangle(w-w2, ry, w2, rh); // right - - if (fUseSplines) { - int[] points= getCenterCurvePoints(w2, ly+lh/2, w-w2, ry+rh/2); - for (int i= 1; i < points.length; i++) - g.drawLine(w2+i-1, points[i-1], w2+i, points[i]); - } else { - g.drawLine(w2, ly+lh/2, w-w2, ry+rh/2); - } - } else { - // two lines - if (fUseSplines) { - g.setBackground(fillColor); - - g.setLineWidth(LW); - g.setForeground(strokeColor); - - int[] topPoints= getCenterCurvePoints(fPts[0], fPts[1], fPts[2], fPts[3]); - int[] bottomPoints= getCenterCurvePoints(fPts[6], fPts[7], fPts[4], fPts[5]); - g.setForeground(fillColor); - g.drawLine(0, bottomPoints[0], 0, topPoints[0]); - for (int i= 1; i < bottomPoints.length; i++) { - g.setForeground(fillColor); - g.drawLine(i, bottomPoints[i], i, topPoints[i]); - g.setForeground(strokeColor); - g.drawLine(i-1, topPoints[i-1], i, topPoints[i]); - g.drawLine(i-1, bottomPoints[i-1], i, bottomPoints[i]); - } - } else { - g.setBackground(fillColor); - g.fillPolygon(fPts); - - g.setLineWidth(LW); - g.setForeground(strokeColor); - g.drawLine(fPts[0], fPts[1], fPts[2], fPts[3]); - g.drawLine(fPts[6], fPts[7], fPts[4], fPts[5]); - } - } - - if (showResolveUI && diff.isUnresolvedIncomingOrConflicting()) { - // draw resolve state - int cx= (w-RESOLVE_SIZE)/2; - int cy= ((ly+lh/2) + (ry+rh/2) - RESOLVE_SIZE)/2; - - g.setBackground(fillColor); - g.fillRectangle(cx, cy, RESOLVE_SIZE, RESOLVE_SIZE); - - g.setForeground(strokeColor); - g.drawRectangle(cx, cy, RESOLVE_SIZE, RESOLVE_SIZE); - } - } - } - } - - private int[] getCenterCurvePoints(int startx, int starty, int endx, int endy) { - if (fBasicCenterCurve == null) - buildBaseCenterCurve(endx-startx); - double height= endy - starty; - height= height/2; - int width= endx-startx; - int[] points= new int[width]; - for (int i= 0; i < width; i++) { - points[i]= (int) (-height * fBasicCenterCurve[i] + height + starty); - } - return points; - } - - private void buildBaseCenterCurve(int w) { - double width= w; - fBasicCenterCurve= new double[getCenterWidth()]; - for (int i= 0; i < getCenterWidth(); i++) { - double r= ((double) i) / width; - fBasicCenterCurve[i]= Math.cos(Math.PI * r); - } - } - - private void paintSides(GC g, MergeSourceViewer tp, Canvas canvas, boolean right) { - - Display display= canvas.getDisplay(); - - int lineHeight= tp.getTextWidget().getLineHeight(); - int visibleHeight= tp.getViewportHeight(); - - Point size= canvas.getSize(); - int x= 0; - int w= fMarginWidth; - int w2= w/2; - - g.setBackground(canvas.getBackground()); - g.fillRectangle(x, 0, w, size.y); - - if (!fIsMotif) { - // draw thin line between ruler and text - g.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW)); - if (right) - g.fillRectangle(0, 0, 1, size.y); - else - g.fillRectangle(size.x-1, 0, 1, size.y); - } - - if (! fHiglightRanges) - return; - - if (fChangeDiffs != null) { - int shift= tp.getVerticalScrollOffset() + (2-LW); - - Point region= new Point(0, 0); - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly2 && !isCurrentDiff(diff)) - continue; - - tp.getLineRange(diff.getPosition(tp), region); - int y= (region.x * lineHeight) + shift; - int h= region.y * lineHeight; - - if (y+h < 0) - continue; - if (y >= visibleHeight) - break; - - g.setBackground(getColor(display, getFillColor(diff))); - if (right) - g.fillRectangle(x, y, w2, h); - else - g.fillRectangle(x+w2, y, w2, h); - - g.setLineWidth(LW); - g.setForeground(getColor(display, getStrokeColor(diff))); - if (right) - g.drawRectangle(x-1, y-1, w2, h); - else - g.drawRectangle(x+w2, y-1, w2, h); - } - } - } - - private void paint(PaintEvent event, MergeSourceViewer tp) { - - if (! fHiglightRanges) - return; - if (fChangeDiffs == null) - return; - - Control canvas= (Control) event.widget; - GC g= event.gc; - - Display display= canvas.getDisplay(); - - int lineHeight= tp.getTextWidget().getLineHeight(); - int w= canvas.getSize().x; - int shift= tp.getVerticalScrollOffset() + (2-LW); - int maxh= event.y+event.height; // visibleHeight - - //if (fIsMotif) - shift+= fTopInset; - - Point range= new Point(0, 0); - - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly && !isCurrentDiff(diff)) - continue; - - tp.getLineRange(diff.getPosition(tp), range); - int y= (range.x * lineHeight) + shift; - int h= range.y * lineHeight; - - if (y+h < event.y) - continue; - if (y > maxh) - break; - - g.setBackground(getColor(display, getStrokeColor(diff))); - g.fillRectangle(0, y-1, w, LW); - g.fillRectangle(0, y+h-1, w, LW); - } - } - - private RGB getFillColor(Diff diff) { - boolean selected= fCurrentDiff != null && fCurrentDiff.fParent == diff; - - RGB selected_fill= getBackground(null); - - if (isThreeWay() && !fIgnoreAncestor) { - switch (diff.fDirection) { - case RangeDifference.RIGHT: - if (fLeftIsLocal) - return selected ? selected_fill : INCOMING_FILL; - return selected ? selected_fill : OUTGOING_FILL; - case RangeDifference.ANCESTOR: - return selected ? selected_fill : CONFLICT_FILL; - case RangeDifference.LEFT: - if (fLeftIsLocal) - return selected ? selected_fill : OUTGOING_FILL; - return selected ? selected_fill : INCOMING_FILL; - case RangeDifference.CONFLICT: - return selected ? selected_fill : CONFLICT_FILL; - } - return null; - } - return selected ? selected_fill : OUTGOING_FILL; - } - - private RGB getStrokeColor(Diff diff) { - boolean selected= fCurrentDiff != null && fCurrentDiff.fParent == diff; - - if (isThreeWay() && !fIgnoreAncestor) { - switch (diff.fDirection) { - case RangeDifference.RIGHT: - if (fLeftIsLocal) - return selected ? SELECTED_INCOMING : INCOMING; - return selected ? SELECTED_OUTGOING : OUTGOING; - case RangeDifference.ANCESTOR: - return selected ? SELECTED_CONFLICT : CONFLICT; - case RangeDifference.LEFT: - if (fLeftIsLocal) - return selected ? SELECTED_OUTGOING : OUTGOING; - return selected ? SELECTED_INCOMING : INCOMING; - case RangeDifference.CONFLICT: - return selected ? SELECTED_CONFLICT : CONFLICT; - } - return null; - } - return selected ? SELECTED_OUTGOING : OUTGOING; - } - - private Color getColor(Display display, RGB rgb) { - if (rgb == null) - return null; - if (fColors == null) - fColors= new HashMap(20); - Color c= (Color) fColors.get(rgb); - if (c == null) { - c= new Color(display, rgb); - fColors.put(rgb, c); - } - return c; - } - - static RGB interpolate(RGB fg, RGB bg, double scale) { - return new RGB( - (int)((1.0-scale) * fg.red + scale * bg.red), - (int)((1.0-scale) * fg.green + scale * bg.green), - (int)((1.0-scale) * fg.blue + scale * bg.blue) - ); - } - - //---- Navigating and resolving Diffs - - /** - * Returns true if end (or beginning) of document reached. - */ - private boolean navigate(boolean down, boolean wrap, boolean deep) { - - Diff diff= null; - - for (;;) { - - if (fChangeDiffs != null) { - MergeSourceViewer part= fFocusPart; - if (part == null) - part= fRight; - - if (part != null) { - Point s= part.getSelectedRange(); - if (down) - diff= findNext(part, fChangeDiffs, s.x, s.x+s.y, deep); - else - diff= findPrev(part, fChangeDiffs, s.x, s.x+s.y, deep); - } - } - - if (diff == null) { // at end or beginning - if (wrap) { - if (!fEndOfDocReached) { - fEndOfDocReached= true; - if (! endOfDocumentReached(down)) - return true; - } - fEndOfDocReached= false; - if (fChangeDiffs != null && fChangeDiffs.size() > 0) { - if (down) - diff= (Diff) fChangeDiffs.get(0); - else - diff= (Diff) fChangeDiffs.get(fChangeDiffs.size()-1); - } - } else { - fEndOfDocReached= false; - return true; - } - } - - setCurrentDiff(diff, true); - - if (diff != null && diff.fDirection == RangeDifference.ANCESTOR - && !getAncestorEnabled()) - continue; - - break; - } - - return false; - } - - private boolean endOfDocumentReached(boolean down) { - Control c= getControl(); - if (Utilities.okToUse(c)) { - - c.getDisplay().beep(); - - String key= down ? "atEnd" : "atBeginning"; //$NON-NLS-1$ //$NON-NLS-2$ - return MessageDialog.openQuestion(c.getShell(), - CompareMessages.getString("TextMergeViewer."+key+".title"), //$NON-NLS-1$ //$NON-NLS-2$ - CompareMessages.getString("TextMergeViewer."+key+".message")); //$NON-NLS-1$ //$NON-NLS-2$ - } - return false; - } - - /** - * Find the Diff that overlaps with the given TextPart's text range. - * If the range doesn't overlap with any range <code>null</code> - * is returned. - */ - private Diff findDiff(MergeSourceViewer tp, int rangeStart, int rangeEnd) { - if (fChangeDiffs != null) { - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.contains(tp, rangeStart, rangeEnd)) - return diff; - } - } - return null; - } - - private static Diff findNext(MergeSourceViewer tp, List v, int start, int end, boolean deep) { - for (int i= 0; i < v.size(); i++) { - Diff diff= (Diff) v.get(i); - Position p= diff.getPosition(tp); - if (p != null) { - int startOffset= p.getOffset(); - if (end < startOffset) // <= - return diff; - if (deep && diff.fDiffs != null) { - Diff d= null; - int endOffset= startOffset + p.getLength(); - if (start == startOffset && (end == endOffset || end == endOffset-1)) { - d= findNext(tp, diff.fDiffs, start-1, start-1, deep); - } else if (end < endOffset) { - d= findNext(tp, diff.fDiffs, start, end, deep); - } - if (d != null) - return d; - } - } - } - return null; - } - - private static Diff findPrev(MergeSourceViewer tp, List v, int start, int end, boolean deep) { - for (int i= v.size()-1; i >= 0; i--) { - Diff diff= (Diff) v.get(i); - Position p= diff.getPosition(tp); - if (p != null) { - int startOffset= p.getOffset(); - int endOffset= startOffset + p.getLength(); - if (start > endOffset) - return diff; - if (deep && diff.fDiffs != null) { - Diff d= null; - if (start == startOffset && end == endOffset) { - d= findPrev(tp, diff.fDiffs, end, end, deep); - } else if (start >= startOffset) { - d= findPrev(tp, diff.fDiffs, start, end, deep); - } - if (d != null) - return d; - } - } - } - return null; - } - - /* - * Set the currently active Diff and update the toolbars controls and lines. - * If <code>revealAndSelect</code> is <code>true</code> the Diff is revealed and - * selected in both TextParts. - */ - private void setCurrentDiff(Diff d, boolean revealAndSelect) { - -// if (d == fCurrentDiff) -// return; - - if (fCenterButton != null) - fCenterButton.setVisible(false); - - fEndOfDocReached= false; - - Diff oldDiff= fCurrentDiff; - - if (d != null && revealAndSelect) { - - // before we set fCurrentDiff we change the selection - // so that the paint code uses the old background colors - // otherwise selection isn't drawn correctly - if (isThreeWay() && !fIgnoreAncestor) - fAncestor.setSelection(d.fAncestorPos); - fLeft.setSelection(d.fLeftPos); - fRight.setSelection(d.fRightPos); - - // now switch diffs - fCurrentDiff= d; - revealDiff(d, d.fIsToken); - } else { - fCurrentDiff= d; - } - - Diff d1= oldDiff != null ? oldDiff.fParent : null; - Diff d2= fCurrentDiff != null ? fCurrentDiff.fParent : null; - if (d1 != d2) { - updateDiffBackground(d1); - updateDiffBackground(d2); - } - - updateControls(); - invalidateLines(); - refreshBirdsEyeView(); - } - - /** - * Smart determines whether - */ - private void revealDiff(Diff d, boolean smart) { - - boolean ancestorIsVisible= false; - boolean leftIsVisible= false; - boolean rightIsVisible= false; - - if (smart) { - Point region= new Point(0, 0); - // find the starting line of the diff in all text widgets - int ls= fLeft.getLineRange(d.fLeftPos, region).x; - int rs= fRight.getLineRange(d.fRightPos, region).x; - - if (isThreeWay() && !fIgnoreAncestor) { - int as= fAncestor.getLineRange(d.fAncestorPos, region).x; - if (as >= fAncestor.getTopIndex() && as <= fAncestor.getBottomIndex()) - ancestorIsVisible= true; - } - - if (ls >= fLeft.getTopIndex() && ls <= fLeft.getBottomIndex()) - leftIsVisible= true; - - if (rs >= fRight.getTopIndex() && rs <= fRight.getBottomIndex()) - rightIsVisible= true; - } - - // vertical scrolling - if (!leftIsVisible || !rightIsVisible) { - int avpos= 0, lvpos= 0, rvpos= 0; - - MergeSourceViewer allButThis= null; - if (leftIsVisible) { - avpos= lvpos= rvpos= realToVirtualPosition(fLeft, fLeft.getTopIndex()); - allButThis= fLeft; - } else if (rightIsVisible) { - avpos= lvpos= rvpos= realToVirtualPosition(fRight, fRight.getTopIndex()); - allButThis= fRight; - } else if (ancestorIsVisible) { - avpos= lvpos= rvpos= realToVirtualPosition(fAncestor, fAncestor.getTopIndex()); - allButThis= fAncestor; - } else { - if (fAllDiffs != null) { - int vpos= 0; - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - if (diff == d) - break; - if (fSynchronizedScrolling) { - vpos+= diff.getMaxDiffHeight(fShowAncestor); - } else { - avpos+= diff.getAncestorHeight(); - lvpos+= diff.getLeftHeight(); - rvpos+= diff.getRightHeight(); - } - } - if (fSynchronizedScrolling) - avpos= lvpos= rvpos= vpos; - } - int delta= fRight.getViewportLines()/4; - avpos-= delta; - if (avpos < 0) - avpos= 0; - lvpos-= delta; - if (lvpos < 0) - lvpos= 0; - rvpos-= delta; - if (rvpos < 0) - rvpos= 0; - } - - scrollVertical(avpos, lvpos, rvpos, allButThis); - - if (fVScrollBar != null) - fVScrollBar.setSelection(avpos); - } - - // horizontal scrolling - if (d.fIsToken) { - // we only scroll horizontally for token diffs - reveal(fAncestor, d.fAncestorPos); - reveal(fLeft, d.fLeftPos); - reveal(fRight, d.fRightPos); - } else { - // in all other cases we reset the horizontal offset - hscroll(fAncestor); - hscroll(fLeft); - hscroll(fRight); - } - } - - private static void reveal(MergeSourceViewer v, Position p) { - if (v != null && p != null) { - StyledText st= v.getTextWidget(); - if (st != null) { - Rectangle r= st.getClientArea(); - if (!r.isEmpty()) // workaround for #7320: Next diff scrolls when going into current diff - v.revealRange(p.offset, p.length); - } - } - } - - private static void hscroll(MergeSourceViewer v) { - if (v != null) { - StyledText st= v.getTextWidget(); - if (st != null) - st.setHorizontalIndex(0); - } - } - - //-------------------------------------------------------------------------------- - - void copyAllUnresolved(boolean leftToRight) { - if (fChangeDiffs != null && isThreeWay() && !fIgnoreAncestor) { - IRewriteTarget target= leftToRight ? fRight.getRewriteTarget() : fLeft.getRewriteTarget(); - boolean compoundChangeStarted= false; - Iterator e= fChangeDiffs.iterator(); - try { - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - switch (diff.fDirection) { - case RangeDifference.LEFT: - if (leftToRight) { - if (!compoundChangeStarted) { - target.beginCompoundChange(); - compoundChangeStarted= true; - } - copy(diff, leftToRight); - } - break; - case RangeDifference.RIGHT: - if (!leftToRight) { - if (!compoundChangeStarted) { - target.beginCompoundChange(); - compoundChangeStarted= true; - } - copy(diff, leftToRight); - } - break; - default: - continue; - } - } - } finally { - if (compoundChangeStarted) { - target.endCompoundChange(); - } - } - } - } - - /* - * Copy whole document from one side to the other. - */ - protected void copy(boolean leftToRight) { - - if (showResolveUI()) { - copyAllUnresolved(leftToRight); - invalidateLines(); - return; - } - - if (leftToRight) { - if (fLeft.getEnabled()) { - // copy text - String text= fLeft.getTextWidget().getText(); - fRight.getTextWidget().setText(text); - fRight.setEnabled(true); - } else { - // delete - fRight.getTextWidget().setText(""); //$NON-NLS-1$ - fRight.setEnabled(false); - } - fRightLineCount= fRight.getLineCount(); - setRightDirty(true); - 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); - } - - private void copyDiffRightToLeft() { - copy(fCurrentDiff, false, false); - } - - /* - * Copy the contents of the given diff from one side to the other. - */ - private void copy(Diff diff, boolean leftToRight, boolean gotoNext) { - if (copy(diff, leftToRight)) { - if (gotoNext) { - navigate(true, true, true); - } else { - revealDiff(diff, true); - updateControls(); - } - } - } - - /* - * Copy the contents of the given diff from one side to the other but - * doesn't reveal anything. - * Returns true if copy was succesful. - */ - private boolean copy(Diff diff, boolean leftToRight) { - - if (diff != null && !diff.isResolved()) { - - Position fromPos= null; - Position toPos= null; - IDocument fromDoc= null; - IDocument toDoc= null; - - if (leftToRight) { - fRight.setEnabled(true); - fromPos= diff.fLeftPos; - toPos= diff.fRightPos; - fromDoc= fLeft.getDocument(); - toDoc= fRight.getDocument(); - } else { - fLeft.setEnabled(true); - fromPos= diff.fRightPos; - toPos= diff.fLeftPos; - fromDoc= fRight.getDocument(); - toDoc= fLeft.getDocument(); - } - - if (fromDoc != null) { - - int fromStart= fromPos.getOffset(); - int fromLen= fromPos.getLength(); - - int toStart= toPos.getOffset(); - int toLen= toPos.getLength(); - - try { - String s= null; - - switch (diff.fDirection) { - case RangeDifference.RIGHT: - case RangeDifference.LEFT: - s= fromDoc.get(fromStart, fromLen); - break; - case RangeDifference.ANCESTOR: - break; - case RangeDifference.CONFLICT: - if (APPEND_CONFLICT) { - s= toDoc.get(toStart, toLen); - s+= fromDoc.get(fromStart, fromLen); - } else - s= fromDoc.get(fromStart, fromLen); - break; - } - if (s != null) { - toDoc.replace(toStart, toLen, s); - toPos.setOffset(toStart); - toPos.setLength(s.length()); - } - - } catch (BadLocationException e) { - } - } - - diff.setResolved(true); - updateResolveStatus(); - - return true; - } - return false; - } - - //---- scrolling - - /** - * Calculates virtual height (in lines) of views by adding the maximum of corresponding diffs. - */ - private int getVirtualHeight() { - int h= 1; - if (fAllDiffs != null) { - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - h+= diff.getMaxDiffHeight(fShowAncestor); - } - } - return h; - } - - /** - * Calculates height (in lines) of right view by adding the height of the right diffs. - */ - private int getRightHeight() { - int h= 1; - if (fAllDiffs != null) { - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - h+= diff.getRightHeight(); - } - } - return h; - } - - /** - * The height of the TextEditors in lines. - */ - private int getViewportHeight() { - StyledText te= fLeft.getTextWidget(); - - int vh= te.getClientArea().height; - if (vh == 0) { - Rectangle trim= te.computeTrim(0, 0, 0, 0); - int scrollbarHeight= trim.height; - - int headerHeight= getHeaderHeight(); - - Composite composite= (Composite) getControl(); - Rectangle r= composite.getClientArea(); - - vh= r.height-headerHeight-scrollbarHeight; - } - - return vh / te.getLineHeight(); - } - - /** - * Returns the virtual position for the given view position. - */ - private int realToVirtualPosition(MergeSourceViewer w, int vpos) { - - if (! fSynchronizedScrolling || fAllDiffs == null) - return vpos; - - int viewPos= 0; // real view position - int virtualPos= 0; // virtual position - Point region= new Point(0, 0); - - Iterator e= fAllDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - Position pos= diff.getPosition(w); - w.getLineRange(pos, region); - int realHeight= region.y; - int virtualHeight= diff.getMaxDiffHeight(fShowAncestor); - if (vpos <= viewPos + realHeight) { // OK, found! - vpos-= viewPos; // make relative to this slot - // now scale position within this slot to virtual slot - if (realHeight <= 0) - vpos= 0; - else - vpos= (vpos*virtualHeight)/realHeight; - return virtualPos+vpos; - } - viewPos+= realHeight; - virtualPos+= virtualHeight; - } - return virtualPos; - } - - private void scrollVertical(int avpos, int lvpos, int rvpos, MergeSourceViewer allBut) { - - int s= 0; - - if (fSynchronizedScrolling) { - s= getVirtualHeight() - rvpos; - int height= fRight.getViewportLines()/4; - if (s < 0) - s= 0; - if (s > height) - s= height; - } - - fInScrolling= true; - - if (isThreeWay() && allBut != fAncestor) { - if (fSynchronizedScrolling || allBut == null) { - int y= virtualToRealPosition(fAncestor, avpos+s)-s; - fAncestor.vscroll(y); - } - } - - if (allBut != fLeft) { - if (fSynchronizedScrolling || allBut == null) { - int y= virtualToRealPosition(fLeft, lvpos+s)-s; - fLeft.vscroll(y); - } - } - - if (allBut != fRight) { - if (fSynchronizedScrolling || allBut == null) { - int y= virtualToRealPosition(fRight, rvpos+s)-s; - fRight.vscroll(y); - } - } - - fInScrolling= false; - - if (isThreeWay() && fAncestorCanvas != null) - fAncestorCanvas.repaint(); - - if (fLeftCanvas != null) - fLeftCanvas.repaint(); - - Control center= getCenter(); - if (center instanceof BufferedCanvas) - ((BufferedCanvas)center).repaint(); - - if (fRightCanvas != null) - fRightCanvas.repaint(); - } - - /** - * Updates Scrollbars with viewports. - */ - private void syncViewport(MergeSourceViewer w) { - - if (fInScrolling) - return; - - int ix= w.getTopIndex(); - int ix2= w.getDocumentRegionOffset(); - - int viewPosition= realToVirtualPosition(w, ix-ix2); - - scrollVertical(viewPosition, viewPosition, viewPosition, w); // scroll all but the given views - - if (fVScrollBar != null) { - int value= Math.max(0, Math.min(viewPosition, getVirtualHeight() - getViewportHeight())); - fVScrollBar.setSelection(value); - //refreshBirdEyeView(); - } - } - - /** - */ - private void updateVScrollBar() { - - if (Utilities.okToUse(fVScrollBar) && fSynchronizedScrolling) { - int virtualHeight= getVirtualHeight(); - int viewPortHeight= getViewportHeight(); - int pageIncrement= viewPortHeight-1; - int thumb= (viewPortHeight > virtualHeight) ? virtualHeight : viewPortHeight; - - fVScrollBar.setPageIncrement(pageIncrement); - fVScrollBar.setMaximum(virtualHeight); - fVScrollBar.setThumb(thumb); - } - } - - /** - * maps given virtual position into a real view position of this view. - */ - private int virtualToRealPosition(MergeSourceViewer part, int v) { - - if (! fSynchronizedScrolling || fAllDiffs == null) - return v; - - int virtualPos= 0; - int viewPos= 0; - Point region= new Point(0, 0); - - Iterator e= fAllDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - Position pos= diff.getPosition(part); - int viewHeight= part.getLineRange(pos, region).y; - int virtualHeight= diff.getMaxDiffHeight(fShowAncestor); - if (v < (virtualPos + virtualHeight)) { - v-= virtualPos; // make relative to this slot - if (viewHeight <= 0) { - v= 0; - } else { - v= (v*viewHeight)/virtualHeight; - } - return viewPos+v; - } - virtualPos+= virtualHeight; - viewPos+= viewHeight; - } - return viewPos; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties deleted file mode 100644 index 3126d006e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties +++ /dev/null @@ -1,98 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)TextMergeViewerResources.properties -# -# Resource strings for TextMergeViewer.java - -title= Text Compare - -saveDialog.title= Save Resource -saveDialog.message= Resource has been modified. Save changes? - -compareProgressTask.title= Computing Differences... - -tooComplexError.title= Error -tooComplexError.format= Too many differences. Turn on the ''Ignore White Space'' option or do a structure compare first. - -##################################################### -# Toolbar actions -##################################################### - -action.CopyLeftToRight.label=Copy Left to Right -action.CopyLeftToRight.tooltip=Copy All from Left to Right -action.CopyLeftToRight.image=copy_r_co.gif - -action.CopyRightToLeft.label=Copy Right to Left -action.CopyRightToLeft.tooltip=Copy All Non-Conflicting Changes from Right to Left -action.CopyRightToLeft.image=copy_l_co.gif - -action.CopyDiffLeftToRight.label=Copy Current Diff -action.CopyDiffLeftToRight.tooltip=Copy Current Change from Left to Right -action.CopyDiffLeftToRight.image=copycont_r_co.gif - -action.CopyDiffRightToLeft.label=Copy Current Diff -action.CopyDiffRightToLeft.tooltip=Copy Current Change from Right to Left -action.CopyDiffRightToLeft.image=copycont_l_co.gif - -action.NextDiff.label=Next -action.NextDiff.tooltip=Select Next Change -action.NextDiff.image=next_nav.gif - -action.PrevDiff.label=Previous -action.PrevDiff.tooltip=Select Previous Change -action.PrevDiff.image=prev_nav.gif - -action.EnableAncestor.label=Enable Ancestor Pane -action.EnableAncestor.tooltip.unchecked=Show Ancestor Pane -action.EnableAncestor.tooltip.checked=Hide Ancestor Pane -action.EnableAncestor.description.unchecked=Show Ancestor Pane -action.EnableAncestor.description.checked=Hide Ancestor Pane -action.EnableAncestor.image=ancestorpane_co.gif - -action.IgnoreAncestor.label=Ignore Ancestor -action.IgnoreAncestor.tooltip.unchecked=Two-Way Compare (Ignore Ancestor) -action.IgnoreAncestor.tooltip.checked=Three-Way Compare -action.IgnoreAncestor.description.unchecked=Two-Way Compare (Ignore Ancestor) -action.IgnoreAncestor.description.checked=Three-Way Compare -action.IgnoreAncestor.image=twowaycompare_co.gif - - -##################################################### -# Context menu actions -##################################################### - -action.undo.label=Undo@Ctrl+Z -action.undo.tooltip=Undo Last Operation - -action.redo.label=Redo@Ctrl+Y -action.redo.tooltip=Redo Last Operation - -action.cut.label=Cut@Ctrl+X -action.cut.tooltip=Cut Text Selection to Clipboard - -action.copy.label=Copy@Ctrl+C -action.copy.tooltip=Copy Text Selection to Clipboard - -action.paste.label=Paste@Ctrl+V -action.paste.tooltip=Replace Text Selection with Clipboard - -action.delete.label=Delete -action.delete.tooltip=Delete Current Text Selection - -action.find.label=Find...@Ctrl+F -action.find.tooltip=Find Occurrence - -action.selectAll.label=Select All@Ctrl+A -action.selectAll.tooltip=Select All Changes - -action.save.label=Save@Ctrl+S -action.save.tooltip=Save Changes diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html deleted file mode 100644 index 9f606fb95..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html +++ /dev/null @@ -1,45 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="Author" content="IBM"> - <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]"> - <title>Package-level Javadoc</title> -</head> -<body> -Support for compare and merge viewers which show the -content side-by-side. -<h2> -Package Specification</h2> - -The <b>ContentMergeViewer</b> is an abstract compare and merge viewer -with two side-by-side content areas and an optional content area for a -common ancestor (for three-way compare). Because the implementation makes -no assumptions about the content type it is a subclass responsibility to -deal with a specific type. Its subclass <b>ImageMergeViewer</b> in -package org.eclipse.compare.internal shows how to base a simple -mergeviewer for images on <b>ContentMergeViewer</b>. -<p> - -A <b>ContentMergeViewer</b> accesses its model by means of a content -provider which must implement the <b>IMergeViewerContentProvider</b> interface. -<p> - -The <b>TextMergeViewer</b> is the standard concrete subclass of -<b>ContentMergeViewer</b> for comparing and merging text content. -<br> -A text merge viewer uses the <b>org.eclipse.compare.rangedifferencer.RangeDifferencer</b> -to perform a textual, line-by-line comparison of two (or three) input documents. -For text lines that differ the <b>TextMergeViewer</b> uses an <b>ITokenComparator</b> -to find longest sequences of matching and non-matching tokens. -The <b>TextMergeViewer</b>'s -default token compare works on characters separated by whitespace. If a -different strategy is needed (for example, Java tokens in a Java-aware -merge viewer), clients can create their own token comparators by implementing -the <b>ITokenComparator</b> interface. -<p>The <b>TextMergeViewer</b> not only works on whole documents but on -subranges of documents too. In this case the viewer's input must be an -<b>IDocumentRange</b> instead of an <b>IDocument</b>. - -</body> -</html> diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java deleted file mode 100644 index d6c202174..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.Viewer; - - -public abstract class AbstractViewer extends Viewer { - - public void setInput(Object input) { - } - - public Object getInput() { - return null; - } - - public ISelection getSelection() { - return null; - } - - public void setSelection(ISelection s, boolean reveal) { - } - - public void refresh() { - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java deleted file mode 100644 index 4f4386683..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.ui.IActionDelegate; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - - -public class AddFromHistoryAction implements IActionDelegate { - - private static final String BUNDLE_NAME= "org.eclipse.compare.internal.AddFromHistoryAction"; //$NON-NLS-1$ - - private ISelection fSelection; - - public AddFromHistoryAction() { - } - - public void selectionChanged(IAction a, ISelection s) { - fSelection= s; - } - - public void run(IAction action) { - - ResourceBundle bundle= ResourceBundle.getBundle(BUNDLE_NAME); - String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$ - - Shell parentShell= CompareUIPlugin.getShell(); - AddFromHistoryDialog dialog= null; - - Object[] s= Utilities.getResources(fSelection); - - for (int i= 0; i < s.length; i++) { - Object o= s[i]; - if (o instanceof IContainer) { - IContainer container= (IContainer) o; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(parentShell); - IProgressMonitor pm= pmdialog.getProgressMonitor(); - IFile[] states= null; - try { - states= container.findDeletedMembersWithHistory(IContainer.DEPTH_INFINITE, pm); - } catch (CoreException ex) { - pm.done(); - } - - if (states == null || states.length <= 0) { - String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$ - MessageDialog.openInformation(parentShell, title, msg); - return; - } - - if (dialog == null) { - dialog= new AddFromHistoryDialog(parentShell, bundle); - dialog.setHelpContextId(ICompareContextIds.ADD_FROM_HISTORY_DIALOG); - } - - if (dialog.select(container, states)) { - - AddFromHistoryDialog.HistoryInput[] selected= dialog.getSelected(); - - if (selected != null && selected.length > 0) { - try { - updateWorkspace(bundle, parentShell, selected); - - } catch (InterruptedException x) { - // Do nothing. Operation has been canceled by user. - - } catch (InvocationTargetException x) { - String reason= x.getTargetException().getMessage(); - MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason)); //$NON-NLS-1$ - } - } - } - } - } - } - - void createContainers(IResource resource) throws CoreException { - IContainer container= resource.getParent(); - if (container instanceof IFolder) { - IFolder parent= (IFolder) container; - if (parent != null && !parent.exists()) { - createContainers(parent); - parent.create(false, true, null); - } - } - } - - private void updateWorkspace(final ResourceBundle bundle, Shell shell, - final AddFromHistoryDialog.HistoryInput[] selected) - throws InvocationTargetException, InterruptedException { - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws InvocationTargetException { - try { - String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$ - pm.beginTask(taskName, selected.length); - - for (int i= 0; i < selected.length; i++) { - IFile file= selected[i].fFile; - IFileState fileState= selected[i].fFileState; - createContainers(file); - - SubProgressMonitor subMonitor= new SubProgressMonitor(pm, 1); - try { - file.create(fileState.getContents(), false, subMonitor); - } finally { - subMonitor.done(); - } - } - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - pm.done(); - } - } - }; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell); - pmdialog.run(false, true, operation); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties deleted file mode 100644 index e25207118..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties +++ /dev/null @@ -1,45 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)AddFromHistoryAction.properties -# -# Resources for AddFromHistoryAction.java - -title= Restore from Local History - -memberPaneTitle= {0} - Available Files in Local History: - -treeTitleFormat= Local History of ''{0}'' -dateIcon= obj16/day_obj.gif -timeIcon= obj16/resource_obj.gif - -memberDescription= Check files to restore from the local history: -editionDescription= Select an edition of a file: - -treeFormat= {0} -workspaceTreeFormat= {0} (Workspace File) -parseErrorFormat= {0} (Parse Error) - -editionLabel= Local History ({0}) -workspaceEditionLabel= Workspace File - -targetLabel= {0} - -todayFormat= Today ({0}) -yesterdayFormat= Yesterday ({0}) -dayFormat= {0} - -buttonLabel= Restore - -noLocalHistoryError= No deleted resources in local history for selected container. -replaceError=Can''t replace resource (reason: {0}). - -taskName=Restoring
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java deleted file mode 100644 index a15a9e6ab..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java +++ /dev/null @@ -1,461 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.text.*; -import java.util.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; - - -public class AddFromHistoryDialog extends ResizableDialog { - - static class HistoryInput implements ITypedElement, IStreamContentAccessor, IModificationDate { - IFile fFile; - IFileState fFileState; - - HistoryInput(IFile file, IFileState fileState) { - fFile= file; - fFileState= fileState; - } - public InputStream getContents() throws CoreException { - return new BufferedInputStream(fFileState.getContents()); - } - public String getName() { - return fFile.getName(); - } - public String getType() { - return fFile.getFileExtension(); - } - public Image getImage() { - return CompareUI.getImage(fFile); - } - public long getModificationDate() { - return fFileState.getModificationTime(); - } - } - - static class FileHistory { - private IFile fFile; - private IFileState[] fStates; - private int fSelected; - - FileHistory(IFile file) { - fFile= file; - } - - IFile getFile() { - return fFile; - } - - IFileState[] getStates() { - if (fStates == null) { - try { - fStates= fFile.getHistory(new NullProgressMonitor()); - } catch (CoreException ex) { - } - } - return fStates; - } - - IFileState getSelectedState() { - return getStates()[fSelected]; - } - - void setSelected(IFileState state) { - for (int i= 0; i < fStates.length; i++) { - if (fStates[i] == state) { - fSelected= i; - return; - } - } - } - - HistoryInput getHistoryInput() { - return new HistoryInput(fFile, getSelectedState()); - } - - boolean isSelected(int index) { - return index == fSelected; - } - } - - private CompareConfiguration fCompareConfiguration; - private ArrayList fArrayList= new ArrayList(); - private FileHistory fCurrentFileHistory; - - // SWT controls - private CompareViewerSwitchingPane fContentPane; - private Button fCommitButton; - private Table fMemberTable; - private CompareViewerPane fMemberPane; - private Tree fEditionTree; - private CompareViewerPane fEditionPane; - private Image fDateImage; - private Image fTimeImage; - - - public AddFromHistoryDialog(Shell parent, ResourceBundle bundle) { - super(parent, bundle); - - String iconName= Utilities.getString(fBundle, "dateIcon", "obj16/day_obj.gif"); //$NON-NLS-2$ //$NON-NLS-1$ - ImageDescriptor id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fDateImage= id.createImage(); - iconName= Utilities.getString(fBundle, "timeIcon", "obj16/resource_obj.gif"); //$NON-NLS-1$ //$NON-NLS-2$ - id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fTimeImage= id.createImage(); - } - - public boolean select(IContainer root, IFile[] inputFiles) { - - create(); // create widgets - - String format= Utilities.getString(fBundle, "memberPaneTitle"); //$NON-NLS-1$ - String title= MessageFormat.format(format, new Object[] { root.getName() }); - fMemberPane.setImage(CompareUI.getImage(root)); - fMemberPane.setText(title); - - // sort input files - final int count= inputFiles.length; - final IFile[] files= new IFile[count]; - for (int i= 0; i < count; i++) - files[i]= (IFile) inputFiles[i]; - if (count > 1) - internalSort(files, 0, count-1); - - - String prefix= root.getFullPath().toString(); - - if (fMemberTable != null && !fMemberTable.isDisposed()) { - for (int i= 0; i < files.length; i++) { - IFile file= files[i]; - String path= file.getFullPath().toString(); - if (path.startsWith(prefix)) - path= path.substring(prefix.length()+1); - TableItem ti= new TableItem(fMemberTable, SWT.NONE); - ti.setImage(CompareUI.getImage(file)); - ti.setText(path); - ti.setData(new FileHistory(file)); - } - } - - open(); - - return (getReturnCode() == OK) && (fArrayList.size() > 0); - } - - HistoryInput[] getSelected() { - HistoryInput[] selected= new HistoryInput[fArrayList.size()]; - Iterator iter= fArrayList.iterator(); - for (int i= 0; iter.hasNext(); i++) { - FileHistory h= (FileHistory) iter.next(); - selected[i]= h.getHistoryInput(); - } - return selected; - } - - protected synchronized Control createDialogArea(Composite parent2) { - - Composite parent= (Composite) super.createDialogArea(parent2); - - getShell().setText(Utilities.getString(fBundle, "title")); //$NON-NLS-1$ - - org.eclipse.compare.Splitter vsplitter= new org.eclipse.compare.Splitter(parent, SWT.VERTICAL); - vsplitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL - | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); - - vsplitter.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fDateImage != null) - fDateImage.dispose(); - if (fTimeImage != null) - fTimeImage.dispose(); - } - } - ); - - // we need two panes: the left for the elements, the right one for the editions - Splitter hsplitter= new Splitter(vsplitter, SWT.HORIZONTAL); - - Composite c= new Composite(hsplitter, SWT.NONE); - GridLayout layout= new GridLayout(); - layout.marginWidth= 0; - layout.marginHeight= 2; - layout.verticalSpacing= 2; - layout.numColumns= 1; - c.setLayout(layout); - Label l1= new Label(c, SWT.NONE); - l1.setText(Utilities.getString(fBundle, "memberDescription")); //$NON-NLS-1$ - fMemberPane= new CompareViewerPane(c, SWT.BORDER | SWT.FLAT); - GridData gd= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - fMemberPane.setLayoutData(gd); - - fMemberTable= new Table(fMemberPane, SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL); - fMemberTable.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (e.detail == SWT.CHECK) { - if (e.item instanceof TableItem) { - TableItem ti= (TableItem) e.item; - if (ti.getChecked()) - fArrayList.add(ti.getData()); - else - fArrayList.remove(ti.getData()); - - if (fCommitButton != null) - fCommitButton.setEnabled(fArrayList.size() > 0); - } - } else { - handleMemberSelect(e.item); - } - } - } - ); - - fMemberPane.setContent(fMemberTable); - - c= new Composite(hsplitter, SWT.NONE); - layout= new GridLayout(); - layout.marginWidth= 0; - layout.marginHeight= 2; - layout.verticalSpacing= 2; - layout.numColumns= 1; - c.setLayout(layout); - Label l2= new Label(c, SWT.NONE); - l2.setText(Utilities.getString(fBundle, "editionDescription")); //$NON-NLS-1$ - fEditionPane= new CompareViewerPane(c, SWT.BORDER | SWT.FLAT); - gd= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - fEditionPane.setLayoutData(gd); - - fEditionTree= new Tree(fEditionPane, SWT.H_SCROLL | SWT.V_SCROLL); - fEditionTree.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - feedContent(e.item); - } - } - ); - fEditionPane.setContent(fEditionTree); - - applyDialogFont(parent); // to avoid applying font to compare viewer - fContentPane= new CompareViewerSwitchingPane(vsplitter, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - return CompareUIPlugin.findContentViewer(oldViewer, input, this, fCompareConfiguration); - } - }; - vsplitter.setWeights(new int[] { 30, 70 }); - - return parent; - } - - /** - * Feeds selection from member viewer to edition viewer. - */ - private void handleMemberSelect(Widget w) { - Object data= w.getData(); - if (data instanceof FileHistory) { - - FileHistory h= (FileHistory) data; - fCurrentFileHistory= h; - - IFile file= h.getFile(); - IFileState[] states= h.getStates(); - - fEditionPane.setImage(CompareUI.getImage(file)); - String pattern= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$ - String title= MessageFormat.format(pattern, new Object[] { file.getName() }); - fEditionPane.setText(title); - - if (fEditionTree != null) { - fEditionTree.setRedraw(false); - fEditionTree.removeAll(); - for (int i= 0; i < states.length; i++) { - addEdition(new HistoryInput(file, states[i]), h.isSelected(i)); - } - fEditionTree.setRedraw(true); - } - } else - fCurrentFileHistory= null; - } - - /** - * Adds the given Pair to the edition tree. - * It takes care of creating tree nodes for different dates. - */ - private void addEdition(HistoryInput input, boolean isSelected) { - if (fEditionTree == null || fEditionTree.isDisposed()) - return; - - IFileState state= input.fFileState; - - // find last day - TreeItem[] days= fEditionTree.getItems(); - TreeItem lastDay= null; - if (days.length > 0) - lastDay= days[days.length-1]; - - long ldate= state.getModificationTime(); - long day= dayNumber(ldate); - Date date= new Date(ldate); - if (lastDay == null || day != dayNumber(((Date)lastDay.getData()).getTime())) { - lastDay= new TreeItem(fEditionTree, SWT.NONE); - lastDay.setImage(fDateImage); - String df= DateFormat.getDateInstance().format(date); - long today= dayNumber(System.currentTimeMillis()); - - String formatKey; - if (day == today) - formatKey= "todayFormat"; //$NON-NLS-1$ - else if (day == today-1) - formatKey= "yesterdayFormat"; //$NON-NLS-1$ - else - formatKey= "dayFormat"; //$NON-NLS-1$ - String pattern= Utilities.getString(fBundle, formatKey); - if (pattern != null) - df= MessageFormat.format(pattern, new String[] { df }); - lastDay.setText(df); - lastDay.setData(date); - } - TreeItem ti= new TreeItem(lastDay, SWT.NONE); - ti.setImage(fTimeImage); - ti.setText(DateFormat.getTimeInstance().format(date)); - ti.setData(input); - - if (isSelected) { - lastDay.setExpanded(true); - fEditionTree.setSelection(new TreeItem[] { ti }); - feedContent(ti); - } - } - - /** - * Returns the number of s since Jan 1st, 1970. - * The given date is converted to GMT and daylight saving is taken into account too. - */ - private long dayNumber(long date) { - int ONE_DAY_MS= 24*60*60 * 1000; // one day in milli seconds - - Calendar calendar= Calendar.getInstance(); - long localTimeOffset= calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET); - - return (date + localTimeOffset) / ONE_DAY_MS; - } - - /** - * Feeds the tree viewer's selection to the contentviewer - */ - private void feedContent(Widget w) { - if (fContentPane != null && !fContentPane.isDisposed()) { - Object o= w.getData(); - if (o instanceof HistoryInput) { - HistoryInput selected= (HistoryInput) o; - fContentPane.setInput(selected); - fContentPane.setText(getEditionLabel(selected)); - fContentPane.setImage(fTimeImage); - - if (fCurrentFileHistory != null) - fCurrentFileHistory.setSelected(selected.fFileState); - } else { - fContentPane.setInput(null); - } - } - } - - protected String getEditionLabel(HistoryInput input) { - String format= Utilities.getString(fBundle, "historyEditionLabel", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "editionLabel"); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - long modDate= input.getModificationDate(); - String date= DateFormat.getDateTimeInstance().format(new Date(modDate)); - - return MessageFormat.format(format, new Object[] { date }); - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - String buttonLabel= Utilities.getString(fBundle, "buttonLabel", IDialogConstants.OK_LABEL); //$NON-NLS-1$ - // a 'Cancel' and a 'Add' button - fCommitButton= createButton(parent, IDialogConstants.OK_ID, buttonLabel, true); - fCommitButton.setEnabled(false); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - - /** - * Returns true if the pathname of f1 comes after f2 - */ - private static boolean greaterThan(IFile f1, IFile f2) { - String[] ss1= f1.getFullPath().segments(); - String[] ss2= f2.getFullPath().segments(); - int l1= ss1.length; - int l2= ss2.length; - int n= Math.max(l1, l2); - - for (int i= 0; i < n; i++) { - String s1= i < l1 ? ss1[i] : ""; //$NON-NLS-1$ - String s2= i < l2 ? ss2[i] : ""; //$NON-NLS-1$ - int rc= s1.compareToIgnoreCase(s2); - if (rc != 0) - return rc < 0; - } - return false; - } - - private static void internalSort(IFile[] keys, int left, int right) { - - int original_left= left; - int original_right= right; - - IFile mid= keys[(left + right) / 2]; - do { - while (greaterThan(keys[left], mid)) - left++; - - while (greaterThan(mid, keys[right])) - right--; - - if (left <= right) { - IFile tmp= keys[left]; - keys[left]= keys[right]; - keys[right]= tmp; - left++; - right--; - } - } while (left <= right); - - if (original_left < right) - internalSort(keys, original_left, right); - - if (left < original_right) - internalSort(keys, left, original_right); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java deleted file mode 100644 index c9d673e7c..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.util.ResourceBundle; -import java.text.MessageFormat; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - -/** - * A simple compare viewer for binary files. - * Shows the position of the first non-matching byte. - */ -public class BinaryCompareViewer extends AbstractViewer { - - private static final String BUNDLE_NAME= "org.eclipse.compare.internal.BinaryCompareViewerResources"; //$NON-NLS-1$ - - private static final int EOF= -1; - private Text fControl; - private ICompareInput fInput; - private ResourceBundle fBundle; - private boolean fLeftIsLocal; - - - public BinaryCompareViewer(Composite parent, CompareConfiguration cc) { - - WorkbenchHelp.setHelp(parent, ICompareContextIds.BINARY_COMPARE_VIEW); - - fBundle= ResourceBundle.getBundle(BUNDLE_NAME); - - fControl= new Text(parent, SWT.NONE); - fControl.setEditable(false); - fControl.setData(CompareUI.COMPARE_VIEWER_TITLE, Utilities.getString(fBundle, "title")); //$NON-NLS-1$ - - fLeftIsLocal= Utilities.getBoolean(cc, "LEFT_IS_LOCAL", false); //$NON-NLS-1$ - } - - public Control getControl() { - return fControl; - } - - public void setInput(Object input) { - if (fControl != null && input instanceof ICompareInput) { - fInput= (ICompareInput) input; - - InputStream left= null; - InputStream right= null; - - String message= null; - try { - left= getStream(fInput.getLeft()); - right= getStream(fInput.getRight()); - - if (left != null && right != null) { - int pos= 0; - while (true) { - int l= left.read(); - int r= right.read(); - if (l != r) { - String format= Utilities.getString(fBundle, "diffMessageFormat"); //$NON-NLS-1$ - message= MessageFormat.format(format, new String[] { Integer.toString(pos) } ); - break; - } - if (l == EOF) - break; - pos++; - } - } else if (left == null && right == null) { - message= Utilities.getString(fBundle, "deleteConflictMessage"); //$NON-NLS-1$ - } else if (left == null) { - if (fLeftIsLocal) - message= Utilities.getString(fBundle, "deletedMessage"); //$NON-NLS-1$ - else - message= Utilities.getString(fBundle, "addedMessage"); //$NON-NLS-1$ - } else if (right == null) { - if (fLeftIsLocal) - message= Utilities.getString(fBundle, "addedMessage"); //$NON-NLS-1$ - else - message= Utilities.getString(fBundle, "deletedMessage"); //$NON-NLS-1$ - } - } catch (CoreException ex) { - message= Utilities.getString(fBundle, "errorMessage"); //$NON-NLS-1$ - } catch (IOException ex) { - message= Utilities.getString(fBundle, "errorMessage"); //$NON-NLS-1$ - } finally { - if (left != null) { - try { - left.close(); - } catch (IOException ex) { - } - } - if (right != null) { - try { - right.close(); - } catch (IOException ex) { - } - } - } - if (message != null) - fControl.setText(message); - } - } - - public Object getInput() { - return fInput; - } - - private InputStream getStream(ITypedElement input) throws CoreException { - if (input instanceof IStreamContentAccessor) - return ((IStreamContentAccessor)input).getContents(); - return null; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java deleted file mode 100644 index 8c98ec6ff..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; - -/** - * A factory object for the <code>BinaryCompareViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class BinaryCompareViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new BinaryCompareViewer(parent, mp); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties deleted file mode 100644 index dbfc7d70e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties +++ /dev/null @@ -1,22 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)BinaryCompareViewerResources.properties -# -# Resource strings for BinaryCompareViewer.java - -title= Binary Compare - -diffMessageFormat= First bytes differ at position {0} -deleteConflictMessage= Delete Conflict -addedMessage= Added Resource -deletedMessage= Removed Resource -errorMessage= Internal Error diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java deleted file mode 100644 index 79b34255d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.events.*; - -/** - * A Canvas which reduces flicker by drawing in an off screen buffer. - */ -public abstract class BufferedCanvas extends Canvas { - - //private static final boolean USE_DOUBLE_BUFFER= !"carbon".equals(SWT.getPlatform()); //$NON-NLS-1$ - private static final boolean USE_DOUBLE_BUFFER= true; - - /** The drawable for double buffering */ - Image fBuffer; - - public BufferedCanvas(Composite parent, int flags) { - super(parent, flags + SWT.NO_BACKGROUND); - - addPaintListener( - new PaintListener() { - public void paintControl(PaintEvent event) { - doubleBufferPaint(event.gc); - } - } - ); - - addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fBuffer != null) { - fBuffer.dispose(); - fBuffer= null; - } - } - } - ); - } - - public void repaint() { - if (!isDisposed()) { - GC gc= new GC(this); - doubleBufferPaint(gc); - gc.dispose(); - } - } - - /** - * Double buffer drawing. - */ - void doubleBufferPaint(GC dest) { - - if (!USE_DOUBLE_BUFFER) { - doPaint(dest); - return; - } - - Point size= getSize(); - - if (size.x <= 1 || size.y <= 1) // we test for <= 1 because on X11 controls have initial size 1,1 - return; - - if (fBuffer != null) { - Rectangle r= fBuffer.getBounds(); - if (r.width != size.x || r.height != size.y) { - fBuffer.dispose(); - fBuffer= null; - } - } - if (fBuffer == null) - fBuffer= new Image(getDisplay(), size.x, size.y); - - GC gc= new GC(fBuffer); - try { - gc.setBackground(getBackground()); - gc.fillRectangle(0, 0, size.x, size.y); - doPaint(gc); - } finally { - gc.dispose(); - } - - dest.drawImage(fBuffer, 0, 0); - } - - abstract public void doPaint(GC gc); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java deleted file mode 100644 index 9c5db3d50..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java +++ /dev/null @@ -1,117 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.IStructureComparator; - -/** - * A buffer for a workspace resource. - */ -public class BufferedResourceNode extends ResourceNode { - - private boolean fDirty= false; - private IFile fDeleteFile; - - /** - * Creates a <code>ResourceNode</code> for the given resource. - * - * @param resource the resource - */ - public BufferedResourceNode(IResource resource) { - super(resource); - } - - protected IStructureComparator createChild(IResource child) { - return new BufferedResourceNode(child); - } - - public void setContent(byte[] contents) { - fDirty= true; - super.setContent(contents); - } - - /** - * Commits buffered contents to resource. - */ - public void commit(IProgressMonitor pm) throws CoreException { - if (fDirty) { - - if (fDeleteFile != null) { - fDeleteFile.delete(true, true, pm); - return; - } - - IResource resource= getResource(); - if (resource instanceof IFile) { - ByteArrayInputStream is= new ByteArrayInputStream(getContent()); - try { - IFile file= (IFile) resource; - if (file.exists()) - file.setContents(is, false, true, pm); - else - file.create(is, false, pm); - fDirty= false; - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - } - } - } - } - } - - public ITypedElement replace(ITypedElement child, ITypedElement other) { - - if (child == null) { // add resource - // create a node without a resource behind it! - IResource resource= getResource(); - if (resource instanceof IFolder) { - IFolder folder= (IFolder) resource; - IFile file= folder.getFile(other.getName()); - child= new BufferedResourceNode(file); - } - } - - if (other == null) { // delete resource - IResource resource= getResource(); - if (resource instanceof IFolder) { - IFolder folder= (IFolder) resource; - IFile file= folder.getFile(child.getName()); - if (file != null && file.exists()) { - fDeleteFile= file; - fDirty= true; - } - } - return null; - } - - if (other instanceof IStreamContentAccessor && child instanceof IEditableContent) { - IEditableContent dst= (IEditableContent) child; - - try { - InputStream is= ((IStreamContentAccessor)other).getContents(); - byte[] bytes= Utilities.readBytes(is); - if (bytes != null) - dst.setContent(bytes); - } catch (CoreException ex) { - } - } - return child; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java deleted file mode 100644 index 824ed3e1c..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.jface.action.Action; -import org.eclipse.compare.CompareConfiguration; - -/** - * Toggles a boolean property of an <code>ICompareConfiguration</code>. - */ -public class ChangePropertyAction extends Action { - - private CompareConfiguration fCompareConfiguration; - private String fPropertyKey; - private ResourceBundle fBundle; - private String fPrefix; - - - public ChangePropertyAction(ResourceBundle bundle, CompareConfiguration cc, String rkey, String pkey) { - fPropertyKey= pkey; - fBundle= bundle; - fPrefix= rkey; - Utilities.initAction(this, fBundle, fPrefix); - setCompareConfiguration(cc); - } - - public void run() { - boolean b= !Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false); - setChecked(b); - if (fCompareConfiguration != null) - fCompareConfiguration.setProperty(fPropertyKey, new Boolean(b)); - } - - public void setChecked(boolean state) { - super.setChecked(state); - Utilities.initToggleAction(this, fBundle, fPrefix, state); - } - - public void setCompareConfiguration(CompareConfiguration cc) { - fCompareConfiguration= cc; - setChecked(Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false)); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java deleted file mode 100644 index 787c3fb26..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.ColorDialog; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; - -import org.eclipse.jface.resource.JFaceResources; - -/** - * A "button" of a certain color determined by the color picker. - */ -public class ColorEditor { - - private Point fExtent; - private Image fImage; - private RGB fColorValue; - private Color fColor; - private Button fButton; - - public ColorEditor(Composite parent) { - - fButton= new Button(parent, SWT.PUSH); - fExtent= computeImageSize(parent); - fImage= new Image(parent.getDisplay(), fExtent.x, fExtent.y); - - GC gc= new GC(fImage); - gc.setBackground(fButton.getBackground()); - gc.fillRectangle(0, 0, fExtent.x, fExtent.y); - gc.dispose(); - - fButton.setImage(fImage); - fButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - ColorDialog colorDialog= new ColorDialog(fButton.getShell()); - colorDialog.setRGB(fColorValue); - RGB newColor = colorDialog.open(); - if (newColor != null) { - fColorValue= newColor; - updateColorImage(); - } - } - }); - - fButton.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent event) { - if (fImage != null) { - fImage.dispose(); - fImage= null; - } - if (fColor != null) { - fColor.dispose(); - fColor= null; - } - } - }); - } - - public RGB getColorValue() { - return fColorValue; - } - - public void setColorValue(RGB rgb) { - fColorValue= rgb; - updateColorImage(); - } - - public Button getButton() { - return fButton; - } - - protected void updateColorImage() { - - Display display= fButton.getDisplay(); - - GC gc= new GC(fImage); - gc.setForeground(display.getSystemColor(SWT.COLOR_BLACK)); - gc.drawRectangle(0, 2, fExtent.x - 1, fExtent.y - 4); - - if (fColor != null) - fColor.dispose(); - - fColor= new Color(display, fColorValue); - gc.setBackground(fColor); - gc.fillRectangle(1, 3, fExtent.x - 2, fExtent.y - 5); - gc.dispose(); - - fButton.setImage(fImage); - } - - protected Point computeImageSize(Control window) { - GC gc= new GC(window); - Font f= JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT); - gc.setFont(f); - int height= gc.getFontMetrics().getHeight(); - gc.dispose(); - Point p= new Point(height * 3 - 6, height); - return p; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java deleted file mode 100644 index 1e899e6a3..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; - -import org.eclipse.ui.IObjectActionDelegate; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.CompareUI; - - -/* - * The "Compare with each other" action - */ -public class CompareAction implements IObjectActionDelegate { - - private ResourceCompareInput fInput; - private IWorkbenchPage fWorkbenchPage; - - public void run(IAction action) { - if (fInput != null) { - fInput.initializeCompareConfiguration(); - CompareUI.openCompareEditorOnPage(fInput, fWorkbenchPage); - fInput= null; // don't reuse this input! - } - } - - public void selectionChanged(IAction action, ISelection selection) { - if (fInput == null) { - CompareConfiguration cc= new CompareConfiguration(); - // buffered merge mode: don't ask for confirmation - // when switching between modified resources - cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, new Boolean(false)); - - fInput= new ResourceCompareInput(cc); - } - action.setEnabled(fInput.setSelection(selection)); - } - - public void setActivePart(IAction action, IWorkbenchPart targetPart) { - fWorkbenchPage= targetPart.getSite().getPage(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java deleted file mode 100644 index 335a02395..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; - -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; - - -public class CompareDialog extends ResizableDialog implements IPropertyChangeListener { - - private CompareEditorInput fCompareEditorInput; - private Button fCommitButton; - - - CompareDialog(Shell shell, CompareEditorInput input) { - super(shell, null); - - Assert.isNotNull(input); - fCompareEditorInput= input; - fCompareEditorInput.addPropertyChangeListener(this); - setHelpContextId(ICompareContextIds.COMPARE_DIALOG); - } - - public boolean close() { - if (super.close()) { - if (fCompareEditorInput != null) - fCompareEditorInput.addPropertyChangeListener(this); - return true; - } - return false; - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - fCommitButton= createButton(parent, IDialogConstants.OK_ID, Utilities.getString("CompareDialog.commitAction.label"), true); //$NON-NLS-1$ - fCommitButton.setEnabled(false); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - - public void propertyChange(PropertyChangeEvent event) { - if (fCommitButton != null && fCompareEditorInput != null) - fCommitButton.setEnabled(fCompareEditorInput.isSaveNeeded()); - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected Control createDialogArea(Composite parent2) { - - Composite parent= (Composite) super.createDialogArea(parent2); - - Control c= fCompareEditorInput.createContents(parent); - c.setLayoutData(new GridData(GridData.FILL_BOTH)); - - Shell shell= c.getShell(); - shell.setText(fCompareEditorInput.getTitle()); - shell.setImage(fCompareEditorInput.getTitleImage()); - applyDialogFont(parent); - return parent; - } - - /* (non-Javadoc) - * Method declared on Window. - */ - public int open() { - - int rc= super.open(); - - if (rc == OK && fCompareEditorInput.isSaveNeeded()) { - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws CoreException { - fCompareEditorInput.saveChanges(pm); - } - }; - - Shell shell= getParentShell(); - ProgressMonitorDialog pmd= new ProgressMonitorDialog(shell); - try { - operation.run(pmd.getProgressMonitor()); - - } catch (InterruptedException x) { - } catch (OperationCanceledException x) { - } catch (InvocationTargetException x) { - String title= Utilities.getString("CompareDialog.saveErrorTitle"); //$NON-NLS-1$ - String msg= Utilities.getString("CompareDialog.saveErrorMessage"); //$NON-NLS-1$ - MessageDialog.openError(shell, title, msg + x.getTargetException().getMessage()); - } - } - - return rc; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java deleted file mode 100644 index 33fd75eea..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.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.help.WorkbenchHelp; -import org.eclipse.ui.part.EditorPart; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; - - -/** - * A CompareEditor takes a ICompareEditorInput as input. - * Most functionality is delegated to the ICompareEditorInput. - */ -public class CompareEditor extends EditorPart implements 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) { - Control c= ((CompareEditorInput) input).createContents(parent); - WorkbenchHelp.setHelp(c, ICompareContextIds.COMPARE_EDITOR); - } - } - - /* - * @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 87735feb5..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.jface.action.*; - -import org.eclipse.ui.*; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.part.EditorActionBarContributor; - -import org.eclipse.compare.*; - - -public class CompareEditorContributor extends EditorActionBarContributor { - - private IEditorPart fActiveEditorPart= null; - - private IgnoreWhiteSpaceAction fIgnoreWhitespace; - private NavigationAction fNext; - private NavigationAction fPrevious; - - private NavigationAction fToolbarNext; - private NavigationAction fToolbarPrevious; - - - public CompareEditorContributor() { - ResourceBundle bundle= CompareUIPlugin.getResourceBundle(); - - fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, null); - WorkbenchHelp.setHelp(fIgnoreWhitespace, ICompareContextIds.IGNORE_WHITESPACE_ACTION); - - fNext= new NavigationAction(bundle, true); - WorkbenchHelp.setHelp(fNext, ICompareContextIds.GLOBAL_NEXT_DIFF_ACTION); - - fPrevious= new NavigationAction(bundle, false); - WorkbenchHelp.setHelp(fPrevious, ICompareContextIds.GLOBAL_PREVIOUS_DIFF_ACTION); - - fToolbarNext= new NavigationAction(bundle, true); - WorkbenchHelp.setHelp(fToolbarNext,ICompareContextIds.NEXT_DIFF_ACTION); - - fToolbarPrevious= new NavigationAction(bundle, false); - WorkbenchHelp.setHelp(fToolbarPrevious, ICompareContextIds.PREVIOUS_DIFF_ACTION); - } - - /* - * @see EditorActionBarContributor#contributeToToolBar(IToolBarManager) - */ - public void contributeToToolBar(IToolBarManager tbm) { - tbm.add(new Separator()); - tbm.add(fIgnoreWhitespace); - tbm.add(fToolbarNext); - tbm.add(fToolbarPrevious); - } - - /* - * @see EditorActionBarContributor#contributeToMenu(IMenuManager) - */ - public void contributeToMenu(IMenuManager menuManager) { - } - - public void setActiveEditor(IEditorPart targetEditor) { - - if (fActiveEditorPart == targetEditor) - return; - - fActiveEditorPart= targetEditor; - - if (fActiveEditorPart != null) { - IEditorInput input= fActiveEditorPart.getEditorInput(); - if (input instanceof CompareEditorInput) { - CompareEditorInput compareInput= (CompareEditorInput) input; - fNext.setCompareEditorInput(compareInput); - fPrevious.setCompareEditorInput(compareInput); - // Begin fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105 - fToolbarNext.setCompareEditorInput(compareInput); - fToolbarPrevious.setCompareEditorInput(compareInput); - // End fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105 - } - } - - if (targetEditor instanceof CompareEditor) { - IActionBars actionBars= getActionBars(); - - CompareEditor editor= (CompareEditor) targetEditor; - editor.setActionBars(actionBars); - - actionBars.setGlobalActionHandler(IWorkbenchActionConstants.NEXT, fNext); - actionBars.setGlobalActionHandler(IWorkbenchActionConstants.PREVIOUS, fPrevious); - - CompareConfiguration cc= editor.getCompareConfiguration(); - fIgnoreWhitespace.setCompareConfiguration(cc); - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java deleted file mode 100644 index b6fb85fd5..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class CompareMessages { - - private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.CompareMessages";//$NON-NLS-1$ - - private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); - - private CompareMessages() { - } - - public static String getString(String key) { - try { - return fgResourceBundle.getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties deleted file mode 100644 index e29774d71..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties +++ /dev/null @@ -1,58 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -ComparePlugin.internal_error= Internal Error -ExceptionDialog.seeErrorLogMessage= See error log for more details. - -# -# Title format for CompareViewerSwitchingPane -# -CompareViewerSwitchingPane.Titleformat= {0} ({1}) - -# -# Title message for StructureDiffViewer if no structural differences could be found -# -StructureDiffViewer.NoStructuralDifferences= No Structural Differences -StructureDiffViewer.StructureError= Can't Compare Structures - -# -# TextMergeViewer -# -TextMergeViewer.cursorPosition.format= {0} : {1} - -TextMergeViewer.beforeLine.format= before line {0} -TextMergeViewer.range.format= {0} : {1} - -TextMergeViewer.changeType.addition= addition -TextMergeViewer.changeType.deletion= deletion -TextMergeViewer.changeType.change= change - -TextMergeViewer.direction.outgoing= outgoing -TextMergeViewer.direction.incoming= incoming -TextMergeViewer.direction.conflicting= conflicting - -TextMergeViewer.diffType.format= {0} {1} - -TextMergeViewer.diffDescription.noDiff.format= no diff -TextMergeViewer.diffDescription.diff.format= {0} #{1} (Left: {2}, Right: {3}) -TextMergeViewer.statusLine.format= Left: {0}, Right: {1}, {2} - -TextMergeViewer.atEnd.title= Go to Next Difference -TextMergeViewer.atEnd.message= End of document reached. Continue at beginning? - -TextMergeViewer.atBeginning.title= Go to Previous Difference -TextMergeViewer.atBeginning.message= Beginning of document reached. Continue at end? - -CompareNavigator.atEnd.title= Go to Next Difference -CompareNavigator.atEnd.message= Last difference reached. - -CompareNavigator.atBeginning.title= Go to Previous Difference -CompareNavigator.atBeginning.message= First difference reached. diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java deleted file mode 100644 index 9812a86fc..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java +++ /dev/null @@ -1,179 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.dialogs.MessageDialog; - -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.compare.*; - -/** - * Supports cross-pane navigation through differences. - * XXX: Design is as it is because the feature had to be added without touching API. - */ -public class CompareNavigator { - - private boolean fLastDirection= true; - private CompareViewerSwitchingPane[] fPanes; - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - private boolean fNextFirstTime= true; - - public CompareNavigator(CompareViewerSwitchingPane[] panes) { - fPanes= panes; - } - - public CompareViewerSwitchingPane[] getPanes() { - return fPanes; - } - - public void selectChange(boolean next) { - - fLastDirection= next; - - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - if (next && fNextFirstTime && mustOpen()) { - fNextFirstTime= false; - openElement(); - } - - // find most down stream CompareViewerPane - int n= 0; - INavigatable[] navigators= new INavigatable[4]; - for (int i= 0; i < fPanes.length; i++) { - navigators[n]= getNavigator(fPanes[i]); - if (navigators[n] != null) - n++; - } - - while (n > 0) { - n--; - if (navigators[n].gotoDifference(next)) { - // at end of this navigator - continue; - } else // not at end - return; - } - // beep - if (fPanes[0] != null) { - Control c= fPanes[0].getContent(); - if (c != null) { - Display display= c.getDisplay(); - if (display != null) - display.beep(); - - String title; - String message; - if (next) { - title= CompareMessages.getString("CompareNavigator.atEnd.title"); //$NON-NLS-1$ - message= CompareMessages.getString("CompareNavigator.atEnd.message"); //$NON-NLS-1$ - } else { - title= CompareMessages.getString("CompareNavigator.atBeginning.title"); //$NON-NLS-1$ - message= CompareMessages.getString("CompareNavigator.atBeginning.message"); //$NON-NLS-1$ - } - MessageDialog.openInformation(c.getShell(), title, message); - } - } - } - - private static INavigatable getNavigator(CompareViewerSwitchingPane pane) { - if (pane == null) - return null; - if (pane.isEmpty()) - return null; - Viewer viewer= pane.getViewer(); - if (viewer == null) - return null; - Control control= viewer.getControl(); - if (control == null) - return null; - Object data= control.getData(INavigatable.NAVIGATOR_PROPERTY); - if (data instanceof INavigatable) - return (INavigatable) data; - return null; - } - - private static CompareNavigator findNavigator(Control c) { - while (c != null && !c.isDisposed()) { // PR 1GEUVV2 - Object data= c.getData(); - if (data instanceof CompareEditorInput) { - CompareEditorInput cei= (CompareEditorInput) data; - Object adapter= cei.getAdapter(CompareNavigator.class); - if (adapter instanceof CompareNavigator) - return (CompareNavigator)adapter; - } - c= c.getParent(); - } - return null; - } - - private boolean resetDirection() { - boolean last= fLastDirection; - fLastDirection= true; - return last; - } - - public static boolean getDirection(Control c) { - CompareNavigator nav= findNavigator(c); - if (nav != null) - return nav.resetDirection(); - return true; - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private boolean mustOpen() { - if (fPanes == null || fPanes.length == 0) - return false; - for (int i= 1; i < fPanes.length; i++) { - CompareViewerSwitchingPane pane= fPanes[i]; - if (pane != null && pane.getInput() != null) - return false; - } - return true; - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private void openElement() { - if (fPanes == null || fPanes.length == 0) - return; - IOpenable openable= getOpenable(fPanes[0]); - if (openable != null) { - openable.openSelected(); - } - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private static IOpenable getOpenable(CompareViewerSwitchingPane pane) { - if (pane == null) - return null; - if (pane.isEmpty()) - return null; - Viewer viewer= pane.getViewer(); - if (viewer == null) - return null; - Control control= viewer.getControl(); - if (control == null) - return null; - Object data= control.getData(IOpenable.OPENABLE_PROPERTY); - if (data instanceof IOpenable) - return (IOpenable) data; - return null; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java deleted file mode 100644 index 9b5496af0..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java +++ /dev/null @@ -1,356 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; -import java.io.*; - -import org.eclipse.swt.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.preference.*; -import org.eclipse.jface.util.*; - -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.texteditor.AbstractTextEditor; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.TextMergeViewer; -import org.eclipse.compare.structuremergeviewer.*; - - -public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - - class FakeInput implements ITypedElement, IStreamContentAccessor { - String fContent; - - FakeInput(String name) { - fContent= loadPreviewContentFromFile(name); - } - public Image getImage() { - return null; - } - public String getName() { - return "no name"; //$NON-NLS-1$ - } - public String getType() { - return "no type"; //$NON-NLS-1$ - } - public InputStream getContents() { - return new ByteArrayInputStream(fContent.getBytes()); - } - }; - - private static final String PREFIX= CompareUIPlugin.PLUGIN_ID + "."; //$NON-NLS-1$ - public static final String OPEN_STRUCTURE_COMPARE= PREFIX + "OpenStructureCompare"; //$NON-NLS-1$ - public static final String SYNCHRONIZE_SCROLLING= PREFIX + "SynchronizeScrolling"; //$NON-NLS-1$ - public static final String SHOW_PSEUDO_CONFLICTS= PREFIX + "ShowPseudoConflicts"; //$NON-NLS-1$ - public static final String INITIALLY_SHOW_ANCESTOR_PANE= PREFIX + "InitiallyShowAncestorPane"; //$NON-NLS-1$ - public static final String PREF_SAVE_ALL_EDITORS= PREFIX + "SaveAllEditors"; //$NON-NLS-1$ - public static final String SHOW_MORE_INFO= PREFIX + "ShowMoreInfo"; //$NON-NLS-1$ - public static final String IGNORE_WHITESPACE= PREFIX + "IgnoreWhitespace"; //$NON-NLS-1$ - //public static final String USE_SPLINES= PREFIX + "UseSplines"; //$NON-NLS-1$ - public static final String USE_SINGLE_LINE= PREFIX + "UseSingleLine"; //$NON-NLS-1$ - //public static final String USE_RESOLVE_UI= PREFIX + "UseResolveUI"; //$NON-NLS-1$ - - - private TextMergeViewer fPreviewViewer; - private IPropertyChangeListener fPreferenceChangeListener; - private CompareConfiguration fCompareConfiguration; - private OverlayPreferenceStore fOverlayStore; - private Map fCheckBoxes= new HashMap(); - private SelectionListener fCheckBoxListener; - - - public final OverlayPreferenceStore.OverlayKey[] fKeys= new OverlayPreferenceStore.OverlayKey[] { - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, OPEN_STRUCTURE_COMPARE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SYNCHRONIZE_SCROLLING), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_PSEUDO_CONFLICTS), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, INITIALLY_SHOW_ANCESTOR_PANE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_MORE_INFO), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IGNORE_WHITESPACE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PREF_SAVE_ALL_EDITORS), - - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT), - - //new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_SPLINES), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_SINGLE_LINE), - //new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_RESOLVE_UI), - }; - - - public static void initDefaults(IPreferenceStore store) { - store.setDefault(OPEN_STRUCTURE_COMPARE, true); - store.setDefault(SYNCHRONIZE_SCROLLING, true); - store.setDefault(SHOW_PSEUDO_CONFLICTS, false); - store.setDefault(INITIALLY_SHOW_ANCESTOR_PANE, false); - store.setDefault(SHOW_MORE_INFO, false); - store.setDefault(IGNORE_WHITESPACE, false); - store.setDefault(PREF_SAVE_ALL_EDITORS, false); - //store.setDefault(USE_SPLINES, false); - store.setDefault(USE_SINGLE_LINE, true); - //store.setDefault(USE_RESOLVE_UI, false); - - store.setDefault(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, true); - } - - public ComparePreferencePage() { - - //setDescription(Utilities.getString("ComparePreferencePage.description")); //$NON-NLS-1$ - - setPreferenceStore(CompareUIPlugin.getDefault().getPreferenceStore()); - - fOverlayStore= new OverlayPreferenceStore(getPreferenceStore(), fKeys); - fPreferenceChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - String key= event.getProperty(); - if (key.equals(INITIALLY_SHOW_ANCESTOR_PANE)) { - boolean b= fOverlayStore.getBoolean(INITIALLY_SHOW_ANCESTOR_PANE); - if (fCompareConfiguration != null) { - fCompareConfiguration.setProperty(INITIALLY_SHOW_ANCESTOR_PANE, new Boolean(b)); - } - } - } - }; - fOverlayStore.addPropertyChangeListener(fPreferenceChangeListener); - } - - /* - * @see IWorkbenchPreferencePage#init() - */ - public void init(IWorkbench workbench) { - } - - /* - * @see PreferencePage#performOk() - */ - public boolean performOk() { - fOverlayStore.propagate(); - return true; - } - - /* - * @see PreferencePage#performDefaults() - */ - protected void performDefaults() { - - fOverlayStore.loadDefaults(); - initializeFields(); - - super.performDefaults(); - } - - /* - * @see DialogPage#dispose() - */ - public void dispose() { - - if (fOverlayStore != null) { - if (fPreferenceChangeListener != null) { - fOverlayStore.removePropertyChangeListener(fPreferenceChangeListener); - fPreferenceChangeListener= null; - } - fOverlayStore.stop(); - fOverlayStore= null; - } - - super.dispose(); - } - - static public boolean getSaveAllEditors() { - IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore(); - return store.getBoolean(PREF_SAVE_ALL_EDITORS); - } - - static public void setSaveAllEditors(boolean value) { - IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore(); - store.setValue(PREF_SAVE_ALL_EDITORS, value); - } - - /* - * @see PreferencePage#createContents(Composite) - */ - protected Control createContents(Composite parent) { - - WorkbenchHelp.setHelp(parent, ICompareContextIds.COMPARE_PREFERENCE_PAGE); - - fOverlayStore.load(); - fOverlayStore.start(); - - TabFolder folder= new TabFolder(parent, SWT.NONE); - folder.setLayout(new TabFolderLayout()); - folder.setLayoutData(new GridData(GridData.FILL_BOTH)); - - TabItem item= new TabItem(folder, SWT.NONE); - item.setText(Utilities.getString("ComparePreferencePage.generalTab.label")); //$NON-NLS-1$ - //item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); - item.setControl(createGeneralPage(folder)); - - item= new TabItem(folder, SWT.NONE); - item.setText(Utilities.getString("ComparePreferencePage.textCompareTab.label")); //$NON-NLS-1$ - //item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); - item.setControl(createTextComparePage(folder)); - - initializeFields(); - Dialog.applyDialogFont(folder); - return folder; - } - - private Control createGeneralPage(Composite parent) { - Composite composite= new Composite(parent, SWT.NULL); - GridLayout layout= new GridLayout(); - layout.numColumns= 1; - composite.setLayout(layout); - - addCheckBox(composite, "ComparePreferencePage.structureCompare.label", OPEN_STRUCTURE_COMPARE, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.showMoreInfo.label", SHOW_MORE_INFO, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.ignoreWhitespace.label", IGNORE_WHITESPACE, 0); //$NON-NLS-1$ - - // a spacer - new Label(composite, SWT.NONE); - - addCheckBox(composite, "ComparePreferencePage.saveBeforePatching.label", PREF_SAVE_ALL_EDITORS, 0); //$NON-NLS-1$ - - return composite; - } - - private Control createTextComparePage(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - GridLayout layout= new GridLayout(); - layout.numColumns= 1; - composite.setLayout(layout); - - addCheckBox(composite, "ComparePreferencePage.synchronizeScrolling.label", SYNCHRONIZE_SCROLLING, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.initiallyShowAncestorPane.label", INITIALLY_SHOW_ANCESTOR_PANE, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.showPseudoConflicts.label", SHOW_PSEUDO_CONFLICTS, 0); //$NON-NLS-1$ - - //addCheckBox(composite, "ComparePreferencePage.useSplines.label", USE_SPLINES, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.useSingleLine.label", USE_SINGLE_LINE, 0); //$NON-NLS-1$ - //addCheckBox(composite, "ComparePreferencePage.useResolveUI.label", USE_RESOLVE_UI, 0); //$NON-NLS-1$ - - // a spacer - new Label(composite, SWT.NONE); - - Label previewLabel= new Label(composite, SWT.NULL); - previewLabel.setText(Utilities.getString("ComparePreferencePage.preview.label")); //$NON-NLS-1$ - - Control previewer= createPreviewer(composite); - GridData gd= new GridData(GridData.FILL_BOTH); - gd.widthHint= convertWidthInCharsToPixels(60); - gd.heightHint= convertHeightInCharsToPixels(13); - previewer.setLayoutData(gd); - - return composite; - } - - private Control createPreviewer(Composite parent) { - - fCompareConfiguration= new CompareConfiguration(fOverlayStore); - fCompareConfiguration.setAncestorLabel(Utilities.getString("ComparePreferencePage.ancestor.label")); //$NON-NLS-1$ - - fCompareConfiguration.setLeftLabel(Utilities.getString("ComparePreferencePage.left.label")); //$NON-NLS-1$ - fCompareConfiguration.setLeftEditable(false); - - fCompareConfiguration.setRightLabel(Utilities.getString("ComparePreferencePage.right.label")); //$NON-NLS-1$ - fCompareConfiguration.setRightEditable(false); - - fPreviewViewer= new TextMergeViewer(parent, SWT.BORDER, fCompareConfiguration); - - fPreviewViewer.setInput( - new DiffNode(Differencer.CONFLICTING, - new FakeInput("previewAncestor.txt"), //$NON-NLS-1$ - new FakeInput("previewLeft.txt"), //$NON-NLS-1$ - new FakeInput("previewRight.txt") //$NON-NLS-1$ - ) - ); - - Control c= fPreviewViewer.getControl(); - c.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fCompareConfiguration != null) - fCompareConfiguration.dispose(); - } - }); - - return c; - } - - private void initializeFields() { - - Iterator e= fCheckBoxes.keySet().iterator(); - while (e.hasNext()) { - Button b= (Button) e.next(); - String key= (String) fCheckBoxes.get(b); - b.setSelection(fOverlayStore.getBoolean(key)); - } - } - - // overlay stuff - - private Button addCheckBox(Composite parent, String labelKey, String key, int indentation) { - - String label= Utilities.getString(labelKey); - - Button checkBox= new Button(parent, SWT.CHECK); - checkBox.setText(label); - - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalIndent= indentation; - gd.horizontalSpan= 2; - checkBox.setLayoutData(gd); - - if (fCheckBoxListener == null) { - fCheckBoxListener= new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - Button button= (Button) e.widget; - fOverlayStore.setValue((String) fCheckBoxes.get(button), button.getSelection()); - } - }; - } - checkBox.addSelectionListener(fCheckBoxListener); - - fCheckBoxes.put(checkBox, key); - - return checkBox; - } - - private String loadPreviewContentFromFile(String 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 f05c019bd..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java +++ /dev/null @@ -1,879 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.MalformedURLException; -import java.lang.reflect.InvocationTargetException; -import java.util.*; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.preference.IPreferenceStore; - -import org.eclipse.core.runtime.*; -import org.eclipse.ui.model.IWorkbenchAdapter; -import org.eclipse.ui.*; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.ui.plugin.AbstractUIPlugin; - - -/** - * The Compare UI plug-in defines the entry point to initiate a configurable - * compare operation on arbitrary resources. The result of the compare - * is opened into a compare editor where the details can be browsed and - * edited in dynamically selected structure and content viewers. - * <p> - * The Compare UI provides a registry for content and structure compare viewers, - * which is initialized from extensions contributed to extension points - * declared by this plug-in. - * <p> - * This class is the plug-in runtime class for the - * <code>"org.eclipse.compare"</code> plug-in. - * </p> - */ -public final class CompareUIPlugin extends AbstractUIPlugin { - - public static final String DTOOL_NEXT= "dlcl16/next_nav.gif"; //$NON-NLS-1$ - public static final String CTOOL_NEXT= "clcl16/next_nav.gif"; //$NON-NLS-1$ - public static final String ETOOL_NEXT= "elcl16/next_nav.gif"; //$NON-NLS-1$ - - public static final String DTOOL_PREV= "dlcl16/prev_nav.gif"; //$NON-NLS-1$ - public static final String CTOOL_PREV= "clcl16/prev_nav.gif"; //$NON-NLS-1$ - public static final String ETOOL_PREV= "elcl16/prev_nav.gif"; //$NON-NLS-1$ - - /** Status code describing an internal error */ - public static final int INTERNAL_ERROR= 1; - - private static boolean NORMALIZE_CASE= true; - - private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$ - private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$ - - public static final String PLUGIN_ID= "org.eclipse.compare"; //$NON-NLS-1$ - - private static final String STRUCTURE_CREATOR_EXTENSION_POINT= "structureCreators"; //$NON-NLS-1$ - private static final String STRUCTURE_MERGEVIEWER_EXTENSION_POINT= "structureMergeViewers"; //$NON-NLS-1$ - private static final String CONTENT_MERGEVIEWER_EXTENSION_POINT= "contentMergeViewers"; //$NON-NLS-1$ - private static final String CONTENT_VIEWER_EXTENSION_POINT= "contentViewers"; //$NON-NLS-1$ - - private static final String COMPARE_EDITOR= PLUGIN_ID + ".CompareEditor"; //$NON-NLS-1$ - - private static final String STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME= "StructureViewerAliases"; //$NON-NLS-1$ - - /** Maps type to icons */ - private static Map fgImages= new Hashtable(10); - /** Maps type to ImageDescriptors */ - private static Map fgImageDescriptors= new Hashtable(10); - /** Maps ImageDescriptors to Images */ - private static Map fgImages2= new Hashtable(10); - - private static Map fgStructureCreators= new Hashtable(10); - private static Map fgStructureViewerDescriptors= new Hashtable(10); - private static Map fgStructureViewerAliases= new Hashtable(10); - private static Map fgContentViewerDescriptors= new Hashtable(10); - private static Map fgContentMergeViewerDescriptors= new Hashtable(10); - - private static List fgDisposeOnShutdownImages= new ArrayList(); - - private static ResourceBundle fgResourceBundle; - - private static CompareUIPlugin fgComparePlugin; - - /** - * Creates the <code>CompareUIPlugin</code> object and registers all - * structure creators, content merge viewers, and structure merge viewers - * contributed to this plug-in's extension points. - * <p> - * Note that instances of plug-in runtime classes are automatically created - * by the platform in the course of plug-in activation. - * </p> - * - * @param descriptor the plug-in descriptor - */ - public CompareUIPlugin(IPluginDescriptor descriptor) { - super(descriptor); - - fgComparePlugin= this; - - fgResourceBundle= descriptor.getResourceBundle(); - - registerExtensions(); - - initPreferenceStore(); - } - - /** - * @see AbstractUIPlugin#initializeDefaultPreferences - */ - protected void initializeDefaultPreferences(IPreferenceStore store) { - super.initializeDefaultPreferences(store); - - ComparePreferencePage.initDefaults(store); - } - - /** - * Registers all structure creators, content merge viewers, and structure merge viewers - * that are found in the XML plugin files. - */ - private void registerExtensions() { - IPluginRegistry registry= Platform.getPluginRegistry(); - - // collect all IStructureCreators - IConfigurationElement[] elements= registry.getConfigurationElementsFor(PLUGIN_ID, STRUCTURE_CREATOR_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - final IConfigurationElement conf= elements[i]; - String extensions= conf.getAttribute(EXTENSIONS_ATTRIBUTE); - registerStructureCreator(extensions, - new IStructureCreatorDescriptor() { - public IStructureCreator createStructureCreator() { - try { - return (IStructureCreator) conf.createExecutableExtension(CLASS_ATTRIBUTE); - } catch (CoreException ex) { - } - return null; - } - } - ); - } - - // collect all viewers which define the structure mergeviewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, STRUCTURE_MERGEVIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerStructureViewerDescriptor(desc.getExtension(), desc); - } - - // collect all viewers which define the content mergeviewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, CONTENT_MERGEVIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerContentMergeViewerDescriptor(desc.getExtension(), desc); - } - - // collect all viewers which define the content viewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, CONTENT_VIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerContentViewerDescriptor(desc.getExtension(), desc); - } - } - - /** - * Returns the singleton instance of this plug-in runtime class. - * - * @return the compare plug-in instance - */ - public static CompareUIPlugin getDefault() { - return fgComparePlugin; - } - - /** - * Returns this plug-in's resource bundle. - * - * @return the plugin's resource bundle - */ - public static ResourceBundle getResourceBundle() { - return fgResourceBundle; - } - - public static IWorkbench getActiveWorkbench() { - CompareUIPlugin plugin= getDefault(); - if (plugin == null) - return null; - return plugin.getWorkbench(); - } - - public static IWorkbenchWindow getActiveWorkbenchWindow() { - IWorkbench workbench= getActiveWorkbench(); - if (workbench == null) - return null; - return workbench.getActiveWorkbenchWindow(); - } - - /** - * Returns the active workkbench page or <code>null</code> if - * no active workkbench page can be determined. - * - * @return the active workkbench page or <code>null</code> if - * no active workkbench page can be determined - */ - private static IWorkbenchPage getActivePage() { - IWorkbenchWindow window= getActiveWorkbenchWindow(); - if (window == null) - return null; - return window.getActivePage(); - } - - /** - * Returns the SWT Shell of the active workbench window or <code>null</code> if - * no workbench window is active. - * - * @return the SWT Shell of the active workbench window, or <code>null</code> if - * no workbench window is active - */ - public static Shell getShell() { - IWorkbenchWindow window= getActiveWorkbenchWindow(); - if (window == null) - return null; - return window.getShell(); - } - - /** - * Registers the given image for being disposed when this plug-in is shutdown. - * - * @param image the image to register for disposal - */ - public static void disposeOnShutdown(Image image) { - if (image != null) - fgDisposeOnShutdownImages.add(image); - } - - /* (non-Javadoc) - * Method declared on Plugin. - * Frees all resources of the compare plug-in. - */ - public void shutdown() throws CoreException { - - /* - * Converts the aliases into a single string before they are stored - * in the preference store. - * The format is: - * <key> '.' <alias> ' ' <key> '.' <alias> ... - */ - IPreferenceStore ps= getPreferenceStore(); - if (ps != null) { - StringBuffer sb= new StringBuffer(); - Iterator iter= fgStructureViewerAliases.keySet().iterator(); - while (iter.hasNext()) { - String key= (String) iter.next(); - String alias= (String) fgStructureViewerAliases.get(key); - sb.append(key); - sb.append('.'); - sb.append(alias); - sb.append(' '); - } - ps.setValue(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME, sb.toString()); - } - - super.shutdown(); - - if (fgDisposeOnShutdownImages != null) { - Iterator i= fgDisposeOnShutdownImages.iterator(); - while (i.hasNext()) { - Image img= (Image) i.next(); - if (!img.isDisposed()) - img.dispose(); - } - fgImages= null; - } - } - - /** - * Performs the comparison described by the given input and opens a - * compare editor on the result. - * - * @param input the input on which to open the compare editor - * @see CompareEditorInput - */ - public void openCompareEditor(CompareEditorInput input, IWorkbenchPage page) { - - if (compareResultOK(input)) { - if (page == null) - page= getActivePage(); - if (page != null) { - try { - page.openEditor(input, COMPARE_EDITOR); - } catch (PartInitException e) { - MessageDialog.openError(getShell(), Utilities.getString("CompareUIPlugin.openEditorError"), e.getMessage()); //$NON-NLS-1$ - } - } else { - MessageDialog.openError(getShell(), - Utilities.getString("CompareUIPlugin.openEditorError"), //$NON-NLS-1$ - Utilities.getString("CompareUIPlugin.noActiveWorkbenchPage")); //$NON-NLS-1$ - } - } - } - - /** - * Performs the comparison described by the given input and opens a - * compare dialog on the result. - * - * @param input the input on which to open the compare editor - * @see CompareEditorInput - */ - public void openCompareDialog(final CompareEditorInput input) { - - if (compareResultOK(input)) { - CompareDialog dialog= new CompareDialog(getShell(), input); - dialog.open(); - } - } - - /** - * @return <code>true</code> if compare result is OK to show, <code>false</code> otherwise - */ - private boolean compareResultOK(CompareEditorInput input) { - final Shell shell= getShell(); - try { - - // run operation in separate thread and make it canceable - new ProgressMonitorDialog(shell).run(true, true, input); - - String message= input.getMessage(); - if (message != null) { - MessageDialog.openError(shell, Utilities.getString("CompareUIPlugin.compareFailed"), message); //$NON-NLS-1$ - return false; - } - - if (input.getCompareResult() == null) { - MessageDialog.openInformation(shell, Utilities.getString("CompareUIPlugin.dialogTitle"), Utilities.getString("CompareUIPlugin.noDifferences")); //$NON-NLS-2$ //$NON-NLS-1$ - return false; - } - - return true; - - } catch (InterruptedException x) { - // cancelled by user - } catch (InvocationTargetException x) { - MessageDialog.openError(shell, Utilities.getString("CompareUIPlugin.compareFailed"), x.getTargetException().getMessage()); //$NON-NLS-1$ - } - return false; - } - - /** - * Registers an image for the given type. - */ - private static void registerImage(String type, Image image, boolean dispose) { - fgImages.put(normalizeCase(type), image); - if (image != null && dispose) { - fgDisposeOnShutdownImages.add(image); - } - } - - /** - * Registers an image descriptor for the given type. - * - * @param type the type - * @param descriptor the image descriptor - */ - public static void registerImageDescriptor(String type, ImageDescriptor descriptor) { - fgImageDescriptors.put(normalizeCase(type), descriptor); - } - - public static ImageDescriptor getImageDescriptor(String relativePath) { - - URL installURL= null; - if (fgComparePlugin != null) - installURL= fgComparePlugin.getDescriptor().getInstallURL(); - - if (installURL != null) { - try { - URL url= new URL(installURL, Utilities.getIconPath(null) + relativePath); - return ImageDescriptor.createFromURL(url); - } catch (MalformedURLException e) { - Assert.isTrue(false); - } - } - return null; - } - - /** - * Returns a shared image for the given type, or a generic image if none - * has been registered for the given type. - * <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[] types= getTypes(input); - if (!isHomogenous(types)) - return null; - String type= types[0]; - - 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[] types= getTypes(input); - String type= null; - if (isHomogenous(types)) - type= types[0]; - - if (ITypedElement.FOLDER_TYPE.equals(type)) - return null; - - if (type == null) { - int n= 0; - for (int i= 0; i < types.length; i++) - if (!ITypedElement.UNKNOWN_TYPE.equals(types[i])) { - n++; - if (type == null) - type= types[i]; // remember the first known type - } - if (n > 1) // don't use the type if there were more than one - type= 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; - } - - private static String[] getTypes(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++]= normalizeCase(type); - } - if (left != null) { - String type= left.getType(); - if (type != null) - types[cnt++]= normalizeCase(type); - } - if (right != null) { - String type= right.getType(); - if (type != null) - types[cnt++]= normalizeCase(type); - } - - String[] result= new String[cnt]; - for (int i= 0; i < cnt; i++) - result[i]= types[i]; - return result; - } - - /** - * 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 boolean isHomogenous(String[] types) { - switch (types.length) { - case 1: - return true; - case 2: - return types[0].equals(types[1]); - case 3: - return types[0].equals(types[1]) && types[1].equals(types[2]); - } - return false; - } - - /** - * 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 String normalizeCase(String s) { - if (NORMALIZE_CASE && s != null) - return s.toUpperCase(); - return s; - } - - //---- alias mgmt - - private void initPreferenceStore() { - //System.out.println("initPreferenceStore"); - IPreferenceStore ps= getPreferenceStore(); - if (ps != null) { - String aliases= ps.getString(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME); - //System.out.println(" <" + aliases + ">"); - if (aliases != null && aliases.length() > 0) { - StringTokenizer st= new StringTokenizer(aliases, " "); //$NON-NLS-1$ - while (st.hasMoreTokens()) { - String pair= st.nextToken(); - int pos= pair.indexOf('.'); - if (pos > 0) { - String key= pair.substring(0, pos); - String alias= pair.substring(pos+1); - fgStructureViewerAliases.put(key, alias); - //System.out.println("<" + key + "><" + alias + ">"); - } - } - } - } - } - - public static void addStructureViewerAlias(String type, String alias) { - //System.out.println("addStructureViewerAlias: " + type + " " + alias); - fgStructureViewerAliases.put(normalizeCase(alias), normalizeCase(type)); - } - - public static void removeAllStructureViewerAliases(String type) { - String t= normalizeCase(type); - Set entrySet= fgStructureViewerAliases.entrySet(); - for (Iterator iter= entrySet.iterator(); iter.hasNext(); ) { - Map.Entry entry= (Map.Entry)iter.next(); - if (entry.getValue().equals(t)) - iter.remove(); - } - } - - /** - * Returns an array of all editors that have an unsaved content. If the identical content is - * presented in more than one editor, only one of those editor parts is part of the result. - * - * @return an array of all dirty editor parts. - */ - public static IEditorPart[] getDirtyEditors() { - Set inputs= new HashSet(); - List result= new ArrayList(0); - IWorkbench workbench= getDefault().getWorkbench(); - IWorkbenchWindow[] windows= workbench.getWorkbenchWindows(); - for (int i= 0; i < windows.length; i++) { - IWorkbenchPage[] pages= windows[i].getPages(); - for (int x= 0; x < pages.length; x++) { - IEditorPart[] editors= pages[x].getDirtyEditors(); - for (int z= 0; z < editors.length; z++) { - IEditorPart ep= editors[z]; - IEditorInput input= ep.getEditorInput(); - if (!inputs.contains(input)) { - inputs.add(input); - result.add(ep); - } - } - } - } - return (IEditorPart[])result.toArray(new IEditorPart[result.size()]); - } - - public static void log(Throwable e) { - log(new Status(IStatus.ERROR, getPluginId(), INTERNAL_ERROR, CompareMessages.getString("ComparePlugin.internal_error"), e)); //$NON-NLS-1$ - } - - public static void log(IStatus status) { - getDefault().getLog().log(status); - } - - public static String getPluginId() { - return getDefault().getDescriptor().getUniqueIdentifier(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java deleted file mode 100644 index f8cef54d1..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -public class CompareWithEditionAction extends EditionAction { - - public CompareWithEditionAction() { - super(false, "org.eclipse.compare.internal.CompareWithEditionAction"); //$NON-NLS-1$ - this.fHelpContextId= ICompareContextIds.COMPARE_WITH_EDITION_DIALOG; - } -} - 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 154531afa..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties +++ /dev/null @@ -1,38 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)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 1c17ded85..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.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 f8c697f11..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java +++ /dev/null @@ -1,191 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.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 b2db19190..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; - -import 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 d610d0c02..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java +++ /dev/null @@ -1,267 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.InputStream; -import java.io.ByteArrayInputStream; -import java.util.ArrayList; -import java.util.ResourceBundle; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.BadLocationException; - -import org.eclipse.ui.*; -import org.eclipse.ui.part.FileEditorInput; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.ui.texteditor.IDocumentProvider; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -import org.eclipse.compare.*; -import org.eclipse.compare.ITypedElement; -import org.eclipse.compare.IStreamContentAccessor; - - -public class EditionAction implements IActionDelegate { - - /** - * Implements the IStreamContentAccessor and ITypedElement protocols - * for a Document. - */ - class DocumentBufferNode implements ITypedElement, IStreamContentAccessor { - - private IDocument fDocument; - private 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; - protected String fHelpContextId; - - EditionAction(boolean replaceMode, String bundleName) { - fReplaceMode= replaceMode; - fBundleName= bundleName; - } - - public final void selectionChanged(IAction action, ISelection selection) { - fSelection= selection; - if (action != null) { - IFile[] files= getFiles(selection, fReplaceMode); - action.setEnabled(files.length == 1); // we don't support multiple selection for now - } - } - - public void run(IAction action) { - IFile[] files= getFiles(fSelection, fReplaceMode); - for (int i= 0; i < files.length; i++) - doFromHistory(files[i]); - } - - private void doFromHistory(final IFile file) { - - ResourceBundle bundle= ResourceBundle.getBundle(fBundleName); - String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$ - - Shell parentShell= CompareUIPlugin.getShell(); - - IFileState states[]= null; - try { - states= file.getHistory(null); - } catch (CoreException ex) { - MessageDialog.openError(parentShell, title, ex.getMessage()); - return; - } - - if (states == null || states.length <= 0) { - String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$ - MessageDialog.openInformation(parentShell, title, msg); - return; - } - - ITypedElement base= new ResourceNode(file); - - IDocument document= getDocument(file); - ITypedElement target= base; - if (document != null) - target= new DocumentBufferNode(document, file); - - ITypedElement[] editions= new ITypedElement[states.length+1]; - editions[0]= base; - for (int i= 0; i < states.length; i++) - editions[i+1]= new HistoryItem(base, states[i]); - - EditionSelectionDialog d= new EditionSelectionDialog(parentShell, bundle); - d.setEditionTitleArgument(file.getName()); - d.setEditionTitleImage(CompareUIPlugin.getImage(file)); - //d.setHideIdenticalEntries(false); - if (fHelpContextId != null) - d.setHelpContextId(fHelpContextId); - - if (fReplaceMode) { - - ITypedElement ti= null; - if (fPrevious) - ti= d.selectPreviousEdition(target, editions, null); - else - ti= d.selectEdition(target, editions, null); - - if (ti instanceof IStreamContentAccessor) { - IStreamContentAccessor sa= (IStreamContentAccessor)ti; - try { - - if (document != null) - updateDocument(document, sa); - else - updateWorkspace(bundle, parentShell, sa, file); - - } catch (InterruptedException x) { - // Do nothing. Operation has been canceled by user. - - } catch (InvocationTargetException x) { - String reason= x.getTargetException().getMessage(); - MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason)); //$NON-NLS-1$ - } - } - } else { - d.setCompareMode(true); - - d.selectEdition(target, editions, null); - } - } - - private void updateWorkspace(final ResourceBundle bundle, Shell shell, - final IStreamContentAccessor sa, final IFile file) - throws InvocationTargetException, InterruptedException { - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws InvocationTargetException { - try { - String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$ - pm.beginTask(taskName, IProgressMonitor.UNKNOWN); - file.setContents(sa.getContents(), false, true, pm); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - pm.done(); - } - } - }; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell); - pmdialog.run(false, true, operation); - } - - private void updateDocument(IDocument document, IStreamContentAccessor sa) throws InvocationTargetException { - try { - InputStream is= sa.getContents(); - String text= Utilities.readString(is); - document.replace(0, document.getLength(), text); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } catch (BadLocationException e) { - throw new InvocationTargetException(e); - } - } - - private IDocument getDocument(IFile file) { - IWorkbench wb= PlatformUI.getWorkbench(); - if (wb == null) - return null; - IWorkbenchWindow[] ws= wb.getWorkbenchWindows(); - if (ws == null) - return null; - - FileEditorInput test= new FileEditorInput(file); - - for (int i= 0; i < ws.length; i++) { - IWorkbenchWindow w= ws[i]; - IWorkbenchPage[] wps= w.getPages(); - if (wps != null) { - for (int j= 0; j < wps.length; j++) { - IWorkbenchPage wp= wps[j]; - IEditorPart ep= wp.findEditor(test); - if (ep instanceof ITextEditor) { - ITextEditor te= (ITextEditor) ep; - IDocumentProvider dp= te.getDocumentProvider(); - if (dp != null) { - IDocument doc= dp.getDocument(ep); - if (doc != null) - return doc; - } - } - } - } - } - return null; - } - - private IFile[] getFiles(ISelection selection, boolean modifiable) { - ArrayList result= new ArrayList(); - Object[] s= Utilities.toArray(selection); - for (int i= 0; i < s.length; i++) { - Object o= s[i]; - IFile file= null; - if (o instanceof IFile) { - file= (IFile) o; - } else if (o instanceof IAdaptable) { - IAdaptable a= (IAdaptable) o; - Object adapter= a.getAdapter(IResource.class); - if (adapter instanceof IFile) - file= (IFile) adapter; - } - if (file != null) { - if (modifiable) { - if (!file.isReadOnly()) - result.add(file); - } else { - result.add(file); - } - } - } - return (IFile[]) result.toArray(new IFile[result.size()]); - } - - -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java deleted file mode 100644 index 3ea3ba5f8..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.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/ICompareContextIds.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java deleted file mode 100644 index a6df241e4..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.compare.CompareUI; - -/** - * Help context ids for the Compare UI. - * <p> - * This interface contains constants only; it is not intended to be implemented - * or extended. - * </p> - * - */ -public interface ICompareContextIds { - - public static final String PREFIX= CompareUI.PLUGIN_ID + '.'; - - // Dialogs - public static final String EDITION_DIALOG= PREFIX + "edition_dialog_context"; //$NON-NLS-1$ - - public static final String COMPARE_EDITOR= PREFIX + "compare_editor_context"; //$NON-NLS-1$ - public static final String PATCH_INPUT_WIZARD_PAGE= PREFIX + "patch_input_wizard_page_context"; //$NON-NLS-1$ - public static final String PATCH_PREVIEW_WIZARD_PAGE= PREFIX + "patch_preview_wizard_page_context"; //$NON-NLS-1$ - public static final String ADD_FROM_HISTORY_DIALOG= PREFIX + "add_from_history_dialog_context"; //$NON-NLS-1$ - public static final String COMPARE_DIALOG= PREFIX + "compare_dialog_context"; //$NON-NLS-1$ - public static final String COMPARE_WITH_EDITION_DIALOG= PREFIX + "compare_with_edition_dialog_context"; //$NON-NLS-1$ - public static final String REPLACE_WITH_EDITION_DIALOG= PREFIX + "replace_with_edition_dialog_context"; //$NON-NLS-1$ - - // Viewer - public static final String TEXT_MERGE_VIEW= PREFIX + "text_merge_view_context"; //$NON-NLS-1$ - public static final String IMAGE_COMPARE_VIEW= PREFIX + "image_compare_view_context"; //$NON-NLS-1$ - public static final String BINARY_COMPARE_VIEW= PREFIX + "binary_compare_view_context"; //$NON-NLS-1$ - public static final String DIFF_VIEW= PREFIX + "diff_view_context"; //$NON-NLS-1$ - - // Actions - public static final String GLOBAL_NEXT_DIFF_ACTION= PREFIX + "global_next_diff_action_context"; //$NON-NLS-1$ - public static final String GLOBAL_PREVIOUS_DIFF_ACTION= PREFIX + "global_previous_diff_action_context"; //$NON-NLS-1$ - public static final String NEXT_DIFF_ACTION= PREFIX + "next_diff_action_context"; //$NON-NLS-1$ - public static final String PREVIOUS_DIFF_ACTION= PREFIX + "previous_diff_action_context"; //$NON-NLS-1$ - public static final String IGNORE_WHITESPACE_ACTION= PREFIX + "ignore_whitespace_action_context"; //$NON-NLS-1$ - - // Preference page - public static final String COMPARE_PREFERENCE_PAGE= PREFIX + "compare_preference_page_context"; //$NON-NLS-1$ -} 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 3e64e2e9c..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -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/IOpenable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java deleted file mode 100644 index 013885909..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -/* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ -public interface IOpenable { - - static final String OPENABLE_PROPERTY= "org.eclipse.compare.internal.Openable"; //$NON-NLS-1$ - - /** - * Opens the selected element - */ - void openSelected(); -} 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 a15db7c68..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.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 f5a845e80..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.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 2dda66e0d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.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 b6b0fa14d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.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 f598f89b8..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.*; -import org.eclipse.swt.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 - */ - 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 - */ - 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 6007e7a21..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.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.ui.help.WorkbenchHelp; - -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); - - WorkbenchHelp.setHelp(parent, ICompareContextIds.IMAGE_COMPARE_VIEW); - - 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 ae0ab7813..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.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 cb23466b0..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties +++ /dev/null @@ -1,32 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)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 b39150c19..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.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); - } -} 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 5df991bc3..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.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); - applyDialogFont(parent); - 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 939bf58d3..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java +++ /dev/null @@ -1,392 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.graphics.Font; - -import org.eclipse.jface.action.*; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.text.*; -import org.eclipse.jface.text.source.*; - -import org.eclipse.jface.viewers.SelectionChangedEvent; -/** - * Extends the JFace SourceViewer with some convenience methods. - */ -public class MergeSourceViewer extends SourceViewer - implements ISelectionChangedListener, ITextListener, IMenuListener { - - public static final String UNDO_ID= "undo"; //$NON-NLS-1$ - public static final String REDO_ID= "redo"; //$NON-NLS-1$ - public static final String CUT_ID= "cut"; //$NON-NLS-1$ - public static final String COPY_ID= "copy"; //$NON-NLS-1$ - public static final String PASTE_ID= "paste"; //$NON-NLS-1$ - public static final String DELETE_ID= "delete"; //$NON-NLS-1$ - public static final String SELECT_ALL_ID= "selectAll"; //$NON-NLS-1$ - public static final String SAVE_ID= "save"; //$NON-NLS-1$ - - class TextOperationAction extends MergeViewerAction { - - private int fOperationCode; - - TextOperationAction(int operationCode, boolean mutable, boolean selection, boolean content) { - super(mutable, selection, content); - fOperationCode= operationCode; - update(); - } - - public void run() { - if (isEnabled()) - doOperation(fOperationCode); - } - - public boolean isEnabled() { - return fOperationCode != -1 && canDoOperation(fOperationCode); - } - - public void update() { - this.setEnabled(isEnabled()); - } - } - - private ResourceBundle fResourceBundle; - private Position fRegion; - private boolean fEnabled= true; - private HashMap fActions= new HashMap(); - - private boolean fAddSaveAction= true; - - - public MergeSourceViewer(Composite parent, ResourceBundle bundle) { - super(parent, null, SWT.H_SCROLL + SWT.V_SCROLL); - - fResourceBundle= bundle; - - MenuManager menu= new MenuManager(); - menu.setRemoveAllWhenShown(true); - menu.addMenuListener(this); - StyledText te= getTextWidget(); - te.setMenu(menu.createContextMenu(te)); - } - - public void hideSaveAction() { - fAddSaveAction= false; - } - - public void setFont(Font font) { - StyledText te= getTextWidget(); - if (te != null) - te.setFont(font); - } - - public void setBackgroundColor(Color color) { - StyledText te= getTextWidget(); - if (te != null) - te.setBackground(color); - } - - public void setEnabled(boolean enabled) { - if (enabled != fEnabled) { - fEnabled= enabled; - StyledText c= getTextWidget(); - if (c != null) { - c.setEnabled(enabled); - Display d= c.getDisplay(); - c.setBackground(enabled ? d.getSystemColor(SWT.COLOR_LIST_BACKGROUND) : null); - } - } - } - - public boolean getEnabled() { - return fEnabled; - } - - public void setRegion(Position region) { - fRegion= region; - } - - public Position getRegion() { - return fRegion; - } - - public boolean isControlOkToUse() { - StyledText t= getTextWidget(); - return t != null && !t.isDisposed(); - } - - public void setSelection(Position position) { - if (position != null) - setSelectedRange(position.getOffset(), position.getLength()); - } - - public void setLineBackground(Position position, Color c) { - StyledText t= getTextWidget(); - if (t != null && !t.isDisposed()) { - Point region= new Point(0, 0); - getLineRange(position, region); - - region.x-= getDocumentRegionOffset(); - - try { - t.setLineBackground(region.x, region.y, c); - } catch (IllegalArgumentException ex) { - } - } - } - - public void resetLineBackground() { - StyledText t= getTextWidget(); - if (t != null && !t.isDisposed()) { - int lines= getLineCount(); - t.setLineBackground(0, lines, null); - } - } - - /** - * Returns number of lines in document region. - */ - public int getLineCount() { - IRegion region= getVisibleRegion(); - - int length= region.getLength(); - if (length == 0) - return 0; - - IDocument doc= getDocument(); - int startLine= 0; - int endLine= 0; - - int start= region.getOffset(); - try { - startLine= doc.getLineOfOffset(start); - } catch(BadLocationException ex) { - } - try { - endLine= doc.getLineOfOffset(start+length); - } catch(BadLocationException ex) { - } - - return endLine-startLine+1; - } - - public int getViewportLines() { - StyledText te= getTextWidget(); - Rectangle clArea= te.getClientArea(); - if (!clArea.isEmpty()) - return clArea.height / te.getLineHeight(); - return 0; - } - - public int getViewportHeight() { - StyledText te= getTextWidget(); - Rectangle clArea= te.getClientArea(); - if (!clArea.isEmpty()) - return clArea.height; - return 0; - } - - /** - * Returns lines - */ - public int getDocumentRegionOffset() { - int start= getVisibleRegion().getOffset(); - IDocument doc= getDocument(); - if (doc != null) { - try { - return doc.getLineOfOffset(start); - } catch(BadLocationException ex) { - } - } - return 0; - } - - public int getVerticalScrollOffset() { - StyledText st= getTextWidget(); - int lineHeight= st.getLineHeight(); - return getTopInset() - ((getDocumentRegionOffset()*lineHeight) + st.getTopPixel()); - } - - /** - * Returns the start line and the number of lines which correspond to the given position. - * Starting line number is 0 based. - */ - public Point getLineRange(Position p, Point region) { - - IDocument doc= getDocument(); - - if (p == null || doc == null) { - region.x= 0; - region.y= 0; - return region; - } - - int start= p.getOffset(); - int length= p.getLength(); - - int startLine= 0; - try { - startLine= doc.getLineOfOffset(start); - } catch (BadLocationException e) { - } - - int lineCount= 0; - - if (length == 0) { -// // if range length is 0 and if range starts a new line -// try { -// if (start == doc.getLineStartOffset(startLine)) { -// lines--; -// } -// } catch (BadLocationException e) { -// lines--; -// } - - } else { - int endLine= 0; - try { - endLine= doc.getLineOfOffset(start + length - 1); // why -1? - } catch (BadLocationException e) { - } - lineCount= endLine-startLine+1; - } - - region.x= startLine; - region.y= lineCount; - return region; - } - - /** - * Scroll TextPart to the given line. - */ - public void vscroll(int line) { - - int srcViewSize= getLineCount(); - int srcExtentSize= getViewportLines(); - - if (srcViewSize > srcExtentSize) { - - if (line < 0) - line= 0; - - int cp= getTopIndex(); - if (cp != line) - setTopIndex(line + getDocumentRegionOffset()); - } - } - - public void addAction(String actionId, MergeViewerAction action) { - fActions.put(actionId, action); - } - - public MergeViewerAction getAction(String actionId) { - MergeViewerAction action= (MergeViewerAction) fActions.get(actionId); - if (action == null) { - action= createAction(actionId); - if (action == null) - return null; - - if (action.isContentDependent()) - addTextListener(this); - if (action.isSelectionDependent()) - addSelectionChangedListener(this); - - Utilities.initAction(action, fResourceBundle, "action." + actionId + "."); //$NON-NLS-1$ //$NON-NLS-2$ - fActions.put(actionId, action); - } - if (action.isEditableDependent() && !isEditable()) - return null; - return action; - } - - protected MergeViewerAction createAction(String actionId) { - if (UNDO_ID.equals(actionId)) - return new TextOperationAction(UNDO, true, false, true); - if (REDO_ID.equals(actionId)) - return new TextOperationAction(REDO, true, false, true); - if (CUT_ID.equals(actionId)) - return new TextOperationAction(CUT, true, true, false); - if (COPY_ID.equals(actionId)) - return new TextOperationAction(COPY, false, true, false); - if (PASTE_ID.equals(actionId)) - return new TextOperationAction(PASTE, true, false, false); - if (DELETE_ID.equals(actionId)) - return new TextOperationAction(DELETE, true, false, false); - if (SELECT_ALL_ID.equals(actionId)) - return new TextOperationAction(SELECT_ALL, false, false, false); - return null; - } - - public void selectionChanged(SelectionChangedEvent event) { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - MergeViewerAction action= (MergeViewerAction) e.next(); - if (action.isSelectionDependent()) - action.update(); - } - } - - public void textChanged(TextEvent event) { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - MergeViewerAction action= (MergeViewerAction) e.next(); - if (action.isContentDependent()) - action.update(); - } - } - - /** - * Allows the viewer to add menus and/or tools to the context menu. - */ - public void menuAboutToShow(IMenuManager menu) { - - menu.add(new Separator("undo")); //$NON-NLS-1$ - addMenu(menu, UNDO_ID); - addMenu(menu, REDO_ID); - - menu.add(new Separator("ccp")); //$NON-NLS-1$ - addMenu(menu, CUT_ID); - addMenu(menu, COPY_ID); - addMenu(menu, PASTE_ID); - addMenu(menu, DELETE_ID); - addMenu(menu, SELECT_ALL_ID); - - menu.add(new Separator("edit")); //$NON-NLS-1$ - menu.add(new Separator("find")); //$NON-NLS-1$ - //addMenu(menu, FIND_ID); - - menu.add(new Separator("save")); //$NON-NLS-1$ - if (fAddSaveAction) - addMenu(menu, SAVE_ID); - - menu.add(new Separator("rest")); //$NON-NLS-1$ - } - - private void addMenu(IMenuManager menu, String actionId) { - IAction action= getAction(actionId); - if (action != null) - menu.add(action); - } - - protected void handleDispose() { - - removeTextListener(this); - removeSelectionChangedListener(this); - - super.handleDispose(); - } -} 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 590ab8696..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.ui.texteditor.IUpdate; -import org.eclipse.jface.action.Action; - - -public abstract class MergeViewerAction extends Action implements IUpdate { - - private boolean fMutable; - private boolean fSelection; - private boolean fContent; - - public MergeViewerAction(boolean mutable, boolean selection, boolean content) { - fMutable= mutable; - fSelection= selection; - fContent= content; - } - - public boolean isSelectionDependent() { - return fSelection; - } - - public boolean isContentDependent() { - return fContent; - } - - public boolean isEditableDependent() { - return fMutable; - } - - public void update() { - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java deleted file mode 100644 index 8002bb55f..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java +++ /dev/null @@ -1,162 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.compare.contentmergeviewer.IMergeViewerContentProvider; - -/** - * Adapts any <code>ContentMergeViewer</code> to work on an <code>ICompareInput</code> - * e.g. a <code>DiffNode</code>. - */ -public class MergeViewerContentProvider implements IMergeViewerContentProvider { - - private CompareConfiguration fCompareConfiguration; - - public MergeViewerContentProvider(CompareConfiguration cc) { - fCompareConfiguration= cc; - } - - public void dispose() { - } - - public void inputChanged(Viewer v, Object o1, Object o2) { - // we are not interested since we have no state - } - - //---- ancestor - - public String getAncestorLabel(Object element) { - return fCompareConfiguration.getAncestorLabel(element); - } - - public Image getAncestorImage(Object element) { - return fCompareConfiguration.getAncestorImage(element); - } - - public Object getAncestorContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getAncestor(); - return null; - } - - public boolean showAncestor(Object element) { - if (element instanceof ICompareInput) - return (((ICompareInput)element).getKind() & Differencer.DIRECTION_MASK) == Differencer.CONFLICTING; - return false; - } - - //---- left - - public String getLeftLabel(Object element) { - return fCompareConfiguration.getLeftLabel(element); - } - - public Image getLeftImage(Object element) { - return fCompareConfiguration.getLeftImage(element); - } - - public Object getLeftContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getLeft(); - return null; - } - - public boolean isLeftEditable(Object element) { - if (element instanceof ICompareInput) { - Object left= ((ICompareInput) element).getLeft(); - if (left == null) { - IDiffElement parent= ((IDiffElement)element).getParent(); - if (parent instanceof ICompareInput) - left= ((ICompareInput) parent).getLeft(); - } - if (left instanceof IEditableContent) - return ((IEditableContent)left).isEditable(); - } - return false; - } - - public void saveLeftContent(Object element, byte[] bytes) { - if (element instanceof ICompareInput) { - ICompareInput node= (ICompareInput) element; - if (bytes != null) { - ITypedElement left= node.getLeft(); - // #9869: problem if left is null (because no resource exists yet) nothing is done! - if (left == null) { - node.copy(false); - left= node.getLeft(); - } - if (left instanceof IEditableContent) - ((IEditableContent)left).setContent(bytes); - if (node instanceof ResourceCompareInput.MyDiffNode) - ((ResourceCompareInput.MyDiffNode)node).fireChange(); - } else { - node.copy(false); - } - } - } - - //---- right - - public String getRightLabel(Object element) { - return fCompareConfiguration.getRightLabel(element); - } - - public Image getRightImage(Object element) { - return fCompareConfiguration.getRightImage(element); - } - - public Object getRightContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getRight(); - return null; - } - - public boolean isRightEditable(Object element) { - if (element instanceof ICompareInput) { - Object right= ((ICompareInput) element).getRight(); - if (right == null) { - IDiffContainer parent= ((IDiffElement)element).getParent(); - if (parent instanceof ICompareInput) - right= ((ICompareInput) parent).getRight(); - } - if (right instanceof IEditableContent) - return ((IEditableContent)right).isEditable(); - } - return false; - } - - public void saveRightContent(Object element, byte[] bytes) { - if (element instanceof ICompareInput) { - ICompareInput node= (ICompareInput) element; - if (bytes != null) { - ITypedElement right= node.getRight(); - // #9869: problem if right is null (because no resource exists yet) nothing is done! - if (right == null) { - node.copy(true); - right= node.getRight(); - } - if (right instanceof IEditableContent) - ((IEditableContent)right).setContent(bytes); - if (node instanceof ResourceCompareInput.MyDiffNode) - ((ResourceCompareInput.MyDiffNode)node).fireChange(); - } else { - node.copy(true); - } - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java deleted file mode 100644 index e35b93acc..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.*; - -import org.eclipse.compare.CompareViewerSwitchingPane; - -/** - * Used whenever the input is null or no viewer can be found. - */ -public class NullViewer extends AbstractViewer { - - private Control fDummy; - - public NullViewer(Composite parent) { - - fDummy= new Tree(parent, SWT.NULL); - - CompareViewerSwitchingPane.clearToolBar(parent); - } - - public Control getControl() { - return fDummy; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java deleted file mode 100644 index 748435654..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java +++ /dev/null @@ -1,451 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceStore; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; - -/** - * An overlaying preference store. - */ -public class OverlayPreferenceStore implements IPreferenceStore { - - - public static final class TypeDescriptor { - private TypeDescriptor() { - } - }; - - public static final TypeDescriptor BOOLEAN= new TypeDescriptor(); - public static final TypeDescriptor DOUBLE= new TypeDescriptor(); - public static final TypeDescriptor FLOAT= new TypeDescriptor(); - public static final TypeDescriptor INT= new TypeDescriptor(); - public static final TypeDescriptor LONG= new TypeDescriptor(); - public static final TypeDescriptor STRING= new TypeDescriptor(); - - public static class OverlayKey { - - TypeDescriptor fDescriptor; - String fKey; - - public OverlayKey(TypeDescriptor descriptor, String key) { - fDescriptor= descriptor; - fKey= key; - } - }; - - private class PropertyListener implements IPropertyChangeListener { - - /* - * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - OverlayKey key= findOverlayKey(event.getProperty()); - if (key != null) - propagateProperty(fParent, key, fStore); - } - }; - - - private IPreferenceStore fParent; - private IPreferenceStore fStore; - private OverlayKey[] fOverlayKeys; - - private PropertyListener fPropertyListener; - - - public OverlayPreferenceStore(IPreferenceStore parent, OverlayKey[] overlayKeys) { - fParent= parent; - fOverlayKeys= overlayKeys; - fStore= new PreferenceStore(); - } - - private OverlayKey findOverlayKey(String key) { - for (int i= 0; i < fOverlayKeys.length; i++) { - if (fOverlayKeys[i].fKey.equals(key)) - return fOverlayKeys[i]; - } - return null; - } - - private boolean covers(String key) { - return (findOverlayKey(key) != null); - } - - private void propagateProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target) { - - if (orgin.isDefault(key.fKey)) { - if (!target.isDefault(key.fKey)) - target.setToDefault(key.fKey); - return; - } - - TypeDescriptor d= key.fDescriptor; - if (BOOLEAN == d) { - - boolean originValue= orgin.getBoolean(key.fKey); - boolean targetValue= target.getBoolean(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (DOUBLE == d) { - - double originValue= orgin.getDouble(key.fKey); - double targetValue= target.getDouble(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (FLOAT == d) { - - float originValue= orgin.getFloat(key.fKey); - float targetValue= target.getFloat(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (INT == d) { - - int originValue= orgin.getInt(key.fKey); - int targetValue= target.getInt(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (LONG == d) { - - long originValue= orgin.getLong(key.fKey); - long targetValue= target.getLong(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (STRING == d) { - - String originValue= orgin.getString(key.fKey); - String targetValue= target.getString(key.fKey); - if (targetValue != null && originValue != null && !targetValue.equals(originValue)) - target.setValue(key.fKey, originValue); - - } - } - - public void propagate() { - for (int i= 0; i < fOverlayKeys.length; i++) - propagateProperty(fStore, fOverlayKeys[i], fParent); - } - - private void loadProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target, boolean forceInitialization) { - TypeDescriptor d= key.fDescriptor; - if (BOOLEAN == d) { - - if (forceInitialization) - target.setValue(key.fKey, true); - target.setValue(key.fKey, orgin.getBoolean(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultBoolean(key.fKey)); - - } else if (DOUBLE == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1.0D); - target.setValue(key.fKey, orgin.getDouble(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultDouble(key.fKey)); - - } else if (FLOAT == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1.0F); - target.setValue(key.fKey, orgin.getFloat(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultFloat(key.fKey)); - - } else if (INT == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1); - target.setValue(key.fKey, orgin.getInt(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultInt(key.fKey)); - - } else if (LONG == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1L); - target.setValue(key.fKey, orgin.getLong(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultLong(key.fKey)); - - } else if (STRING == d) { - - if (forceInitialization) - target.setValue(key.fKey, "1"); //$NON-NLS-1$ - target.setValue(key.fKey, orgin.getString(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultString(key.fKey)); - - } - } - - public void load() { - for (int i= 0; i < fOverlayKeys.length; i++) - loadProperty(fParent, fOverlayKeys[i], fStore, true); - } - - public void loadDefaults() { - for (int i= 0; i < fOverlayKeys.length; i++) - setToDefault(fOverlayKeys[i].fKey); - } - - public void start() { - if (fPropertyListener == null) { - fPropertyListener= new PropertyListener(); - fParent.addPropertyChangeListener(fPropertyListener); - } - } - - public void stop() { - if (fPropertyListener != null) { - fParent.removePropertyChangeListener(fPropertyListener); - fPropertyListener= null; - } - } - - /* - * @see IPreferenceStore#addPropertyChangeListener(IPropertyChangeListener) - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - fStore.addPropertyChangeListener(listener); - } - - /* - * @see IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener) - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - fStore.removePropertyChangeListener(listener); - } - - /* - * @see IPreferenceStore#firePropertyChangeEvent(String, Object, Object) - */ - public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) { - fStore.firePropertyChangeEvent(name, oldValue, newValue); - } - - /* - * @see IPreferenceStore#contains(String) - */ - public boolean contains(String name) { - return fStore.contains(name); - } - - /* - * @see IPreferenceStore#getBoolean(String) - */ - public boolean getBoolean(String name) { - return fStore.getBoolean(name); - } - - /* - * @see IPreferenceStore#getDefaultBoolean(String) - */ - public boolean getDefaultBoolean(String name) { - return fStore.getDefaultBoolean(name); - } - - /* - * @see IPreferenceStore#getDefaultDouble(String) - */ - public double getDefaultDouble(String name) { - return fStore.getDefaultDouble(name); - } - - /* - * @see IPreferenceStore#getDefaultFloat(String) - */ - public float getDefaultFloat(String name) { - return fStore.getDefaultFloat(name); - } - - /* - * @see IPreferenceStore#getDefaultInt(String) - */ - public int getDefaultInt(String name) { - return fStore.getDefaultInt(name); - } - - /* - * @see IPreferenceStore#getDefaultLong(String) - */ - public long getDefaultLong(String name) { - return fStore.getDefaultLong(name); - } - - /* - * @see IPreferenceStore#getDefaultString(String) - */ - public String getDefaultString(String name) { - return fStore.getDefaultString(name); - } - - /* - * @see IPreferenceStore#getDouble(String) - */ - public double getDouble(String name) { - return fStore.getDouble(name); - } - - /* - * @see IPreferenceStore#getFloat(String) - */ - public float getFloat(String name) { - return fStore.getFloat(name); - } - - /* - * @see IPreferenceStore#getInt(String) - */ - public int getInt(String name) { - return fStore.getInt(name); - } - - /* - * @see IPreferenceStore#getLong(String) - */ - public long getLong(String name) { - return fStore.getLong(name); - } - - /* - * @see IPreferenceStore#getString(String) - */ - public String getString(String name) { - return fStore.getString(name); - } - - /* - * @see IPreferenceStore#isDefault(String) - */ - public boolean isDefault(String name) { - return fStore.isDefault(name); - } - - /* - * @see IPreferenceStore#needsSaving() - */ - public boolean needsSaving() { - return fStore.needsSaving(); - } - - /* - * @see IPreferenceStore#putValue(String, String) - */ - public void putValue(String name, String value) { - if (covers(name)) - fStore.putValue(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, double) - */ - public void setDefault(String name, double value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, float) - */ - public void setDefault(String name, float value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, int) - */ - public void setDefault(String name, int value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, long) - */ - public void setDefault(String name, long value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, String) - */ - public void setDefault(String name, String value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, boolean) - */ - public void setDefault(String name, boolean value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setToDefault(String) - */ - public void setToDefault(String name) { - fStore.setToDefault(name); - } - - /* - * @see IPreferenceStore#setValue(String, double) - */ - public void setValue(String name, double value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, float) - */ - public void setValue(String name, float value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, int) - */ - public void setValue(String name, int value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, long) - */ - public void setValue(String name, long value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, String) - */ - public void setValue(String name, String value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, boolean) - */ - public void setValue(String name, boolean value) { - if (covers(name)) - fStore.setValue(name, value); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java deleted file mode 100644 index fdcc7bf68..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ReplaceWithEditionAction extends EditionAction { - - public ReplaceWithEditionAction() { - super(true, "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$ - fHelpContextId= ICompareContextIds.REPLACE_WITH_EDITION_DIALOG; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties deleted file mode 100644 index db582dff6..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties +++ /dev/null @@ -1,40 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)ReplaceWithEditionAction.properties -# -# Resources for ReplaceWithEditionAction.java - -title= Replace from Local History - -treeTitleFormat= Local History of ''{0}'' -dateIcon= obj16/day_obj.gif -timeIcon= obj16/resource_obj.gif - -treeFormat= {0} -workspaceTreeFormat= {0} (Workspace File) -parseErrorFormat= {0} (Parse Error) - -editionLabel= Local History ({0}) -workspaceEditionLabel= Workspace File - -targetLabel= {0} - -todayFormat= Today ({0}) -yesterdayFormat= Yesterday ({0}) -dayFormat= {0} - -buttonLabel= Replace - -noLocalHistoryError= No local history available for selected resource. -replaceError=Can''t replace resource (reason: {0}). - -taskName=Replacing
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java deleted file mode 100644 index 3fa6b07aa..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ReplaceWithPreviousEditionAction extends EditionAction { - - public ReplaceWithPreviousEditionAction() { - super(true, - "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$ - fPrevious= true; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java deleted file mode 100644 index 423ba9711..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.DialogSettings; - - -/** - * Base class for resizable Dialogs with persistent window bounds. - */ -public abstract class ResizableDialog extends Dialog { - - // dialog store id constants - private final static String DIALOG_BOUNDS_KEY= "ResizableDialogBounds"; //$NON-NLS-1$ - private static final String X= "x"; //$NON-NLS-1$ - private static final String Y= "y"; //$NON-NLS-1$ - private static final String WIDTH= "width"; //$NON-NLS-1$ - private static final String HEIGHT= "height"; //$NON-NLS-1$ - - protected ResourceBundle fBundle; - private Rectangle fNewBounds; - private IDialogSettings fSettings; - private String fContextId; - - - public ResizableDialog(Shell parent, ResourceBundle bundle) { - super(parent); - setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX); - - fBundle= bundle; - - fSettings= CompareUIPlugin.getDefault().getDialogSettings(); - } - - public void setHelpContextId(String contextId) { - fContextId= contextId; - } - - /* - * @see org.eclipse.jface.window.Window#configureShell(Shell) - */ - protected void configureShell(Shell newShell) { - super.configureShell(newShell); - if (fContextId != null) - WorkbenchHelp.setHelp(newShell, fContextId); - } - - protected Point getInitialSize() { - - int width= 0; - int height= 0; - - final Shell s= getShell(); - if (s != null) { - s.addControlListener( - new ControlListener() { - public void controlMoved(ControlEvent arg0) { - fNewBounds= s.getBounds(); - } - public void controlResized(ControlEvent arg0) { - fNewBounds= s.getBounds(); - } - } - ); - } - - IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY); //$NON-NLS-1$ - if (bounds == null) { - if (fBundle != null) { - width= Utilities.getInteger(fBundle, WIDTH, 0); - height= Utilities.getInteger(fBundle, HEIGHT, 0); - Shell shell= getParentShell(); - if (shell != null) { - Point parentSize= shell.getSize(); - if (width <= 0) - width= parentSize.x-300; - if (height <= 0) - height= parentSize.y-200; - } - } else { - Shell shell= getParentShell(); - if (shell != null) { - Point parentSize= shell.getSize(); - width= parentSize.x-100; - height= parentSize.y-100; - } - } - if (width < 700) - width= 700; - if (height < 500) - height= 500; - } else { - try { - width= bounds.getInt(WIDTH); - } catch (NumberFormatException e) { - width= 700; - } - try { - height= bounds.getInt(HEIGHT); - } catch (NumberFormatException e) { - height= 500; - } - } - - return new Point(width, height); - } - - protected Point getInitialLocation(Point initialSize) { - Point loc= super.getInitialLocation(initialSize); - - IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY); - if (bounds != null) { - try { - loc.x= bounds.getInt(X); - } catch (NumberFormatException e) { - } - try { - loc.y= bounds.getInt(Y); - } catch (NumberFormatException e) { - } - } - return loc; - } - - public boolean close() { - boolean closed= super.close(); - if (closed && fNewBounds != null) - saveBounds(fNewBounds); - return closed; - } - - private void saveBounds(Rectangle bounds) { - IDialogSettings dialogBounds= fSettings.getSection(DIALOG_BOUNDS_KEY); - if (dialogBounds == null) { - dialogBounds= new DialogSettings(DIALOG_BOUNDS_KEY); - fSettings.addSection(dialogBounds); - } - dialogBounds.put(X, bounds.x); - dialogBounds.put(Y, bounds.y); - dialogBounds.put(WIDTH, bounds.width); - dialogBounds.put(HEIGHT, bounds.height); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java deleted file mode 100644 index e2dd325ca..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java +++ /dev/null @@ -1,341 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.text.MessageFormat; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * A two-way or three-way compare for arbitrary IResources. - */ -class ResourceCompareInput extends CompareEditorInput { - - private static final boolean NORMALIZE_CASE= true; - - private boolean fThreeWay= false; - private Object fRoot; - private IStructureComparator fAncestor; - private IStructureComparator fLeft; - private IStructureComparator fRight; - private IResource fAncestorResource; - private IResource fLeftResource; - private IResource fRightResource; - private DiffTreeViewer fDiffViewer; - private IAction fOpenAction; - - class MyDiffNode extends DiffNode { - - private boolean fDirty= false; - private ITypedElement fLastId; - private String fLastName; - - - public MyDiffNode(IDiffContainer parent, int description, ITypedElement ancestor, ITypedElement left, ITypedElement right) { - super(parent, description, ancestor, left, right); - } - public void fireChange() { - super.fireChange(); - setDirty(true); - fDirty= true; - if (fDiffViewer != null) - fDiffViewer.refresh(this); - } - void clearDirty() { - fDirty= false; - } - public String getName() { - if (fLastName == null) - fLastName= super.getName(); - if (fDirty) - return '<' + fLastName + '>'; - return fLastName; - } - - public ITypedElement getId() { - ITypedElement id= super.getId(); - if (id == null) - return fLastId; - fLastId= id; - return id; - } - } - - /** - * Creates an compare editor input for the given selection. - */ - ResourceCompareInput(CompareConfiguration config) { - super(config); - } - - public Viewer createDiffViewer(Composite parent) { - fDiffViewer= new DiffTreeViewer(parent, getCompareConfiguration()) { - protected void fillContextMenu(IMenuManager manager) { - - if (fOpenAction == null) { - fOpenAction= new Action() { - public void run() { - handleOpen(null); - } - }; - Utilities.initAction(fOpenAction, getBundle(), "action.CompareContents."); //$NON-NLS-1$ - } - - boolean enable= false; - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection)selection; - if (ss.size() == 1) { - Object element= ss.getFirstElement(); - if (element instanceof MyDiffNode) { - ITypedElement te= ((MyDiffNode) element).getId(); - if (te != null) - enable= !ITypedElement.FOLDER_TYPE.equals(te.getType()); - } else - enable= true; - } - } - fOpenAction.setEnabled(enable); - - manager.add(fOpenAction); - - super.fillContextMenu(manager); - } - }; - return fDiffViewer; - } - - /** - * Returns true if compare can be executed for the given selection. - */ - boolean setSelection(ISelection s) { - - IResource[] selection= Utilities.getResources(s); - if (selection.length < 2 || selection.length > 3) - return false; - - fThreeWay= selection.length == 3; - - fLeftResource= selection[0]; - fRightResource= selection[1]; - if (fThreeWay) { - fLeftResource= selection[1]; - fRightResource= selection[2]; - } - - fAncestor= null; - fLeft= getStructure(fLeftResource); - fRight= getStructure(fRightResource); - - if (incomparable(fLeft, fRight)) - return false; - - if (fThreeWay) { - fAncestorResource= selection[0]; - fAncestor= getStructure(fAncestorResource); - - if (incomparable(fAncestor, fRight)) - return false; - } - - return true; - } - - /** - * Initializes the images in the compare configuration. - */ - void initializeCompareConfiguration() { - CompareConfiguration cc= getCompareConfiguration(); - if (fLeftResource != null) { - cc.setLeftLabel(buildLabel(fLeftResource)); - cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource)); - } - if (fRightResource != null) { - cc.setRightLabel(buildLabel(fRightResource)); - cc.setRightImage(CompareUIPlugin.getImage(fRightResource)); - } - if (fThreeWay && fAncestorResource != null) { - cc.setAncestorLabel(buildLabel(fAncestorResource)); - cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource)); - } - } - - /** - * Returns true if the given arguments cannot be compared. - */ - private boolean incomparable(IStructureComparator c1, IStructureComparator c2) { - if (c1 == null || c2 == null) - return true; - return isLeaf(c1) != isLeaf(c2); - } - - /** - * Returns true if the given arguments is a leaf. - */ - private boolean isLeaf(IStructureComparator c) { - if (c instanceof ITypedElement) { - ITypedElement te= (ITypedElement) c; - return !ITypedElement.FOLDER_TYPE.equals(te.getType()); - } - return false; - } - - /** - * Creates a <code>IStructureComparator</code> for the given input. - * Returns <code>null</code> if no <code>IStructureComparator</code> - * can be found for the <code>IResource</code>. - */ - private IStructureComparator getStructure(IResource input) { - - if (input instanceof IContainer) - return new BufferedResourceNode(input); - - if (input instanceof IFile) { - IStructureComparator rn= new BufferedResourceNode(input); - IFile file= (IFile) input; - String type= normalizeCase(file.getFileExtension()); - if ("JAR".equals(type) || "ZIP".equals(type)) //$NON-NLS-2$ //$NON-NLS-1$ - return new ZipFileStructureCreator().getStructure(rn); - return rn; - } - return null; - } - - /** - * Performs a two-way or three-way diff on the current selection. - */ - public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException { - - try { - // fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty - fLeftResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - fRightResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - if (fThreeWay && fAncestorResource != null) - fAncestorResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - // end fix - - pm.beginTask(Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$ - - String leftLabel= fLeftResource.getName(); - String rightLabel= fRightResource.getName(); - - String title; - if (fThreeWay) { - String format= Utilities.getString("ResourceCompare.threeWay.title"); //$NON-NLS-1$ - String ancestorLabel= fAncestorResource.getName(); - title= MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel}); - } else { - String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$ - title= MessageFormat.format(format, new String[] {leftLabel, rightLabel}); - } - setTitle(title); - - Differencer d= new Differencer() { - protected Object visit(Object parent, int description, Object ancestor, Object left, Object right) { - return new MyDiffNode((IDiffContainer) parent, description, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right); - } - }; - - fRoot= d.findDifferences(fThreeWay, pm, null, fAncestor, fLeft, fRight); - return fRoot; - - } catch (CoreException ex) { - throw new InvocationTargetException(ex); - } finally { - pm.done(); - } - } - - public String getToolTipText() { - if (fLeftResource != null && fRightResource != null) { - String leftLabel= fLeftResource.getFullPath().makeRelative().toString(); - String rightLabel= fRightResource.getFullPath().makeRelative().toString(); - if (fThreeWay) { - String format= Utilities.getString("ResourceCompare.threeWay.tooltip"); //$NON-NLS-1$ - String ancestorLabel= fAncestorResource.getFullPath().makeRelative().toString(); - return MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel}); - } else { - String format= Utilities.getString("ResourceCompare.twoWay.tooltip"); //$NON-NLS-1$ - return MessageFormat.format(format, new String[] {leftLabel, rightLabel}); - } - } - // fall back - return super.getToolTipText(); - } - - private String buildLabel(IResource r) { - String n= r.getFullPath().toString(); - if (n.charAt(0) == IPath.SEPARATOR) - return n.substring(1); - return n; - } - - public void saveChanges(IProgressMonitor pm) throws CoreException { - super.saveChanges(pm); - if (fRoot instanceof DiffNode) { - try { - commit(pm, (DiffNode) fRoot); - } finally { - if (fDiffViewer != null) - fDiffViewer.refresh(); - setDirty(false); - } - } - } - - /* - * Recursively walks the diff tree and commits all changes. - */ - private static void commit(IProgressMonitor pm, DiffNode node) throws CoreException { - - if (node instanceof MyDiffNode) - ((MyDiffNode)node).clearDirty(); - - ITypedElement left= node.getLeft(); - if (left instanceof BufferedResourceNode) - ((BufferedResourceNode) left).commit(pm); - - ITypedElement right= node.getRight(); - if (right instanceof BufferedResourceNode) - ((BufferedResourceNode) right).commit(pm); - - IDiffElement[] children= node.getChildren(); - if (children != null) { - for (int i= 0; i < children.length; i++) { - IDiffElement element= children[i]; - if (element instanceof DiffNode) - commit(pm, (DiffNode) element); - } - } - } - - private static String normalizeCase(String s) { - if (NORMALIZE_CASE && s != null) - return s.toUpperCase(); - return s; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java deleted file mode 100644 index 581527039..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.compare.*; - -/** - * Toggles the <code>ICompareConfiguration.SHOW_PSEUDO_CONFLICTS</code> property of an - * <code>ICompareConfiguration</code>. - */ -public class ShowPseudoConflicts extends ChangePropertyAction { - - public ShowPseudoConflicts(ResourceBundle bundle, CompareConfiguration cc) { - super(bundle, cc, "action.ShowPseudoConflicts.", CompareConfiguration.SHOW_PSEUDO_CONFLICTS); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java deleted file mode 100644 index 1346348c1..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.jface.text.Document; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - - -public class SimpleTextViewer extends AbstractViewer { - - private SourceViewer fSourceViewer; - private ICompareInput fInput; - - - SimpleTextViewer(Composite parent) { - fSourceViewer= new SourceViewer(parent, null, SWT.H_SCROLL + SWT.V_SCROLL); - fSourceViewer.setEditable(false); - } - - public Control getControl() { - return fSourceViewer.getTextWidget(); - } - - public void setInput(Object input) { - if (input instanceof IStreamContentAccessor) { - fSourceViewer.setDocument(new Document(getString(input))); - } else if (input instanceof ICompareInput) { - fInput= (ICompareInput) input; - ITypedElement left= ((ICompareInput) fInput).getLeft(); - fSourceViewer.setDocument(new Document(getString(left))); - } - } - - public Object getInput() { - return fInput; - } - - private String getString(Object input) { - - if (input instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) input; - try { - return Utilities.readString(sca.getContents()); - } catch (CoreException ex) { - } - } - return ""; //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java deleted file mode 100644 index 739b82f0e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Layout; - -public class TabFolderLayout extends Layout { - - protected Point computeSize (Composite composite, int wHint, int hHint, boolean flushCache) { - if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) - return new Point(wHint, hHint); - - Control [] children = composite.getChildren (); - int count = children.length; - int maxWidth = 0, maxHeight = 0; - for (int i=0; i<count; i++) { - Control child = children [i]; - Point pt = child.computeSize (SWT.DEFAULT, SWT.DEFAULT, flushCache); - maxWidth = Math.max (maxWidth, pt.x); - maxHeight = Math.max (maxHeight, pt.y); - } - - if (wHint != SWT.DEFAULT) - maxWidth= wHint; - if (hHint != SWT.DEFAULT) - maxHeight= hHint; - - return new Point(maxWidth, maxHeight); - - } - - protected void layout (Composite composite, boolean flushCache) { - Rectangle rect= composite.getClientArea(); - - Control[] children = composite.getChildren(); - for (int i = 0; i < children.length; i++) { - children[i].setBounds(rect); - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java deleted file mode 100644 index 1a5d1d8be..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.TextMergeViewer; - -/** - * A factory object for the <code>TextMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class TextMergeViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new TextMergeViewer(parent, mp); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java deleted file mode 100644 index 66eaba9f8..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.IViewerCreator; - - -/** - * A factory object for the <code>TextMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class TextViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new SimpleTextViewer(parent); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java deleted file mode 100644 index efbfa3c50..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java +++ /dev/null @@ -1,384 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.operation.*; -import org.eclipse.jface.resource.JFaceResources; - -import org.eclipse.core.runtime.*; - -/** - * A modal dialog that displays progress during a long running operation. - */ -public class TimeoutContext { - - private static class ModalContextThread extends Thread { - - private boolean fWorking; - private IRunnableWithProgress fRunnable; - private Throwable fThrowable; - private IProgressMonitor fProgressMonitor; - private boolean fContinueEventDispatching= true; - private Display fDisplay; - - private ModalContextThread(IRunnableWithProgress operation, IProgressMonitor monitor) { - super("TimeoutContext"); //$NON-NLS-1$ - fRunnable= operation; - fProgressMonitor= monitor; - } - - synchronized boolean timeout(Display display) { - fDisplay= display; - return fWorking; - } - - public void run() { - try { - fWorking= true; - if (fRunnable != null) - fRunnable.run(fProgressMonitor); - } catch (InvocationTargetException e) { - fThrowable= e; - } catch (InterruptedException e) { - fThrowable= e; - } catch (RuntimeException e) { - fThrowable= e; - } catch (ThreadDeath e) { - // Make sure to propagate ThreadDeath, or threads will never fully terminate - throw e; - } catch (Error e) { - fThrowable= e; - } finally { - fWorking= false; - - if (fDisplay != null) { - // Make sure that all events in the asynchronous event queue - // are dispatched. - fDisplay.syncExec( - new Runnable() { - public void run() { - // do nothing - } - } - ); - - // Stop event dispatching - fContinueEventDispatching= false; - - // Force the event loop to return from sleep () so that - // it stops event dispatching. - fDisplay.asyncExec(null); - } - } - } - - public void block() { - while (fContinueEventDispatching) - if (!fDisplay.readAndDispatch()) - fDisplay.sleep(); - } - } - - static class ProgressMonitorDialog extends org.eclipse.jface.dialogs.Dialog { - - protected ProgressIndicator fProgressIndicator; - protected Label fTaskLabel; - protected Label fSubTaskLabel; - protected Button fCancel; - protected boolean fEnableCancelButton; - private ProgressMonitor fProgressMonitor; - private Cursor fArrowCursor; - private Cursor fWaitCursor; - private Shell fParentShell; - - private ProgressMonitorDialog(Shell parent, boolean cancelable, ProgressMonitor pm) { - super(parent); - fProgressMonitor= pm; - fParentShell= parent; - fEnableCancelButton= cancelable; - this.setBlockOnOpen(false); - setShellStyle(SWT.BORDER | SWT.TITLE | SWT.APPLICATION_MODAL); // no close button - } - - public boolean close() { - if (fCancel != null && !fCancel.isDisposed()) - fCancel.setCursor(null); - Shell shell= getShell(); - if (shell != null && !shell.isDisposed()) - shell.setCursor(null); - if (fArrowCursor != null) - fArrowCursor.dispose(); - if (fWaitCursor != null) - fWaitCursor.dispose(); - fArrowCursor= null; - fWaitCursor= null; - return super.close(); - } - - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(JFaceResources.getString("ProgressMonitorDialog.title")); //$NON-NLS-1$ - if (fWaitCursor == null) - fWaitCursor= new Cursor(shell.getDisplay(),SWT.CURSOR_WAIT); - shell.setCursor(fWaitCursor); - } - - protected void createButtonsForButtonBar(Composite parent) { - // cancel button - fCancel= createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true); - if(fArrowCursor == null) - fArrowCursor= new Cursor(fCancel.getDisplay(),SWT.CURSOR_ARROW); - fCancel.setCursor(fArrowCursor); - fCancel.addListener(SWT.Selection, - new Listener() { - public void handleEvent(Event e) { - if (fCancel != null && !fCancel.isDisposed()) - fCancel.setEnabled(false); - fProgressMonitor.setCanceled(true); - } - } - ); - fCancel.setEnabled(fEnableCancelButton); - } - - protected Control createDialogArea(Composite parent) { - - Composite c= (Composite)super.createDialogArea(parent); - ((GridLayout)c.getLayout()).numColumns= 2; - - // icon - Label iconLabel= new Label(c, SWT.LEFT); - GridData gd= new GridData(); - iconLabel.setLayoutData(gd); - iconLabel.setFont(parent.getFont()); - Image i= JFaceResources.getImageRegistry().get(org.eclipse.jface.dialogs.Dialog.DLG_IMG_INFO); - if (i != null) - iconLabel.setImage(i); - else - iconLabel.setText(JFaceResources.getString("Image_not_found")); //$NON-NLS-1$ - - // label on right hand side of icon - fTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP); - fTaskLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - fTaskLabel.setFont(parent.getFont()); - - // progress indicator - fProgressIndicator= new ProgressIndicator(c); - gd= new GridData(); - gd.heightHint= 15; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.horizontalSpan= 2; - fProgressIndicator.setLayoutData(gd); - - // label showing current task - fSubTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP); - gd= new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint= 35; - gd.horizontalSpan= 2; - fSubTaskLabel.setLayoutData(gd); - fSubTaskLabel.setFont(parent.getFont()); - - // update with values fProgressMonitor - String s= fProgressMonitor.fTask; - if (s == null) - s= ""; //$NON-NLS-1$ - fTaskLabel.setText(s); - - if (fProgressMonitor.fMaxWork == IProgressMonitor.UNKNOWN) - fProgressIndicator.beginAnimatedTask(); - else - fProgressIndicator.beginTask(fProgressMonitor.fMaxWork); - - if (fProgressMonitor.fSubTask != null) - fSubTaskLabel.setText(fProgressMonitor.fSubTask); - fProgressIndicator.worked(fProgressMonitor.fWorked); - - fProgressMonitor.activate(this); - applyDialogFont(c); - return c; - } - - void beginTask(final String name, final int totalWork) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - fTaskLabel.setText(name); - - if (fProgressIndicator != null && fProgressIndicator.isDisposed()) { - if (totalWork == IProgressMonitor.UNKNOWN) - fProgressIndicator.beginAnimatedTask(); - else - fProgressIndicator.beginTask(totalWork); - } - } - } - ); - } - - void setTaskName(final String name) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fTaskLabel != null && fTaskLabel.isDisposed()) - fTaskLabel.setText(name); - } - } - ); - } - - void setSubTaskName(final String name) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - String n= (name == null) ? "" : name; //$NON-NLS-1$ - if (fSubTaskLabel != null && !fSubTaskLabel.isDisposed()) - fSubTaskLabel.setText(n); - } - } - ); - } - - void done() { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) { - fProgressIndicator.sendRemainingWork(); - fProgressIndicator.done(); - } - } - } - ); - } - - void worked(final double work) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) - fProgressIndicator.worked(work); - } - } - ); - } - - protected Point getInitialSize() { - return getShell().computeSize(450, SWT.DEFAULT); - } - } - - private static class ProgressMonitor implements IProgressMonitor { - - private int fMaxWork; - private String fTask; - private String fSubTask; - private int fWorked; - private ProgressMonitorDialog fProgressMonitorDialog; - private boolean fIsCanceled; - - public void beginTask(String name, int totalWork) { - - fTask= name; - fMaxWork= totalWork; - fWorked= 0; - - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.beginTask(name, totalWork); - } - - void activate(ProgressMonitorDialog dialog) { - fProgressMonitorDialog= dialog; - } - - public void done() { - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.done(); - } - - public void setTaskName(String name) { - fTask= name; - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.setTaskName(name); - } - - public boolean isCanceled() { - return fIsCanceled; - } - - public void setCanceled(boolean b) { - fIsCanceled= b; - } - - public void subTask(String name) { - fSubTask= name; - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.setSubTaskName(name); - } - - public void worked(int work) { - if (fProgressMonitorDialog != null) - internalWorked(work); - else - fWorked+= work; - } - - public void internalWorked(double work) { - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.worked(work); - } - } - - public static void run(boolean cancelable, int timeout, Shell parent, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { - - Display display= parent.getDisplay(); - - ProgressMonitor pm= new ProgressMonitor(); - - ModalContextThread t= new ModalContextThread(runnable, pm); - t.start(); // start the long running operation - - // wait until long operations terminates or timeout - try { - t.join(timeout); - } catch (InterruptedException e) { - } - - if (t.timeout(display)) { // timeout - ProgressMonitorDialog dialog= new ProgressMonitorDialog(parent, cancelable, pm); - dialog.open(); - t.block(); - dialog.close(); - } - - Throwable throwable= t.fThrowable; - if (throwable != null) { - if (throwable instanceof InvocationTargetException) { - throw (InvocationTargetException) throwable; - } else if (throwable instanceof InterruptedException) { - throw (InterruptedException) throwable; - } else if (throwable instanceof OperationCanceledException) { - throw new InterruptedException(throwable.getMessage()); - } else { - throw new InvocationTargetException(throwable); - } - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java deleted file mode 100644 index e1aca48c9..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.compare.rangedifferencer.IRangeComparator; -import org.eclipse.compare.contentmergeviewer.ITokenComparator; - -/** - * Implements the <code>ITokenComparator</code> interface for words (or tokens) - * in a string. - * A <code>TokenComparator</code> is used as the input for the <code>RangeDifferencer</code> - * engine to perform a token oriented compare on strings. - */ -public class TokenComparator implements ITokenComparator { - - private boolean fShouldEscape= true; - private String fText; - private int fCount; - private int[] fStarts; - private int[] fLengths; - - /** - * Creates a <code>TokenComparator</code> for the given string. - * - * @param string the string that is split into token - */ - public TokenComparator(String text) { - - Assert.isNotNull(text); - - fText= text; - - int length= fText.length(); - fStarts= new int[length]; // pessimistic assumption! - fLengths= new int[length]; - fCount= 0; - - char lastCategory= 0; // 0: no category - for (int i= 0; i < length; i++) { - char c= fText.charAt(i); - - char category= '?'; // unspecified category - if (Character.isWhitespace(c)) - category= ' '; // white space category - else if (Character.isDigit(c)) - category= '0'; // digits - else if (Character.isLetter(c)) - category= 'a'; // letters - - if (category != lastCategory) { - // start a new token - fStarts[fCount++]= i; - lastCategory= category; - } - fLengths[fCount-1]++; - } - } - - /** - * Creates a <code>TokenComparator</code> for the given string. - * - * @param string the string that is split into token - * @param shouldEscape - */ - public TokenComparator(String s, boolean shouldEscape) { - this(s); - fShouldEscape= shouldEscape; - } - - /** - * Returns the number of token in the string. - * - * @return number of token in the string - */ - public int getRangeCount() { - return fCount; - } - - /* (non Javadoc) - * see ITokenComparator.getTokenStart - */ - public int getTokenStart(int index) { - if (index < fCount) - return fStarts[index]; - return fText.length(); - } - - /* (non Javadoc) - * see ITokenComparator.getTokenLength - */ - public int getTokenLength(int index) { - if (index < fCount) - return fLengths[index]; - return 0; - } - - /** - * Returns <code>true</code> if a token given by the first index - * matches a token specified by the other <code>IRangeComparator</code> and index. - * - * @param thisIndex the number of the token within this range comparator - * @param other the range comparator to compare this with - * @param otherIndex the number of the token within the other comparator - * @return <code>true</code> if the token are equal - */ - public boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex) { - if (other != null && getClass() == other.getClass()) { - TokenComparator tc= (TokenComparator) other; - int thisLen= getTokenLength(thisIndex); - int otherLen= tc.getTokenLength(otherIndex); - if (thisLen == otherLen) - return fText.regionMatches(false, getTokenStart(thisIndex), tc.fText, tc.getTokenStart(otherIndex), thisLen); - } - return false; - } - - /** - * Aborts the comparison if the number of tokens is too large. - * - * @return <code>true</code> to abort a token comparison - */ - public boolean skipRangeComparison(int length, int max, IRangeComparator other) { - - if (!fShouldEscape) - return false; - - if (getRangeCount() < 50 || other.getRangeCount() < 50) - return false; - - if (max < 100) - return false; - - if (length < 100) - return false; - - if (max > 800) - return true; - - if (length < max / 4) - return false; - - return true; - } - -// public static void main(String args[]) { -// //String in= "private static boolean isWhitespace(char c) {"; -// //String in= "for (int j= 0; j < l-1; j++) {"; -// String in= "for do i= 123; i++"; -// TokenComparator tc= new TokenComparator(in, false); -// -// System.out.println("n: " + tc.getRangeCount()); -// System.out.println(in); -// -// int p= 0; -// for (int i= 0; i < tc.getRangeCount(); i++) { -// int l= tc.getTokenLength(i); -// System.out.print("<"); -// -// for (int j= 0; j < l-1; j++) -// System.out.print(" "); -// } -// System.out.println(); -// -// //System.out.println("extract: <" + tc.extract(16, 1) + ">"); -// } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java deleted file mode 100644 index b73ab6b0c..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java +++ /dev/null @@ -1,401 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.text.MessageFormat; -import java.util.*; - -import org.eclipse.swt.widgets.*; - -import org.eclipse.core.resources.ResourcesPlugin; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.util.*; -import org.eclipse.jface.viewers.*; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IAdaptable; - -import org.eclipse.ui.*; - -import org.eclipse.compare.CompareConfiguration; - -/** - * Convenience and utility methods. - */ -public class Utilities { - - public static void registerAction(IKeyBindingService kbs, IAction a, String id) { - if (kbs != null) { - a.setActionDefinitionId(id); - kbs.registerAction(a); - } - } - - public static IWorkbenchPartSite findSite(Control c) { - while (c != null && !c.isDisposed()) { - Object data= c.getData(); - if (data instanceof IWorkbenchPart) - return ((IWorkbenchPart)data).getSite(); - c= c.getParent(); - } - return null; - } - - public static IActionBars findActionBars(Control c) { - while (c != null && !c.isDisposed()) { - Object data= c.getData(); - if (data instanceof CompareEditor) - return ((CompareEditor)data).getActionBars(); - - // PR 1GDVZV7: ITPVCM:WIN98 - CTRL + C does not work in Java source compare - if (data instanceof IViewPart) - return ((IViewPart)data).getViewSite().getActionBars(); - // end PR 1GDVZV7 - - c= c.getParent(); - } - return null; - } - - public static void setEnableComposite(Composite composite, boolean enable) { - Control[] children= composite.getChildren(); - for (int i= 0; i < children.length; i++) - children[i].setEnabled(enable); - } - - public static boolean getBoolean(CompareConfiguration cc, String key, boolean dflt) { - if (cc != null) { - Object value= cc.getProperty(key); - if (value instanceof Boolean) - return ((Boolean) value).booleanValue(); - } - return dflt; - } - - public static void firePropertyChange(ListenerList ll, Object source, String property, Object old, Object newValue) { - if (ll != null) { - PropertyChangeEvent event= null; - Object[] listeners= ll.getListeners(); - for (int i= 0; i < listeners.length; i++) { - IPropertyChangeListener l= (IPropertyChangeListener) listeners[i]; - if (event == null) - event= new PropertyChangeEvent(source, property, old, newValue); - l.propertyChange(event); - } - } - } - - public static boolean okToUse(Widget widget) { - return widget != null && !widget.isDisposed(); - } - - public static boolean isMotif() { - return false; - } - - /** - * Returns the elements of the given selection. - * Returns an empty array if the selection is empty or if - * the given selection is not of type <code>IStructuredSelection</code>. - * - * @param selection the selection - * @return the selected elements - */ - public static Object[] toArray(ISelection selection) { - if (!(selection instanceof IStructuredSelection)) { - return new Object[0]; - } - IStructuredSelection ss= (IStructuredSelection) selection; - return ss.toArray(); - } - - /** - * Convenience method: extract all <code>IResources</code> from given selection. - * Never returns null. - */ - public static IResource[] getResources(ISelection selection) { - - ArrayList tmp= new ArrayList(); - - if (selection instanceof IStructuredSelection) { - - Object[] s= ((IStructuredSelection)selection).toArray(); - - for (int i= 0; i < s.length; i++) { - Object o= s[i]; - if (o instanceof IResource) { - tmp.add(o); - continue; - } - if (o instanceof IAdaptable) { - IAdaptable a= (IAdaptable) o; - Object adapter= a.getAdapter(IResource.class); - if (adapter instanceof IResource) - tmp.add(adapter); - continue; - } - } - } - return (IResource[]) tmp.toArray(new IResource[tmp.size()]); - } - - public static byte[] readBytes(InputStream in) { - ByteArrayOutputStream bos= new ByteArrayOutputStream(); - try { - while (true) { - int c= in.read(); - if (c == -1) - break; - bos.write(c); - } - - } catch (IOException ex) { - return null; - - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException x) { - } - } - try { - bos.close(); - } catch (IOException x) { - } - } - - return bos.toByteArray(); - } - - /** - * Returns null if an error occurred. - */ - public static String readString(InputStream is) { - if (is == null) - return null; - BufferedReader reader= null; - try { - StringBuffer buffer= new StringBuffer(); - char[] part= new char[2048]; - int read= 0; - reader= new BufferedReader(new InputStreamReader(is, ResourcesPlugin.getEncoding())); - - while ((read= reader.read(part)) != -1) - buffer.append(part, 0, read); - - return buffer.toString(); - - } catch (IOException ex) { - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException ex) { - } - } - } - return null; - } - - public static byte[] getBytes(String s) { - try { - return s.getBytes(ResourcesPlugin.getEncoding()); - } catch (UnsupportedEncodingException e) { - return s.getBytes(); - } - } - - public static String getIconPath(Display display) { - return "icons/full/"; //$NON-NLS-1$ - } - - /** - * Initialize the given Action from a ResourceBundle. - */ - public static void initAction(IAction a, ResourceBundle bundle, String prefix) { - - String labelKey= "label"; //$NON-NLS-1$ - String tooltipKey= "tooltip"; //$NON-NLS-1$ - String imageKey= "image"; //$NON-NLS-1$ - String descriptionKey= "description"; //$NON-NLS-1$ - - if (prefix != null && prefix.length() > 0) { - labelKey= prefix + labelKey; - tooltipKey= prefix + tooltipKey; - imageKey= prefix + imageKey; - descriptionKey= prefix + descriptionKey; - } - - a.setText(getString(bundle, labelKey, labelKey)); - a.setToolTipText(getString(bundle, tooltipKey, null)); - a.setDescription(getString(bundle, descriptionKey, null)); - - String relPath= getString(bundle, imageKey, null); - if (relPath != null && relPath.trim().length() > 0) { - - String cPath; - String dPath; - String ePath; - - if (relPath.indexOf("/") >= 0) { //$NON-NLS-1$ - String path= relPath.substring(1); - cPath= 'c' + path; - dPath= 'd' + path; - ePath= 'e' + path; - } else { - cPath= "clcl16/" + relPath; //$NON-NLS-1$ - dPath= "dlcl16/" + relPath; //$NON-NLS-1$ - ePath= "elcl16/" + relPath; //$NON-NLS-1$ - } - - ImageDescriptor id= CompareUIPlugin.getImageDescriptor(dPath); // we set the disabled image first (see PR 1GDDE87) - if (id != null) - a.setDisabledImageDescriptor(id); - id= CompareUIPlugin.getImageDescriptor(cPath); - if (id != null) - a.setHoverImageDescriptor(id); - id= CompareUIPlugin.getImageDescriptor(ePath); - if (id != null) - a.setImageDescriptor(id); - } - } - - public static void initToggleAction(IAction a, ResourceBundle bundle, String prefix, boolean checked) { - - String tooltip= null; - if (checked) - tooltip= getString(bundle, prefix + "tooltip.checked", null); //$NON-NLS-1$ - else - tooltip= getString(bundle, prefix + "tooltip.unchecked", null); //$NON-NLS-1$ - if (tooltip == null) - tooltip= getString(bundle, prefix + "tooltip", null); //$NON-NLS-1$ - - if (tooltip != null) - a.setToolTipText(tooltip); - - String description= null; - if (checked) - description= getString(bundle, prefix + "description.checked", null); //$NON-NLS-1$ - else - description= getString(bundle, prefix + "description.unchecked", null); //$NON-NLS-1$ - if (description == null) - description= getString(bundle, prefix + "description", null); //$NON-NLS-1$ - - if (description != null) - a.setDescription(description); - - } - - public static String getString(ResourceBundle bundle, String key, String dfltValue) { - - if (bundle != null) { - try { - return bundle.getString(key); - } catch (MissingResourceException x) { - } - } - return dfltValue; - } - - public static String getFormattedString(ResourceBundle bundle, String key, String arg) { - - if (bundle != null) { - try { - return MessageFormat.format(bundle.getString(key), new String[] { arg }); - } catch (MissingResourceException x) { - } - } - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - - public static String getString(String key) { - try { - return CompareUIPlugin.getResourceBundle().getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } - - public static String getFormattedString(String key, String arg) { - try{ - return MessageFormat.format(CompareUIPlugin.getResourceBundle().getString(key), new String[] { arg }); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } - - public static String getString(ResourceBundle bundle, String key) { - return getString(bundle, key, key); - } - - public static int getInteger(ResourceBundle bundle, String key, int dfltValue) { - - if (bundle != null) { - try { - String s= bundle.getString(key); - if (s != null) - return Integer.parseInt(s); - } catch (NumberFormatException x) { - } catch (MissingResourceException x) { - } - } - return dfltValue; - } - - /** - * Answers <code>true</code> if the given selection contains resources that don't - * have overlapping paths and <code>false</code> otherwise. - */ - /* - public static boolean isSelectionNonOverlapping() throws TeamException { - IResource[] resources = getSelectedResources(); - // allow operation for non-overlapping resource selections - if(resources.length>0) { - List validPaths = new ArrayList(2); - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - - // only allow cvs resources to be selected - if(RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId()) == null) { - return false; - } - - // check if this resource overlaps other selections - IPath resourceFullPath = resource.getFullPath(); - if(!validPaths.isEmpty()) { - for (Iterator it = validPaths.iterator(); it.hasNext();) { - IPath path = (IPath) it.next(); - if(path.isPrefixOf(resourceFullPath) || - resourceFullPath.isPrefixOf(path)) { - return false; - } - } - } - validPaths.add(resourceFullPath); - - // ensure that resources are managed - ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource); - if(cvsResource.isFolder()) { - if( ! ((ICVSFolder)cvsResource).isCVSFolder()) return false; - } else { - if( ! cvsResource.isManaged()) return false; - } - } - return true; - } - return false; - } - */ -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java deleted file mode 100644 index c3b601c47..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.compare.*; - -import org.eclipse.jface.viewers.Viewer; - -/** - * Creates <code>Viewer</code>s from an <code>IConfigurationElement</code>. - */ -public class ViewerDescriptor implements IViewerDescriptor { - - private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$ - private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$ - - private IConfigurationElement fConfiguration; - private IViewerCreator fViewerCreator; - private Class fViewerClass; - - public ViewerDescriptor(IConfigurationElement config) { - fConfiguration= config; - } - - public Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration mp) { - - if (currentViewer != null && currentViewer.getClass() == fViewerClass) { - //System.out.println("reused viewer: " + currentViewer.getClass().getName()); - return currentViewer; - } - - if (fViewerCreator == null) { - try { - fViewerCreator= (IViewerCreator) fConfiguration.createExecutableExtension(CLASS_ATTRIBUTE); - } catch (CoreException e) { - } - } - - if (fViewerCreator != null) { - Viewer viewer= fViewerCreator.createViewer(parent, mp); - if (viewer != null) - fViewerClass= viewer.getClass(); - return viewer; - } - - return null; - } - - public String getExtension() { - return fConfiguration.getAttribute(EXTENSIONS_ATTRIBUTE); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java deleted file mode 100644 index 27e580c5e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java +++ /dev/null @@ -1,17 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ViewerSwitchingCancelled extends Error { - -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java deleted file mode 100644 index 04d5530bb..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java +++ /dev/null @@ -1,160 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.lang.reflect.InvocationTargetException; -import java.util.Arrays; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardDialog; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.ui.IActionDelegate; -import org.eclipse.ui.IEditorPart; - -import org.eclipse.compare.internal.*; - - -public class CompareWithPatchAction implements IActionDelegate { - - static class PatchWizardDialog extends WizardDialog { - - PatchWizardDialog(Shell parent, IWizard wizard) { - super(parent, wizard); - - setShellStyle(getShellStyle() | SWT.RESIZE); - setMinimumPageSize(700, 500); - } - } - - private ISelection fSelection; - private boolean fSavedFiles; - - - public void selectionChanged(IAction action, ISelection selection) { - fSelection= selection; - IResource[] resources= PatchWizard.getResource(fSelection); - action.setEnabled(resources != null && resources.length == 1); - } - - public void run(IAction action) { - PatchWizard wizard= new PatchWizard(fSelection); - - if (areAllEditorsSaved()) { - PatchWizardDialog dialog= new PatchWizardDialog(CompareUIPlugin.getShell(), wizard); - dialog.open(); - } - } - - private boolean areAllEditorsSaved(){ - if (CompareUIPlugin.getDirtyEditors().length == 0) - return true; - if (! saveAllDirtyEditors()) - return false; - Shell shell= CompareUIPlugin.getShell(); - try { - // Save isn't cancelable. - IWorkspace workspace= ResourcesPlugin.getWorkspace(); - IWorkspaceDescription description= workspace.getDescription(); - boolean autoBuild= description.isAutoBuilding(); - description.setAutoBuilding(false); - workspace.setDescription(description); - try { - new ProgressMonitorDialog(shell).run(false, false, createRunnable()); - fSavedFiles= true; - } finally { - description.setAutoBuilding(autoBuild); - workspace.setDescription(description); - } - return true; - } catch (InvocationTargetException e) { - ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception")); //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } catch (CoreException e) { - ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception")); //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } catch (InterruptedException e) { - Assert.isTrue(false); // Can't happen. Operation isn't cancelable. - return false; - } - } - - private IRunnableWithProgress createRunnable() { - return new IRunnableWithProgress() { - public void run(IProgressMonitor pm) { - IEditorPart[] editorsToSave= CompareUIPlugin.getDirtyEditors(); - pm.beginTask(PatchMessages.getString("PatchAction.SavingDirtyEditorsTask"), editorsToSave.length); //$NON-NLS-1$ - for (int i= 0; i < editorsToSave.length; i++) { - editorsToSave[i].doSave(new SubProgressMonitor(pm, 1)); - pm.worked(1); - } - pm.done(); - } - }; - } - - private boolean saveAllDirtyEditors() { - if (ComparePreferencePage.getSaveAllEditors()) //must save everything - return true; - ListDialog dialog= new ListDialog(CompareUIPlugin.getShell()) { - protected Control createDialogArea(Composite parent) { - Composite result= (Composite) super.createDialogArea(parent); - final Button check= new Button(result, SWT.CHECK); - check.setText(PatchMessages.getString("PatchAction.AlwaysSaveQuestion")); //$NON-NLS-1$ - check.setSelection(ComparePreferencePage.getSaveAllEditors()); - check.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - ComparePreferencePage.setSaveAllEditors(check.getSelection()); - } - } - ); - applyDialogFont(result); - return result; - } - }; - dialog.setTitle(PatchMessages.getString("PatchAction.SaveAllQuestion")); //$NON-NLS-1$ - dialog.setAddCancelButton(true); - dialog.setLabelProvider(createDialogLabelProvider()); - dialog.setMessage(PatchMessages.getString("PatchAction.SaveAllDescription")); //$NON-NLS-1$ - dialog.setContentProvider(new ListContentProvider()); - dialog.setInput(Arrays.asList(CompareUIPlugin.getDirtyEditors())); - return dialog.open() == Dialog.OK; - } - - private ILabelProvider createDialogLabelProvider() { - return new LabelProvider() { - public Image getImage(Object element) { - return ((IEditorPart) element).getTitleImage(); - } - public String getText(Object element) { - return ((IEditorPart) element).getTitle(); - } - }; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java deleted file mode 100644 index 12e7e2ca0..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.*; - -import org.eclipse.core.runtime.IPath; - -import org.eclipse.compare.structuremergeviewer.Differencer; - - -/* package */ class Diff { - - IPath fOldPath, fNewPath; - long fOldDate, fNewDate; // if 0: no file - List fHunks= new ArrayList(); - boolean fMatches= false; - private boolean fIsEnabled2= true; - String fRejected; - - - /* package */ Diff(IPath oldPath, long oldDate, IPath newPath, long newDate) { - fOldPath= oldPath; - fOldDate= oldPath == null ? 0 : oldDate; - fNewPath= newPath; - fNewDate= newPath == null ? 0 : newDate; - } - - boolean isEnabled() { - return fIsEnabled2; - } - - void setEnabled(boolean b) { - fIsEnabled2= b; - } - - void reverse() { - IPath tp= fOldPath; - fOldPath= fNewPath; - fNewPath= tp; - - long t= fOldDate; - fOldDate= fNewDate; - fNewDate= t; - - Iterator iter= fHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - hunk.reverse(); - } - } - - Hunk[] getHunks() { - return (Hunk[]) fHunks.toArray((Hunk[]) new Hunk[fHunks.size()]); - } - - IPath getPath() { - if (fOldPath != null) - return fOldPath; - return fNewPath; - } - - void finish() { - if (fHunks.size() == 1) { - Hunk h= (Hunk) fHunks.get(0); - if (h.fNewLength == 0) { - fNewDate= 0; - fNewPath= fOldPath; - } - } - } - - /* package */ void add(Hunk hunk) { - fHunks.add(hunk); - } - - /* package */ int getType() { - if (fOldDate == 0) - return Differencer.ADDITION; - if (fNewDate == 0) - return Differencer.DELETION; - return Differencer.CHANGE; - } - - /* package */ String getDescription(int strip) { - IPath path= fOldPath; - if (fOldDate == 0) - path= fNewPath; - if (strip > 0 && strip < path.segmentCount()) - path= path.removeFirstSegments(strip); - return path.toOSString(); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java deleted file mode 100644 index ebd5a4961..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.List; - -/** - * A Hunk describes a range of changed lines and some context lines. - */ -/* package */ class Hunk { - - Diff fParent; - int fOldStart, fOldLength; - int fNewStart, fNewLength; - String[] fLines; - boolean fMatches= false; - private boolean fIsEnabled2= true; - - - /* package */ Hunk(Diff parent, int[] oldRange, int[] newRange, List lines) { - - fParent= parent; - if (fParent != null) - fParent.add(this); - - if (oldRange[0] > 0) - fOldStart= oldRange[0]-1; // line number start at 0! - else - fOldStart= 0; - fOldLength= oldRange[1]; - if (newRange[0] > 0) - fNewStart= newRange[0]-1; // line number start at 0! - else - fNewStart= 0; - fNewLength= newRange[1]; - - fLines= (String[]) lines.toArray(new String[lines.size()]); - } - - boolean isEnabled() { - return fIsEnabled2; - } - - void setEnabled(boolean b) { - fIsEnabled2= b; - } - - void reverse() { - int t= fOldStart; - fOldStart= fNewStart; - fNewStart= t; - - t= fOldLength; - fOldLength= fNewLength; - fNewLength= t; - - for (int i= 0; i < fLines.length; i++) { - String line= fLines[i]; - char c= line.charAt(0); - switch (c) { - case '+': - fLines[i]= '-' + line.substring(1); - break; - case '-': - fLines[i]= '+' + line.substring(1); - break; - default: - break; - } - } - } - - /** - * Returns the contents of this hunk. - * Each line starts with a control character. Their meaning is as follows: - * <ul> - * <li> - * '+': add the line - * <li> - * '-': delete the line - * <li> - * ' ': no change, context line - * </ul> - */ - String getContent() { - StringBuffer sb= new StringBuffer(); - for (int i= 0; i < fLines.length; i++) { - String line= fLines[i]; - sb.append(line.substring(0, Patcher.length(line))); - sb.append('\n'); - } - return sb.toString(); - } - - /** - * Returns a descriptive String for this hunk. - * It is in the form old_start,old_length -> new_start,new_length. - */ - String getDescription() { - StringBuffer sb= new StringBuffer(); - sb.append(Integer.toString(fOldStart)); - sb.append(','); - sb.append(Integer.toString(fOldLength)); - sb.append(" -> "); //$NON-NLS-1$ - sb.append(Integer.toString(fNewStart)); - sb.append(','); - sb.append(Integer.toString(fNewLength)); - return sb.toString(); - } - - String getRejectedDescription() { - StringBuffer sb= new StringBuffer(); - sb.append("@@ -"); //$NON-NLS-1$ - sb.append(Integer.toString(fOldStart)); - sb.append(','); - sb.append(Integer.toString(fOldLength)); - sb.append(" +"); //$NON-NLS-1$ - sb.append(Integer.toString(fNewStart)); - sb.append(','); - sb.append(Integer.toString(fNewLength)); - sb.append(" @@"); //$NON-NLS-1$ - return sb.toString(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java deleted file mode 100644 index 1a3c09a54..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java +++ /dev/null @@ -1,522 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.text.MessageFormat; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.*; - -import org.eclipse.ui.help.*; -import org.eclipse.ui.model.*; - -import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - - -/* package */ class InputPatchPage extends WizardPage { - - // constants - protected static final int SIZING_TEXT_FIELD_WIDTH= 250; - protected static final int COMBO_HISTORY_LENGTH= 5; - - // dialog store id constants - private final static String PAGE_NAME= "PatchWizardPage1"; //$NON-NLS-1$ - private final static String STORE_PATCH_FILES_ID= PAGE_NAME + ".PATCH_FILES"; //$NON-NLS-1$ - private final static String STORE_USE_CLIPBOARD_ID= PAGE_NAME + ".USE_CLIPBOARD"; //$NON-NLS-1$ - - private boolean fShowError= false; - - // SWT widgets - private Button fUseClipboardButton; - private Combo fPatchFileNameField; - private Button fPatchFileBrowseButton; - private Button fUsePatchFileButton; - private Group fPatchFileGroup; - private CheckboxTreeViewer fPatchTargets; - private PatchWizard fPatchWizard; - - - InputPatchPage(PatchWizard pw) { - super("InputPatchPage", PatchMessages.getString("InputPatchPage.title"), null); //$NON-NLS-1$ //$NON-NLS-2$ - fPatchWizard= pw; - setMessage(PatchMessages.getString("InputPatchPage.message")); //$NON-NLS-1$ - } - - /** - * Get a path from the supplied text widget. - * @return org.eclipse.core.runtime.IPath - */ - protected IPath getPathFromText(Text textField) { - return (new Path(textField.getText())).makeAbsolute(); - } - - /* package */ String getPatchName() { - if (getUseClipboard()) - return PatchMessages.getString("InputPatchPage.Clipboard"); //$NON-NLS-1$ - return getPatchFilePath(); - } - - public void createControl(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout()); - composite.setLayoutData(new GridData(/* GridData.VERTICAL_ALIGN_FILL | */ GridData.HORIZONTAL_ALIGN_FILL)); - setControl(composite); - - Label l= new Label(composite, SWT.NONE); // a spacer - l.setText(PatchMessages.getString("InputPatchPage.SelectInput")); //$NON-NLS-1$ - buildInputGroup(composite); - - new Label(composite, SWT.NONE); // a spacer - - buildPatchFileGroup(composite); - - restoreWidgetValues(); - - updateWidgetEnablements(); - //updatePageCompletion(); - - Dialog.applyDialogFont(composite); - WorkbenchHelp.setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE); - } - - /* (non-JavaDoc) - * Method declared in IWizardPage. - */ - public IWizardPage getNextPage() { - - Patcher patcher= ((PatchWizard) getWizard()).getPatcher(); - - String source; - // Create a reader for the input - Reader reader= null; - if (getUseClipboard()) { - Control c= getControl(); - if (c != null) { - Clipboard clipboard= new Clipboard(c.getDisplay()); - Object o= clipboard.getContents(TextTransfer.getInstance()); - clipboard.dispose(); - if (o instanceof String) - reader= new StringReader((String)o); - } - source= PatchMessages.getString("InputPatchPage.Clipboard.title"); //$NON-NLS-1$ - } else { - String patchFilePath= getPatchFilePath(); - if (patchFilePath != null) { - try { - reader= new FileReader(patchFilePath); - } catch (FileNotFoundException ex) { - MessageDialog.openError(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), //$NON-NLS-1$ - PatchMessages.getString("InputPatchPage.PatchFileNotFound.message")); //$NON-NLS-1$ - } - } - source= PatchMessages.getString("InputPatchPage.PatchFile.title"); //$NON-NLS-1$ - } - - // parse the input - if (reader != null) { - try { - patcher.parse(new BufferedReader(reader)); - } catch (IOException ex) { - MessageDialog.openError(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), //$NON-NLS-1$ - PatchMessages.getString("InputPatchPage.ParseError.message")); //$NON-NLS-1$ - } - - try { - reader.close(); - } catch (IOException x) { - } - } - - Diff[] diffs= patcher.getDiffs(); - if (diffs == null || diffs.length == 0) { - String format= PatchMessages.getString("InputPatchPage.NoDiffsFound.format"); //$NON-NLS-1$ - String message= MessageFormat.format(format, new String[] { source }); - MessageDialog.openInformation(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), message); //$NON-NLS-1$ - return this; - } - - // if selected target is file ensure that patch file - // contains only a patch for a single file - IResource target= fPatchWizard.getTarget(); - if (target instanceof IFile && diffs.length > 1) { - String format= PatchMessages.getString("InputPatchPage.SingleFileError.format"); //$NON-NLS-1$ - String message= MessageFormat.format(format, new String[] { source }); - MessageDialog.openInformation(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), message); //$NON-NLS-1$ - return this; - } - - // guess prefix count - int guess= 0; // guessPrefix(diffs); - patcher.setStripPrefixSegments(guess); - - return super.getNextPage(); - } - - /* (non-JavaDoc) - * Method declared in IWizardPage. - */ - public boolean canFlipToNextPage() { - // we can't call getNextPage to determine if flipping is allowed since computing - // the next page is quite expensive. So we say yes if the page is complete. - return isPageComplete(); - } - - private void setEnablePatchFile(boolean enable) { - fPatchFileNameField.setEnabled(enable); - fPatchFileBrowseButton.setEnabled(enable); - } - - /** - * Create the group for selecting the patch file - */ - private void buildPatchFileGroup(Composite parent) { - - fPatchFileGroup= new Group(parent, SWT.NONE); - fPatchFileGroup.setText(PatchMessages.getString("InputPatchPage.SelectPatch.title")); //$NON-NLS-1$ - GridLayout layout= new GridLayout(); - layout.numColumns= 3; - fPatchFileGroup.setLayout(layout); - fPatchFileGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - // 1st row - fUsePatchFileButton= new Button(fPatchFileGroup, SWT.RADIO); - fUsePatchFileButton.setText(PatchMessages.getString("InputPatchPage.FileButton.text")); //$NON-NLS-1$ - - fPatchFileNameField= new Combo(fPatchFileGroup, SWT.BORDER); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - //gd.horizontalIndent= 8; - gd.widthHint= SIZING_TEXT_FIELD_WIDTH; - fPatchFileNameField.setLayoutData(gd); - - fPatchFileBrowseButton= new Button(fPatchFileGroup, SWT.PUSH); - fPatchFileBrowseButton.setText(PatchMessages.getString("InputPatchPage.ChooseFileButton.text")); //$NON-NLS-1$ - fPatchFileBrowseButton.setLayoutData(new GridData()); - - // 2nd row - fUseClipboardButton= new Button(fPatchFileGroup, SWT.RADIO); - fUseClipboardButton.setText(PatchMessages.getString("InputPatchPage.UseClipboardButton.text")); //$NON-NLS-1$ - gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - gd.horizontalSpan= 2; - fUseClipboardButton.setLayoutData(gd); - - - // Add listeners - fUsePatchFileButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - fShowError= true; - setEnablePatchFile(!getUseClipboard()); - updateWidgetEnablements(); - } - } - ); - fPatchFileNameField.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - setSourceName(fPatchFileNameField.getText()); - updateWidgetEnablements(); - } - } - ); - fPatchFileNameField.addModifyListener( - new ModifyListener() { - public void modifyText(ModifyEvent e) { - fShowError= true; - updateWidgetEnablements(); - } - } - ); - fPatchFileBrowseButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - handlePatchFileBrowseButtonPressed(); - updateWidgetEnablements(); - } - } - ); - - //fPatchFileNameField.setFocus(); - } - - private void buildInputGroup(Composite parent) { - - PatchWizard pw= (PatchWizard) getWizard(); - IResource target= pw.getTarget(); - IWorkspace workspace= target.getWorkspace(); - IWorkspaceRoot root= workspace.getRoot(); - - Tree tree= new Tree(parent, SWT.BORDER); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint= 200; - tree.setLayoutData(gd); - - fPatchTargets= new CheckboxTreeViewer(tree); - fPatchTargets.setLabelProvider(new WorkbenchLabelProvider()); - fPatchTargets.setContentProvider(new WorkbenchContentProvider()); - fPatchTargets.setSorter(new WorkbenchViewerSorter()); - fPatchTargets.setInput(root); - if (target != null) { - fPatchTargets.expandToLevel(target, 0); - fPatchTargets.setSelection(new StructuredSelection(target)); - } - - // register listeners - fPatchTargets.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - fPatchWizard.setTargets(PatchWizard.getResource(event.getSelection())); - updateWidgetEnablements(); - } - } - ); - } - - /** - * Updates the enable state of this page's controls. - */ - private void updateWidgetEnablements() { - - String error= null; - - ISelection selection= fPatchTargets.getSelection(); - boolean anySelected= selection != null && !selection.isEmpty(); - if (!anySelected) - error= PatchMessages.getString("InputPatchPage.NothingSelected.message"); //$NON-NLS-1$ - - boolean gotPatch= false; - if (getUseClipboard()) { - Control c= getControl(); - if (c != null) { - Clipboard clipboard= new Clipboard(c.getDisplay()); - Object o= clipboard.getContents(TextTransfer.getInstance()); - clipboard.dispose(); - if (o instanceof String) { - String s= ((String) o).trim(); - if (s.length() > 0) - gotPatch= true; - else - error= PatchMessages.getString("InputPatchPage.ClipboardIsEmpty.message"); //$NON-NLS-1$ - } else - error= PatchMessages.getString("InputPatchPage.NoTextInClipboard.message"); //$NON-NLS-1$ - } else - error= PatchMessages.getString("InputPatchPage.CouldNotReadClipboard.message"); //$NON-NLS-1$ - } else { - String path= fPatchFileNameField.getText(); - if (path != null && path.length() > 0) { - File file= new File(path); - gotPatch= file.exists() && file.isFile() && file.length() > 0; - if (!gotPatch) - error= PatchMessages.getString("InputPatchPage.CannotLocatePatch.message") + path; //$NON-NLS-1$ - } else { - error= PatchMessages.getString("InputPatchPage.NoFileName.message"); //$NON-NLS-1$ - } - } - - setPageComplete(anySelected && gotPatch); - if (fShowError) - setErrorMessage(error); - } - - protected void handlePatchFileBrowseButtonPressed() { - FileDialog dialog= new FileDialog(getShell(), SWT.NONE); - dialog.setText(PatchMessages.getString("InputPatchPage.SelectPatchFileDialog.title")); //$NON-NLS-1$ - dialog.setFilterPath(getPatchFilePath()); - String res= dialog.open(); - if (res == null) - return; - - String patchFilePath= dialog.getFileName(); - IPath filterPath= new Path(dialog.getFilterPath()); - IPath path= filterPath.append(patchFilePath).makeAbsolute(); - patchFilePath= path.toOSString(); - //fDialogSettings.put(IUIConstants.DIALOGSTORE_LASTEXTJAR, filterPath.toOSString()); - - fPatchFileNameField.setText(patchFilePath); - //setSourceName(patchFilePath); - } - - /** - * Sets the source name of the import to be the supplied path. - * Adds the name of the path to the list of items in the - * source combo and selects it. - * - * @param path the path to be added - */ - protected void setSourceName(String path) { - - if (path.length() > 0) { - - String[] currentItems= fPatchFileNameField.getItems(); - int selectionIndex= -1; - for (int i= 0; i < currentItems.length; i++) - if (currentItems[i].equals(path)) - selectionIndex= i; - - if (selectionIndex < 0) { // not found in history - int oldLength= currentItems.length; - String[] newItems= new String[oldLength + 1]; - System.arraycopy(currentItems, 0, newItems, 0, oldLength); - newItems[oldLength]= path; - fPatchFileNameField.setItems(newItems); - selectionIndex= oldLength; - } - fPatchFileNameField.select(selectionIndex); - - //resetSelection(); - } - } - - /** - * The Finish button was pressed. Try to do the required work now and answer - * a boolean indicating success. If false is returned then the wizard will - * not close. - * - * @return boolean - */ - public boolean finish() { -// if (!ensureSourceIsValid()) -// return false; - - saveWidgetValues(); - -// Iterator resourcesEnum = getSelectedResources().iterator(); -// List fileSystemObjects = new ArrayList(); -// while (resourcesEnum.hasNext()) { -// fileSystemObjects.add( -// ((FileSystemElement) resourcesEnum.next()).getFileSystemObject()); -// } -// -// if (fileSystemObjects.size() > 0) -// return importResources(fileSystemObjects); -// -// MessageDialog -// .openInformation( -// getContainer().getShell(), -// DataTransferMessages.getString("DataTransfer.information"), //$NON-NLS-1$ -// DataTransferMessages.getString("FileImport.noneSelected")); //$NON-NLS-1$ -// -// return false; - - return true; - } - - /** - * Use the dialog store to restore widget values to the values that they held - * last time this wizard was used to completion - */ - private void restoreWidgetValues() { - - boolean useClipboard= false; - - IDialogSettings settings= getDialogSettings(); - if (settings != null) { - - useClipboard= settings.getBoolean(STORE_USE_CLIPBOARD_ID); - - // set filenames history - String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID); - if (sourceNames != null) - for (int i= 0; i < sourceNames.length; i++) - if (sourceNames[i] != null && sourceNames[i].length() > 0) - fPatchFileNameField.add(sourceNames[i]); - - // set patch file path - String patchFilePath= settings.get(STORE_PATCH_FILES_ID); - if (patchFilePath != null) - setSourceName(patchFilePath); - } - - // set 'Use Clipboard' radio buttons - setUseClipboard(useClipboard); - } - - /** - * Since Finish was pressed, write widget values to the dialog store so that they - * will persist into the next invocation of this wizard page - */ - void saveWidgetValues() { - IDialogSettings settings= getDialogSettings(); - if (settings != null) { - - settings.put(STORE_USE_CLIPBOARD_ID, getUseClipboard()); - settings.put(STORE_PATCH_FILES_ID, getPatchFilePath()); - - // update source names history - String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID); - if (sourceNames == null) - sourceNames= new String[0]; - - sourceNames= addToHistory(sourceNames, getPatchFilePath()); - settings.put(STORE_PATCH_FILES_ID, sourceNames); - } - } - - // static helpers - - private void setUseClipboard(boolean useClipboard) { - if (useClipboard) - fUseClipboardButton.setSelection(true); - else - fUsePatchFileButton.setSelection(true); - setEnablePatchFile(!useClipboard); - } - - private boolean getUseClipboard() { - if (fUseClipboardButton != null) - return fUseClipboardButton.getSelection(); - return false; - } - - private String getPatchFilePath() { - if (fPatchFileNameField != null) - return fPatchFileNameField.getText(); - return ""; //$NON-NLS-1$ - } - - /** - * Adds an entry to a history, while taking care of duplicate history items - * and excessively long histories. The assumption is made that all histories - * should be of length <code>COMBO_HISTORY_LENGTH</code>. - * - * @param history the current history - * @param newEntry the entry to add to the history - */ - protected static String[] addToHistory(String[] history, String newEntry) { - java.util.ArrayList l= new java.util.ArrayList(java.util.Arrays.asList(history)); - - l.remove(newEntry); - l.add(0,newEntry); - - // since only one new item was added, we can be over the limit - // by at most one item - if (l.size() > COMBO_HISTORY_LENGTH) - l.remove(COMBO_HISTORY_LENGTH); - - return (String[]) l.toArray(new String[l.size()]); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java deleted file mode 100644 index 33b9ca582..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.util.*; - -import org.eclipse.jface.util.Assert; - -/* package */ class LineReader { - - private boolean fHaveChar= false; - private int fLastChar; - private boolean fSawEOF= false; - private BufferedReader fReader; - private boolean fIgnoreSingleCR= false; - - - /* package */ LineReader(BufferedReader reader) { - fReader= reader; - Assert.isNotNull(reader); - } - - void ignoreSingleCR() { - fIgnoreSingleCR= true; - } - - /** - * Reads a line of text. A line is considered to be terminated by any one - * of a line feed ('\n'), a carriage return ('\r'), or a carriage return - * followed immediately by a linefeed. - * @return A string containing the contents of the line including - * the line-termination characters, or <code>null</code> if the end of the - * stream has been reached - * @exception IOException If an I/O error occurs - */ - /* package */ String readLine() throws IOException { - StringBuffer sb= null; - - while (!fSawEOF) { - int c= readChar(); - if (c == -1) { - fSawEOF= true; - break; - } - if (sb == null) - sb= new StringBuffer(); - sb.append((char)c); - if (c == '\n') - break; - if (c == '\r') { - c= readChar(); - if (c == -1) { - fSawEOF= true; - break; // EOF - } - if (c != '\n') { - if (fIgnoreSingleCR) { - sb.append((char)c); - continue; - } else { - fHaveChar= true; - fLastChar= c; - } - } else - sb.append((char)c); - break; - } - } - - if (sb != null) - return sb.toString(); - return null; - } - - /* package */ void close() { - try { - fReader.close(); - } catch (IOException ex) { - } - } - - /* package */ List readLines() { - try { - List lines= new ArrayList(); - String line; - while ((line= readLine()) != null) - lines.add(line); - return lines; - } catch (IOException ex) { - //System.out.println("error while reading file: " + fileName + "(" + ex + ")"); - } finally { - close(); - } - return null; - } - /** - * Returns the number of characters in the given string without - * counting a trailing line separator. - */ - /* package */ int lineContentLength(String line) { - if (line == null) - return 0; - int length= line.length(); - for (int i= length-1; i >= 0; i--) { - char c= line.charAt(i); - if (c =='\n' || c == '\r') - length--; - else - break; - } - return length; - } - - //---- private - - private int readChar() throws IOException { - if (fHaveChar) { - fHaveChar= false; - return fLastChar; - } - return fReader.read(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java deleted file mode 100644 index c4aee6382..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -public class PatchErrorDialog { - - private PatchErrorDialog() { - // no instance. - } - -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java deleted file mode 100644 index 569b875f6..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class PatchMessages { - - private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.patch.PatchMessages";//$NON-NLS-1$ - - private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); - - private PatchMessages() { - } - - public static String getString(String key) { - try { - return fgResourceBundle.getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties deleted file mode 100644 index 20c86331f..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties +++ /dev/null @@ -1,90 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# -# 'Compare with Patch' Action -# -PatchAction.ExceptionTitle=Saving Resources -PatchAction.Exception=Unexpected exception. See log for details -PatchAction.SavingDirtyEditorsTask=Saving dirty editors -PatchAction.AlwaysSaveQuestion=&Always save all modified resources automatically prior to patching -PatchAction.SaveAllQuestion=Save all modified resources -PatchAction.SaveAllDescription=All modified resources have to be saved before this operation.\nClick 'OK' to confirm or click 'Cancel'. - -# -# PatchWizard -# -PatchWizard.title=Apply Patch -PatchWizard.unexpectedException.message= Unexpected exception while applying the patch. See log for a detailed error description. - -# -# InputPatchPage -# -InputPatchPage.title= Patch Input Specification -InputPatchPage.message= Define the resource to patch and the patch to apply -InputPatchPage.Clipboard=Clipboard -InputPatchPage.SelectInput=Select a single file or folder to patch: -InputPatchPage.PatchErrorDialog.title=Patch Error -InputPatchPage.PatchErrorDialog=Patch Error -InputPatchPage.SelectPatch.title=Select Patch -InputPatchPage.FileButton.text=Fil&e -InputPatchPage.ChooseFileButton.text=&Browse... -InputPatchPage.UseClipboardButton.text=&Clipboard -InputPatchPage.NothingSelected.message=Select a file or folder to be patched -InputPatchPage.ClipboardIsEmpty.message=Clipboard is empty -InputPatchPage.NoTextInClipboard.message=Clipboard does not contain text -InputPatchPage.CouldNotReadClipboard.message=Couldn't retrieve clipboard contents -InputPatchPage.CannotLocatePatch.message=Can't locate patch file: -InputPatchPage.NoFileName.message=No file name -InputPatchPage.SelectPatchFileDialog.title=Select Patch File -InputPatchPage.PatchFileNotFound.message=Patch file not found. -InputPatchPage.ParseError.message=Error while parsing patch -InputPatchPage.Clipboard.title=Clipboard -InputPatchPage.PatchFile.title=Patch file -InputPatchPage.NoDiffsFound.format={0} does not contain valid patch. -InputPatchPage.SingleFileError.format={0} contains multiple patches. You cannot apply them to a single file. - -# -# PreviewPatchPage -# -PreviewPatchPage.title= Verify Patch -PreviewPatchPage.message= The tree shows the contents of the patch.\nA checked item indicates that a patch can be applied successfully. To remove an item, clear its checkbox. -PreviewPatchPage.Left.title= Original -PreviewPatchPage.Right.title= Result -PreviewPatchPage.PatchOptions.title=Patch Options -PreviewPatchPage.IgnoreSegments.text=&Ignore leading path name segments: -PreviewPatchPage.ReversePatch.text=&Reverse patch -PreviewPatchPage.FuzzFactor.text=&Maximum fuzz factor: -PreviewPatchPage.FuzzFactor.tooltip=Allow context to shift this number of lines from the original place -PreviewPatchPage.IgnoreWhitespace.text=Ignore &white space -PreviewPatchPage.NoName.text=no name -PreviewPatchPage.FileExists.error=(file already exists) -PreviewPatchPage.FileDoesNotExist.error=(file doesn't exist) -PreviewPatchPage.NoMatch.error=(no match) -PreviewPatchPage.FileIsReadOnly.error=(file is read only) -PreviewPatchPage.GuessFuzz.text= &Guess -PreviewPatchPage.GuessFuzzProgress.text= Guessing Fuzz Factor... -PreviewPatchPage.GuessFuzzProgress.format= {0} (hunk #{1}) - -# -# Patcher -# -Patcher.ErrorDialog.title=title -Patcher.DeleteError.message=Error while deleting resource -Patcher.UpdateError.message=Error while updating resource -Patcher.RefreshError.message=Error while refreshing from local -Patcher.Marker.message=Rejected patch -Patcher.Task.message=Patching - -# -# PatchCompareInput -# -PatchCompareInput.RightTitle.format= Patch: {0} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java deleted file mode 100644 index 52ad23e2d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; - -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.Wizard; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -import org.eclipse.compare.internal.*; - - -/* package */ class PatchWizard extends Wizard { - - // dialog store id constants - private final static String DIALOG_SETTINGS_KEY= "PatchWizard"; //$NON-NLS-1$ - - private boolean fHasNewDialogSettings; - - private InputPatchPage fPatchWizardPage; - private PreviewPatchPage fPreviewPatchPage; - - private Patcher fPatcher; - private IResource fTarget; - - - /** - * Creates a wizard for applying a patch file to the workspace. - */ - /* package */ PatchWizard(ISelection selection) { - - setTargets(getResource(selection)); - - fPatcher= new Patcher(); - - setWindowTitle(PatchMessages.getString("PatchWizard.title")); //$NON-NLS-1$ - - IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings(); - IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY); //$NON-NLS-1$ - if (section == null) - fHasNewDialogSettings= true; - else { - fHasNewDialogSettings= false; - setDialogSettings(section); - } - } - - static IResource[] getResource(ISelection selection) { - IResource[] rs= Utilities.getResources(selection); - ArrayList list= null; - for (int i= 0; i < rs.length; i++) { - IResource r= rs[i]; - if (r != null && r.isAccessible()) { - if (list == null) - list= new ArrayList(); - list.add(r); - } - } - if (list != null && list.size() > 0) - return (IResource[]) list.toArray(new IResource[list.size()]); - return null; - } - - Patcher getPatcher() { - return fPatcher; - } - - IResource getTarget() { - return fTarget; - } - - void setTargets(IResource[] targets) { - if (targets != null) - fTarget= targets[0]; // right now we can only deal with a single selection - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public void addPages() { - super.addPages(); - - addPage(fPatchWizardPage= new InputPatchPage(this)); - addPage(fPreviewPatchPage= new PreviewPatchPage(this)); - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public boolean needsProgressMonitor() { - return true; - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public boolean performFinish() { - - fPatcher.setName(fPatchWizardPage.getPatchName()); - - try { - WorkspaceModifyOperation op= new WorkspaceModifyOperation() { - protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - fPatcher.applyAll(getTarget(), monitor); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } - } - }; - getContainer().run(true, false, op); - - } catch (InvocationTargetException e) { - ExceptionHandler.handle(e, - PatchMessages.getString("PatchWizard.title"), //$NON-NLS-1$ - PatchMessages.getString("PatchWizard.unexpectedException.message")); //$NON-NLS-1$ - } catch (InterruptedException e) { - // cannot happen - } - - // Save the dialog settings - if (fHasNewDialogSettings) { - IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings(); - IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY); - section= workbenchSettings.addNewSection(DIALOG_SETTINGS_KEY); - setDialogSettings(section); - } - - fPatchWizardPage.saveWidgetValues(); - //fPreviewPatchPage.saveWidgetValues(); - - return true; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java deleted file mode 100644 index df071917e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java +++ /dev/null @@ -1,1055 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.text.*; -import java.util.*; - -import org.eclipse.swt.SWT; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.*; -import org.eclipse.core.resources.*; - -import org.eclipse.compare.structuremergeviewer.Differencer; - -/** - * A Patcher - * - knows how to parse various patch file formats into some in-memory structure, - * - holds onto the parsed data and the options to use when applying the patches, - * - knows how to apply the patches to files and folders. - */ -public class Patcher { - - private static final boolean DEBUG= false; - - private static final String DEV_NULL= "/dev/null"; //$NON-NLS-1$ - - private static final String REJECT_FILE_EXTENSION= ".rej"; //$NON-NLS-1$ - - private static final String MARKER_TYPE= "org.eclipse.compare.rejectedPatchMarker"; //$NON-NLS-1$ - - // diff formats -// private static final int CONTEXT= 0; -// private static final int ED= 1; -// private static final int NORMAL= 2; -// private static final int UNIFIED= 3; - - // we recognize the following date/time formats - private static DateFormat[] DATE_FORMATS= new DateFormat[] { - new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy"), //$NON-NLS-1$ - new SimpleDateFormat("yyyy/MM/dd kk:mm:ss"), //$NON-NLS-1$ - new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy", Locale.US) //$NON-NLS-1$ - }; - - private String fName; - private Diff[] fDiffs; - // patch options - private int fStripPrefixSegments; - private int fFuzz; - private boolean fIgnoreWhitespace= false; - private boolean fIgnoreLineDelimiter= true; - private boolean fPreserveLineDelimiters= false; - private boolean fReverse= false; - private boolean fAdjustShift= true; - - - Patcher() { - } - - //---- options - - void setName(String name) { - fName= name; - } - - String getName() { - return fName; - } - - /** - * Returns an array of Diffs after a sucessfull call to <code>parse</code>. - * If <code>parse</code> hasn't been called returns <code>null</code>. - */ - Diff[] getDiffs() { - return fDiffs; - } - - IPath getPath(Diff diff) { - IPath path= diff.getPath(); - if (fStripPrefixSegments > 0 && fStripPrefixSegments < path.segmentCount()) - path= path.removeFirstSegments(fStripPrefixSegments); - return path; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setStripPrefixSegments(int strip) { - if (strip != fStripPrefixSegments) { - fStripPrefixSegments= strip; - return true; - } - return false; - } - - int getStripPrefixSegments() { - return fStripPrefixSegments; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setFuzz(int fuzz) { - if (fuzz != fFuzz) { - fFuzz= fuzz; - return true; - } - return false; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setReversed(boolean reverse) { - if (fReverse != reverse) { - fReverse= reverse; - - for (int i= 0; i < fDiffs.length; i++) - fDiffs[i].reverse(); - - return true; - } - return false; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setIgnoreWhitespace(boolean ignoreWhitespace) { - if (ignoreWhitespace != fIgnoreWhitespace) { - fIgnoreWhitespace= ignoreWhitespace; - return true; - } - return false; - } - - //---- parsing patch files - - /* package */ void parse(BufferedReader reader) throws IOException { - List diffs= new ArrayList(); - String line= null; - boolean reread= false; - String diffArgs= null; - String fileName= null; - - LineReader lr= new LineReader(reader); - if (!"carbon".equals(SWT.getPlatform())) //$NON-NLS-1$ - lr.ignoreSingleCR(); - - // read leading garbage - while (true) { - if (!reread) - line= lr.readLine(); - reread= false; - if (line == null) - break; - if (line.length() < 4) - continue; // too short - - // remember some infos - if (line.startsWith("Index: ")) { //$NON-NLS-1$ - fileName= line.substring(7).trim(); - continue; - } - if (line.startsWith("diff")) { //$NON-NLS-1$ - diffArgs= line.substring(4).trim(); - continue; - } - - if (line.startsWith("--- ")) { //$NON-NLS-1$ - line= readUnifiedDiff(diffs, lr, line, diffArgs, fileName); - diffArgs= fileName= null; - reread= true; - } else if (line.startsWith("*** ")) { //$NON-NLS-1$ - line= readContextDiff(diffs, lr, line, diffArgs, fileName); - diffArgs= fileName= null; - reread= true; - } - } - - lr.close(); - - fDiffs= (Diff[]) diffs.toArray((Diff[]) new Diff[diffs.size()]); - } - - /** - * Returns the next line that does not belong to this diff - */ - private String readUnifiedDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException { - - String[] oldArgs= split(line.substring(4)); - - // read info about new file - line= reader.readLine(); - if (line == null || !line.startsWith("+++ ")) //$NON-NLS-1$ - return line; - - String[] newArgs= split(line.substring(4)); - - Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1), - extractPath(newArgs, 0, fileName), extractDate(newArgs, 1)); - diffs.add(diff); - - int[] oldRange= new int[2]; - int[] newRange= new int[2]; - List lines= new ArrayList(); - - try { - // read lines of hunk - while (true) { - - line= reader.readLine(); - if (line == null) - return null; - - if (reader.lineContentLength(line) == 0) { - //System.out.println("Warning: found empty line in hunk; ignored"); - //lines.add(' ' + line); - continue; - } - - char c= line.charAt(0); - switch (c) { - case '@': - if (line.startsWith("@@ ")) { //$NON-NLS-1$ - // flush old hunk - if (lines.size() > 0) { - new Hunk(diff, oldRange, newRange, lines); - lines.clear(); - } - - // format: @@ -oldStart,oldLength +newStart,newLength @@ - extractPair(line, '-', oldRange); - extractPair(line, '+', newRange); - continue; - } - break; - case ' ': - case '+': - case '-': - lines.add(line); - continue; - case '\\': - if (line.startsWith("No newline at end of file", 2)) { //$NON-NLS-1$ - int lastIndex= lines.size(); - if (lastIndex > 0) { - line= (String) lines.get(lastIndex-1); - int end= line.length()-1; - char lc= line.charAt(end); - if (lc == '\n') { - end--; - if (end > 0 && line.charAt(end-1) == '\r') - end--; - } else if (lc == '\r') { - end--; - } - line= line.substring(0, end); - lines.set(lastIndex-1, line); - } - continue; - } - break; - default: - if (DEBUG) { - int a1= c, a2= 0; - if (line.length() > 1) - a2= line.charAt(1); - System.out.println("char: " + a1 + " " + a2); //$NON-NLS-1$ //$NON-NLS-2$ - } - break; - } - return line; - } - } finally { - if (lines.size() > 0) - new Hunk(diff, oldRange, newRange, lines); - diff.finish(); - } - } - - /** - * Returns the next line that does not belong to this diff - */ - private String readContextDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException { - - String[] oldArgs= split(line.substring(4)); - - // read info about new file - line= reader.readLine(); - if (line == null || !line.startsWith("--- ")) //$NON-NLS-1$ - return line; - - String[] newArgs= split(line.substring(4)); - - Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1), - extractPath(newArgs, 0, fileName), extractDate(newArgs, 1)); - diffs.add(diff); - - int[] oldRange= new int[2]; - int[] newRange= new int[2]; - List oldLines= new ArrayList(); - List newLines= new ArrayList(); - List lines= oldLines; - - try { - // read lines of hunk - while (true) { - - line= reader.readLine(); - if (line == null) - return line; - - int l= line.length(); - if (l == 0) - continue; - if (l > 1) { - switch (line.charAt(0)) { - case '*': - if (line.startsWith("***************")) { // new hunk //$NON-NLS-1$ - // flush old hunk - if (oldLines.size() > 0 || newLines.size() > 0) { - new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines)); - oldLines.clear(); - newLines.clear(); - } - continue; - } - if (line.startsWith("*** ")) { // old range //$NON-NLS-1$ - // format: *** oldStart,oldEnd *** - extractPair(line, ' ', oldRange); - oldRange[1]= oldRange[1]-oldRange[0]+1; - lines= oldLines; - continue; - } - break; - case ' ': // context line - case '+': // addition - case '!': // change - if (line.charAt(1) == ' ') { - lines.add(line); - continue; - } - break; - case '-': - if (line.charAt(1) == ' ') { // deletion - lines.add(line); - continue; - } - if (line.startsWith("--- ")) { // new range //$NON-NLS-1$ - // format: *** newStart,newEnd *** - extractPair(line, ' ', newRange); - newRange[1]= newRange[1]-newRange[0]+1; - lines= newLines; - continue; - } - break; - default: - break; - } - } - return line; - } - } finally { - // flush last hunk - if (oldLines.size() > 0 || newLines.size() > 0) - new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines)); - diff.finish(); - } - } - - /** - * Creates a List of lines in the unified format from - * two Lists of lines in the 'classic' format. - */ - private List unifyLines(List oldLines, List newLines) { - List result= new ArrayList(); - - String[] ol= (String[]) oldLines.toArray(new String[oldLines.size()]); - String[] nl= (String[]) newLines.toArray(new String[newLines.size()]); - - int oi= 0, ni= 0; - - while (true) { - - char oc= 0; - String o= null; - if (oi < ol.length) { - o= ol[oi]; - oc= o.charAt(0); - } - - char nc= 0; - String n= null; - if (ni < nl.length) { - n= nl[ni]; - nc= n.charAt(0); - } - - // EOF - if (oc == 0 && nc == 0) - break; - - // deletion in old - if (oc == '-') { - do { - result.add('-' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == '-'); - continue; - } - - // addition in new - if (nc == '+') { - do { - result.add('+' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == '+'); - continue; - } - - // differing lines on both sides - if (oc == '!' && nc == '!') { - // remove old - do { - result.add('-' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == '!'); - - // add new - do { - result.add('+' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == '!'); - - continue; - } - - // context lines - if (oc == ' ' && nc == ' ') { - do { - Assert.isTrue(o.equals(n), "non matching context lines"); //$NON-NLS-1$ - result.add(' ' + o.substring(2)); - oi++; - ni++; - if (oi >= ol.length || ni >= nl.length) - break; - o= ol[oi]; - n= nl[ni]; - } while (o.charAt(0) == ' ' && n.charAt(0) == ' '); - continue; - } - - if (oc == ' ') { - do { - result.add(' ' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == ' '); - continue; - } - - if (nc == ' ') { - do { - result.add(' ' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == ' '); - continue; - } - - Assert.isTrue(false, "unexpected char <" + oc + "> <" + nc + ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - return result; - } - - /** - * Breaks the given string into tab separated substrings. - * Leading and trailing whitespace is removed from each token. - */ - private String[] split(String line) { - List l= new ArrayList(); - StringTokenizer st= new StringTokenizer(line, "\t"); //$NON-NLS-1$ - while (st.hasMoreElements()) { - String token= st.nextToken().trim(); - if (token.length() > 0) - l.add(token); - } - return (String[]) l.toArray(new String[l.size()]); - } - - /** - * @return the parsed time/date in milliseconds or -1 on error - */ - private long extractDate(String[] args, int n) { - if (n < args.length) { - String line= args[n]; - for (int i= 0; i < DATE_FORMATS.length; i++) { - DATE_FORMATS[i].setLenient(true); - try { - Date date= DATE_FORMATS[i].parse(line); - return date.getTime(); - } catch (ParseException ex) { - } - } - // System.err.println("can't parse date: <" + line + ">"); - } - return -1; - } - - /** - * Returns null if file name is "/dev/null". - */ - private IPath extractPath(String[] args, int n, String path2) { - if (n < args.length) { - String path= args[n]; - if (DEV_NULL.equals(path)) - return null; - int pos= path.lastIndexOf(':'); - if (pos >= 0) - path= path.substring(0, pos); - if (path2 != null && !path2.equals(path)) { - if (DEBUG) System.out.println("path mismatch: " + path2); //$NON-NLS-1$ - path= path2; - } - return new Path(path); - } - return null; - } - - /** - * Tries to extract two integers separated by a comma. - * The parsing of the line starts at the position after - * the first occurrence of the given character start an ends - * at the first blank (or the end of the line). - * If only a single number is found this is assumed to be the length of the range. - * In this case the start of the range is set to 1. - * If an error occurs the range -1,-1 is returned. - */ - private void extractPair(String line, char start, int[] pair) { - pair[0]= pair[1]= -1; - int startPos= line.indexOf(start); - if (startPos < 0) { - if (DEBUG) System.out.println("parsing error in extractPair: couldn't find \'" + start + "\'"); //$NON-NLS-1$ //$NON-NLS-2$ - return; - } - line= line.substring(startPos+1); - int endPos= line.indexOf(' '); - if (endPos < 0) { - if (DEBUG) System.out.println("parsing error in extractPair: couldn't find end blank"); //$NON-NLS-1$ - return; - } - line= line.substring(0, endPos); - int comma= line.indexOf(','); - if (comma >= 0) { - pair[0]= Integer.parseInt(line.substring(0, comma)); - pair[1]= Integer.parseInt(line.substring(comma+1)); - } else { - pair[0]= 1; - pair[1]= Integer.parseInt(line.substring(comma+1)); - } - } - - //---- applying a patch file - - /** - * Tries to patch the given lines with the specified Diff. - * Any hunk that couldn't be applied is returned in the list failedHunks. - */ - /* package */ void patch(Diff diff, List lines, List failedHunks) { - - int shift= 0; - Iterator iter= diff.fHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - hunk.fMatches= false; - shift= patch(hunk, lines, shift, failedHunks); - } - } - - /** - * Tries to apply the specified hunk to the given lines. - * If the hunk cannot be applied at the original position - * the methods tries Fuzz lines before and after. - * If this fails the Hunk is added to the given list of failed hunks. - */ - private int patch(Hunk hunk, List lines, int shift, List failedHunks) { - if (tryPatch(hunk, lines, shift)) { - shift+= doPatch(hunk, lines, shift); - } else { - boolean found= false; - int oldShift= shift; - - for (int i= 1; i <= fFuzz; i++) { - if (tryPatch(hunk, lines, shift-i)) { - if (fAdjustShift) - shift-= i; - found= true; - break; - } - } - - if (! found) { - for (int i= 1; i <= fFuzz; i++) { - if (tryPatch(hunk, lines, shift+i)) { - if (fAdjustShift) - shift+= i; - found= true; - break; - } - } - } - - if (found) { - if (DEBUG) System.out.println("patched hunk at offset: " + (shift-oldShift)); //$NON-NLS-1$ - shift+= doPatch(hunk, lines, shift); - } else { - if (failedHunks != null) { - if (DEBUG) System.out.println("failed hunk"); //$NON-NLS-1$ - failedHunks.add(hunk); - } - } - } - return shift; - } - - /** - * Tries to apply the given hunk on the specified lines. - * The parameter shift is added to the line numbers given - * in the hunk. - */ - private boolean tryPatch(Hunk hunk, List lines, int shift) { - int pos= hunk.fOldStart + shift; - //int contextMatches= 0; - int deleteMatches= 0; - for (int i= 0; i < hunk.fLines.length; i++) { - String s= hunk.fLines[i]; - Assert.isTrue(s.length() > 0); - String line= s.substring(1); - char controlChar= s.charAt(0); - if (controlChar == ' ') { // context lines - while (true) { - if (pos < 0 || pos >= lines.size()) - return false; - if (linesMatch(line, (String) lines.get(pos))) { - //contextMatches++; - pos++; - break; - } - //if (contextMatches <= 0) - return false; - //pos++; - } - } else if (controlChar == '-') { - // deleted lines - while (true) { - if (pos < 0 || pos >= lines.size()) - return false; - if (linesMatch(line, (String) lines.get(pos))) { - deleteMatches++; - pos++; - break; - } - if (deleteMatches <= 0) - return false; - pos++; - } - } else if (controlChar == '+') { - // added lines - // we don't have to do anything for a 'try' - } else - Assert.isTrue(false, "tryPatch: unknown control charcter: " + controlChar); //$NON-NLS-1$ - } - return true; - } - - private int doPatch(Hunk hunk, List lines, int shift) { - int pos= hunk.fOldStart + shift; - for (int i= 0; i < hunk.fLines.length; i++) { - String s= hunk.fLines[i]; - Assert.isTrue(s.length() > 0); - String line= s.substring(1); - char controlChar= s.charAt(0); - if (controlChar == ' ') { // context lines - while (true) { - Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in context"); //$NON-NLS-1$ - if (linesMatch(line, (String) lines.get(pos))) { - pos++; - break; - } - pos++; - } - } else if (controlChar == '-') { - // deleted lines - while (true) { - Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in deleted lines"); //$NON-NLS-1$ - if (linesMatch(line, (String) lines.get(pos))) { - break; - } - pos++; - } - lines.remove(pos); - } else if (controlChar == '+') { - // added lines - lines.add(pos, line); - pos++; - } else - Assert.isTrue(false, "doPatch: unknown control character: " + controlChar); //$NON-NLS-1$ - } - hunk.fMatches= true; - return hunk.fNewLength - hunk.fOldLength; - } - - public void applyAll(IResource target, IProgressMonitor pm) throws CoreException { - - final int WORK_UNIT= 10; - - IFile singleFile= null; // file to be patched - IContainer container= null; - if (target instanceof IContainer) - container= (IContainer) target; - else if (target instanceof IFile) { - singleFile= (IFile) target; - container= singleFile.getParent(); - } else { - Assert.isTrue(false); - } - - if (pm != null) { - String message= PatchMessages.getString("Patcher.Task.message"); //$NON-NLS-1$ - pm.beginTask(message, fDiffs.length*WORK_UNIT); - } - - for (int i= 0; i < fDiffs.length; i++) { - - int workTicks= WORK_UNIT; - - Diff diff= fDiffs[i]; - if (diff.isEnabled()) { - - IPath path= getPath(diff); - if (pm != null) - pm.subTask(path.toString()); - - IFile file= singleFile != null - ? singleFile - : createPath(container, path); - - List failed= new ArrayList(); - List result= null; - - int type= diff.getType(); - switch (type) { - case Differencer.ADDITION: - // patch it and collect rejected hunks - result= apply(diff, file, true, failed); - store(createString(result), file, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - case Differencer.DELETION: - file.delete(true, true, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - case Differencer.CHANGE: - // patch it and collect rejected hunks - result= apply(diff, file, false, failed); - store(createString(result), file, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - } - - if (failed.size() > 0) { - IPath pp= null; - if (path.segmentCount() > 1) { - pp= path.removeLastSegments(1); - pp= pp.append(path.lastSegment() + REJECT_FILE_EXTENSION); - } else - pp= new Path(path.lastSegment() + REJECT_FILE_EXTENSION); - file= createPath(container, pp); - if (file != null) { - store(getRejected(failed), file, pm); - try { - IMarker marker= file.createMarker(MARKER_TYPE); - marker.setAttribute(IMarker.MESSAGE, PatchMessages.getString("Patcher.Marker.message")); //$NON-NLS-1$ - marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH); - } catch (CoreException ex) { - } - } - } - } - - if (pm != null) { - if (pm.isCanceled()) - break; - if (workTicks > 0) - pm.worked(workTicks); - } - } - } - - /** - * Reads the contents from the given file and returns them as - * a List of lines. - */ - List load(IFile file, boolean create) { - List lines= null; - if (!create && file != null) { - // read current contents - InputStream is= null; - try { - is= file.getContents(); - - Reader streamReader= null; - try { - streamReader= new InputStreamReader(is, ResourcesPlugin.getEncoding()); - } catch (UnsupportedEncodingException x) { - // use default encoding - streamReader= new InputStreamReader(is); - } - - BufferedReader reader= new BufferedReader(streamReader); - LineReader lr= new LineReader(reader); - if (!"carbon".equals(SWT.getPlatform())) //$NON-NLS-1$ - lr.ignoreSingleCR(); - lines= lr.readLines(); - } catch(CoreException ex) { - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - } - } - } - - if (lines == null) - lines= new ArrayList(); - return lines; - } - - List apply(Diff diff, IFile file, boolean create, List failedHunks) { - List lines= load(file, create); - patch(diff, lines, failedHunks); - return lines; - } - - /** - * Converts the string into bytes and stores them in the given file. - */ - private void store(String contents, IFile file, IProgressMonitor pm) throws CoreException { - - byte[] bytes; - try { - bytes= contents.getBytes(ResourcesPlugin.getEncoding()); - } catch (UnsupportedEncodingException x) { - // uses default encoding - bytes= contents.getBytes(); - } - - InputStream is= new ByteArrayInputStream(bytes); - try { - if (file.exists()) { - file.setContents(is, false, true, pm); - } else { - file.create(is, false, pm); - } - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - } - } - } - - /** - * Concatenates all strings found in the given List. - */ - private String createString(List lines) { - StringBuffer sb= new StringBuffer(); - Iterator iter= lines.iterator(); - if (fPreserveLineDelimiters) { - while (iter.hasNext()) - sb.append((String)iter.next()); - } else { - String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$ - while (iter.hasNext()) { - String line= (String)iter.next(); - int l= length(line); - if (l < line.length()) { // line has delimiter - sb.append(line.substring(0, l)); - sb.append(lineSeparator); - } else { - sb.append(line); - } - } - } - return sb.toString(); - } - - String getRejected(List failedHunks) { - if (failedHunks.size() <= 0) - return null; - - String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$ - StringBuffer sb= new StringBuffer(); - Iterator iter= failedHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - sb.append(hunk.getRejectedDescription()); - sb.append(lineSeparator); - sb.append(hunk.getContent()); - } - return sb.toString(); - } - - /** - * Ensures that a file with the given path exists in - * the given container. Folder are created as necessary. - */ - private IFile createPath(IContainer container, IPath path) throws CoreException { - if (path.segmentCount() > 1) { - IFolder f= container.getFolder(path.uptoSegment(1)); - if (!f.exists()) - f.create(false, true, null); - return createPath(f, path.removeFirstSegments(1)); - } - // a leaf - return container.getFile(path); - } - - /** - * Returns the given string with all whitespace characters removed. - * Whitespace is defined by <code>Character.isWhitespace(...)</code>. - */ - private static String stripWhiteSpace(String s) { - StringBuffer sb= new StringBuffer(); - int l= s.length(); - for (int i= 0; i < l; i++) { - char c= s.charAt(i); - if (!Character.isWhitespace(c)) - sb.append(c); - } - return sb.toString(); - } - - /** - * Compares two strings. - * If fIgnoreWhitespace is true whitespace is ignored. - */ - private boolean linesMatch(String line1, String line2) { - if (fIgnoreWhitespace) - return stripWhiteSpace(line1).equals(stripWhiteSpace(line2)); - if (fIgnoreLineDelimiter) { - int l1= length(line1); - int l2= length(line2); - if (l1 != l2) - return false; - return line1.regionMatches(0, line2, 0, l1); - } - return line1.equals(line2); - } - - /** - * Returns the length (exluding a line delimiter CR, LF, CR/LF) - * of the given string. - */ - /* package */ static int length(String s) { - int l= s.length(); - if (l > 0) { - char c= s.charAt(l-1); - if (c == '\r') - return l-1; - if (c == '\n') { - if (l > 1 && s.charAt(l-2) == '\r') - return l-2; - return l-1; - } - } - return l; - } - - int calculateFuzz(Hunk hunk, List lines, int shift, IProgressMonitor pm, int[] fuzz) { - - hunk.fMatches= false; - if (tryPatch(hunk, lines, shift)) { - shift+= doPatch(hunk, lines, shift); - fuzz[0]= 0; - } else { - boolean found= false; - int hugeFuzz= lines.size(); // the maximum we need for this file - fuzz[0]= -2; // not found - - for (int i= 1; i <= hugeFuzz; i++) { - if (pm.isCanceled()) { - fuzz[0]= -1; - return 0; - } - if (tryPatch(hunk, lines, shift-i)) { - fuzz[0]= i; - if (fAdjustShift) - shift-= i; - found= true; - break; - } - } - - if (! found) { - for (int i= 1; i <= hugeFuzz; i++) { - if (pm.isCanceled()) { - fuzz[0]= -1; - return 0; - } - if (tryPatch(hunk, lines, shift+i)) { - fuzz[0]= i; - if (fAdjustShift) - shift+= i; - found= true; - break; - } - } - } - - if (found) - shift+= doPatch(hunk, lines, shift); - } - return shift; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java deleted file mode 100644 index fe43b86e0..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java +++ /dev/null @@ -1,729 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.lang.reflect.InvocationTargetException; -import java.text.MessageFormat; -import java.util.Iterator; -import java.util.List; -import java.util.ArrayList; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.resource.ImageDescriptor; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.internal.DiffImage; -import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.compare.internal.TimeoutContext; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * Shows the parsed patch file and any mismatches - * between files, hunks and the currently selected - * resources. - */ -/* package */ class PreviewPatchPage extends WizardPage { - - static final int GUESS_TIMEOUT= 1500; // show progress after 1.5sec of fuzz factor guessing - - /** - * Used with CompareInput - */ - static class HunkInput implements ITypedElement, IStreamContentAccessor { - String fContent; - String fType; - - HunkInput(String type, String s) { - fType= type; - fContent= s; - } - public Image getImage() { - return null; - } - public String getName() { - return PatchMessages.getString("PreviewPatchPage.NoName.text"); //$NON-NLS-1$ - } - public String getType() { - return fType; - } - public InputStream getContents() { - return new ByteArrayInputStream(fContent.getBytes()); - } - }; - - private PatchWizard fPatchWizard; - - private Tree fTree; - private Combo fStripPrefixSegments; - private CompareViewerSwitchingPane fHunkViewer; - private Button fIgnoreWhitespaceButton; - private Button fReversePatchButton; - private Text fFuzzField; - - private Image fNullImage; - private Image fAddImage; - private Image fDelImage; - private Image fErrorImage; - private Image fErrorAddImage; - private Image fErrorDelImage; - - private CompareConfiguration fCompareConfiguration; - - - /* package */ PreviewPatchPage(PatchWizard pw) { - super("PreviewPatchPage", //$NON-NLS-1$ - PatchMessages.getString("PreviewPatchPage.title"), null); //$NON-NLS-1$ - - setMessage(PatchMessages.getString("PreviewPatchPage.message")); //$NON-NLS-1$ - - fPatchWizard= pw; - //setPageComplete(false); - - int w= 16; - - ImageDescriptor addId= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$ - ImageDescriptor delId= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$ - - ImageDescriptor errId= CompareUIPlugin.getImageDescriptor("ovr16/error_ov.gif"); //$NON-NLS-1$ - Image errIm= errId.createImage(); - - fNullImage= new DiffImage(null, null, w).createImage(); - fAddImage= new DiffImage(null, addId, w).createImage(); - fDelImage= new DiffImage(null, delId, w).createImage(); - - fErrorImage= new DiffImage(errIm, null, w).createImage(); - fErrorAddImage= new DiffImage(errIm, addId, w).createImage(); - fErrorDelImage= new DiffImage(errIm, delId, w).createImage(); - - fCompareConfiguration= new CompareConfiguration(); - - fCompareConfiguration.setLeftEditable(false); - fCompareConfiguration.setLeftLabel(PatchMessages.getString("PreviewPatchPage.Left.title")); //$NON-NLS-1$ - - fCompareConfiguration.setRightEditable(false); - fCompareConfiguration.setRightLabel(PatchMessages.getString("PreviewPatchPage.Right.title")); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * Method declared in WizardPage - */ - public void setVisible(boolean visible) { - if (visible) - buildTree(); - super.setVisible(visible); - } - - Image getImage(Diff diff) { - if (diff.fMatches) { - switch (diff.getType()) { - case Differencer.ADDITION: - return fAddImage; - case Differencer.DELETION: - return fDelImage; - } - return fNullImage; - } - switch (diff.getType()) { - case Differencer.ADDITION: - return fErrorAddImage; - case Differencer.DELETION: - return fErrorDelImage; - } - return fErrorImage; - } - - Image getImage(Hunk hunk) { - if (hunk.fMatches) - return fNullImage; - return fErrorImage; - } - - public void createControl(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout()); - composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); - - WorkbenchHelp.setHelp(composite, ICompareContextIds.PATCH_PREVIEW_WIZARD_PAGE); - - setControl(composite); - - buildPatchOptionsGroup(composite); - - Splitter splitter= new Splitter(composite, SWT.VERTICAL); - splitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL - | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); - - - // top pane showing diffs and hunks in a check box tree - fTree= new Tree(splitter, SWT.CHECK | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - GridData gd= new GridData(); - gd.verticalAlignment= GridData.FILL; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.grabExcessVerticalSpace= true; - fTree.setLayoutData(gd); - - // bottom pane showing hunks in compare viewer - fHunkViewer= new CompareViewerSwitchingPane(splitter, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - return CompareUI.findContentViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration); - } - }; - gd= new GridData(); - gd.verticalAlignment= GridData.FILL; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.grabExcessVerticalSpace= true; - fHunkViewer.setLayoutData(gd); - - // register listeners - - fTree.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - TreeItem ti= (TreeItem) e.item; - Object data= e.item.getData(); - if (e.detail == SWT.CHECK) { - boolean checked= ti.getChecked(); - if (data instanceof Hunk) { - Hunk hunk= (Hunk) data; - checked= checked && hunk.fMatches; - //hunk.setEnabled(checked); - ti.setChecked(checked); - updateGrayedState(ti); - } else if (data instanceof Diff) { - updateCheckedState(ti); - } - } else { - if (data instanceof Hunk) - PreviewPatchPage.this.fHunkViewer.setInput(createInput((Hunk)data)); - else - PreviewPatchPage.this.fHunkViewer.setInput(null); - } - } - } - ); - - // creating tree's content - buildTree(); - Dialog.applyDialogFont(composite); - } - - /** - * Create the group for setting various patch options - */ - private void buildPatchOptionsGroup(Composite parent) { - - GridLayout gl; - GridData gd; - Label l; - - final Patcher patcher= fPatchWizard.getPatcher(); - - Group group= new Group(parent, SWT.NONE); - group.setText(PatchMessages.getString("PreviewPatchPage.PatchOptions.title")); //$NON-NLS-1$ - gl= new GridLayout(); gl.numColumns= 4; gl.marginHeight= 0; - group.setLayout(gl); - group.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); - - // 1st row - - Composite pair= new Composite(group, SWT.NONE); - gl= new GridLayout(); gl.numColumns= 2; gl.marginHeight= gl.marginWidth= 0; - pair.setLayout(gl); - gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL); - pair.setLayoutData(gd); - - l= new Label(pair, SWT.NONE); - l.setText(PatchMessages.getString("PreviewPatchPage.IgnoreSegments.text")); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL); - l.setLayoutData(gd); - - fStripPrefixSegments= new Combo(pair, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.SIMPLE); - int prefixCnt= patcher.getStripPrefixSegments(); - String prefix= Integer.toString(prefixCnt); - fStripPrefixSegments.add(prefix); - fStripPrefixSegments.setText(prefix); - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_END); - fStripPrefixSegments.setLayoutData(gd); - - addSpacer(group); - - fReversePatchButton= new Button(group, SWT.CHECK); - fReversePatchButton.setText(PatchMessages.getString("PreviewPatchPage.ReversePatch.text")); //$NON-NLS-1$ - - addSpacer(group); - - // 2nd row - pair= new Composite(group, SWT.NONE); - gl= new GridLayout(); gl.numColumns= 3; gl.marginHeight= gl.marginWidth= 0; - pair.setLayout(gl); - gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL); - pair.setLayoutData(gd); - - l= new Label(pair, SWT.NONE); - l.setText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.text")); //$NON-NLS-1$ - l.setToolTipText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.tooltip")); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL); - l.setLayoutData(gd); - - fFuzzField= new Text(pair, SWT.BORDER); - fFuzzField.setText("2"); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_END); gd.widthHint= 30; - fFuzzField.setLayoutData(gd); - - Button b= new Button(pair, SWT.PUSH); - b.setText(PatchMessages.getString("PreviewPatchPage.GuessFuzz.text")); //$NON-NLS-1$ - b.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - int fuzz= guessFuzzFactor(patcher); - if (fuzz >= 0) - fFuzzField.setText(Integer.toString(fuzz)); - } - } - ); - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER); - b.setLayoutData(gd); - - addSpacer(group); - - fIgnoreWhitespaceButton= new Button(group, SWT.CHECK); - fIgnoreWhitespaceButton.setText(PatchMessages.getString("PreviewPatchPage.IgnoreWhitespace.text")); //$NON-NLS-1$ - - addSpacer(group); - - // register listeners - - if (fStripPrefixSegments != null) - fStripPrefixSegments.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setStripPrefixSegments(getStripPrefixSegments())) - updateTree(); - } - } - ); - fReversePatchButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setReversed(fReversePatchButton.getSelection())) - updateTree(); - } - } - ); - fIgnoreWhitespaceButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setIgnoreWhitespace(fIgnoreWhitespaceButton.getSelection())) - updateTree(); - } - } - ); - - fFuzzField.addModifyListener( - new ModifyListener() { - public void modifyText(ModifyEvent e) { - if (patcher.setFuzz(getFuzzFactor())) - updateTree(); - } - } - ); - } - - private int guessFuzzFactor(final Patcher patcher) { - final int strip= getStripPrefixSegments(); - final int[] result= new int[1]; - try { - TimeoutContext.run(true, GUESS_TIMEOUT, getControl().getShell(), - new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - result[0]= guess(patcher, monitor, strip); - } - } - ); - return result[0]; - } catch (InvocationTargetException ex) { - } catch (InterruptedException ex) { - } - return -1; - } - - private int guess(Patcher patcher, IProgressMonitor pm, int strip) { - - Diff[] diffs= patcher.getDiffs(); - if (diffs == null || diffs.length <= 0) - return -1; - - // now collect files and determine "work" - IFile[] files= new IFile[diffs.length]; - int work= 0; - for (int i= 0; i < diffs.length; i++) { - Diff diff= diffs[i]; - if (diff == null) - continue; - if (diff.getType() != Differencer.ADDITION) { - IPath p= diff.fOldPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - IFile file= existsInSelection(p); - if (file != null) { - files[i]= file; - work+= diff.fHunks.size(); - } - } - } - - // do the "work" - int[] fuzzRef= new int[1]; - String format= PatchMessages.getString("PreviewPatchPage.GuessFuzzProgress.format"); //$NON-NLS-1$ - pm.beginTask(PatchMessages.getString("PreviewPatchPage.GuessFuzzProgress.text"), work); //$NON-NLS-1$ - try { - int fuzz= 0; - for (int i= 0; i < diffs.length; i++) { - Diff d= diffs[i]; - IFile file= files[i]; - if (d != null && file != null) { - List lines= patcher.load(file, false); - String name= d.getPath().lastSegment(); - Iterator iter= d.fHunks.iterator(); - int shift= 0; - for (int hcnt= 1; iter.hasNext(); hcnt++) { - pm.subTask(MessageFormat.format(format, new String[] { name, Integer.toString(hcnt) } )); - Hunk h= (Hunk) iter.next(); - shift= patcher.calculateFuzz(h, lines, shift, pm, fuzzRef); - int f= fuzzRef[0]; - if (f == -1) // cancel - return -1; - if (f > fuzz) - fuzz= f; - pm.worked(1); - } - } - } - return fuzz; - } finally { - pm.done(); - } - } - - ICompareInput createInput(Hunk hunk) { - - String[] lines= hunk.fLines; - StringBuffer left= new StringBuffer(); - StringBuffer right= new StringBuffer(); - - for (int i= 0; i < lines.length; i++) { - String line= lines[i]; - String rest= line.substring(1); - switch (line.charAt(0)) { - case ' ': - left.append(rest); - right.append(rest); - break; - case '-': - left.append(rest); - break; - case '+': - right.append(rest); - break; - } - } - - Diff diff= hunk.fParent; - IPath path= diff.getPath(); - String type= path.getFileExtension(); - - return new DiffNode(new HunkInput(type, left.toString()), new HunkInput(type, right.toString())); - } - - /** - * Builds a tree from list of Diffs. - * As a side effect it calculates the maximum number of segments - * in all paths. - */ - private void buildTree() { - setPageComplete(true); - if (fTree != null && !fTree.isDisposed()) { - fTree.removeAll(); - fHunkViewer.setInput(null); - - int length= 99; - - Diff[] diffs= fPatchWizard.getPatcher().getDiffs(); - if (diffs != null) { - for (int i= 0; i < diffs.length; i++) { - Diff diff= diffs[i]; - TreeItem d= new TreeItem(fTree, SWT.NULL); - d.setData(diff); - d.setImage(getImage(diff)); - - if (diff.fOldPath != null) - length= Math.min(length, diff.fOldPath.segmentCount()); - if (diff.fNewPath != null) - length= Math.min(length, diff.fNewPath.segmentCount()); - - java.util.List hunks= diff.fHunks; - java.util.Iterator iter= hunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - TreeItem h= new TreeItem(d, SWT.NULL); - h.setData(hunk); - h.setText(hunk.getDescription()); - } - } - } - if (fStripPrefixSegments != null && length != 99) - for (int i= 1; i < length; i++) - fStripPrefixSegments.add(Integer.toString(i)); - } - - updateTree(); - } - - private IFile existsInSelection(IPath path) { - IResource target= fPatchWizard.getTarget(); - if (target instanceof IFile) { // special case - IFile file= (IFile) target; - if (matches(file.getFullPath(), path)) - return file; - } else if (target instanceof IContainer) { - IContainer c= (IContainer) target; - if (c.exists(path)) - return c.getFile(path); - } - return null; - } - - /** - * Returns true if path completely matches the end of fullpath - */ - private boolean matches(IPath fullpath, IPath path) { - - for (IPath p= fullpath; path.segmentCount() <= p.segmentCount(); - p= p.removeFirstSegments(1)) { - if (p.equals(path)) - return true; - } - return false; - } - - /** - * Updates label and checked state of tree items. - */ - private void updateTree() { - if (fTree == null || fTree.isDisposed()) - return; - int strip= getStripPrefixSegments(); - TreeItem[] children= fTree.getItems(); - for (int i= 0; i < children.length; i++) { - TreeItem item= children[i]; - Diff diff= (Diff) item.getData(); - diff.fMatches= false; - String error= null; - - boolean create= false; - IFile file= null; - if (diff.getType() == Differencer.ADDITION) { - IPath p= diff.fNewPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - file= existsInSelection(p); - if (file == null) { - diff.fMatches= true; - } else { - // file already exists - error= PatchMessages.getString("PreviewPatchPage.FileExists.error"); //$NON-NLS-1$ - } - create= true; - } else { - IPath p= diff.fOldPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - file= existsInSelection(p); - diff.fMatches= false; - if (file != null) { - if (file.isReadOnly()) { - // file is readonly - error= PatchMessages.getString("PreviewPatchPage.FileIsReadOnly.error"); //$NON-NLS-1$ - file= null; - } else { - diff.fMatches= true; - } - } else { - // file doesn't exist - error= PatchMessages.getString("PreviewPatchPage.FileDoesNotExist.error"); //$NON-NLS-1$ - } - } - - ArrayList failedHunks= new ArrayList(); - Patcher patcher= fPatchWizard.getPatcher(); - patcher.setFuzz(getFuzzFactor()); - patcher.apply(diff, file, create, failedHunks); - - if (failedHunks.size() > 0) - diff.fRejected= fPatchWizard.getPatcher().getRejected(failedHunks); - - int checkedSubs= 0; // counts checked hunk items - TreeItem[] hunkItems= item.getItems(); - for (int h= 0; h < hunkItems.length; h++) { - Hunk hunk= (Hunk) hunkItems[h].getData(); - boolean failed= failedHunks.contains(hunk); - String hunkError= null; - if (failed) - hunkError= PatchMessages.getString("PreviewPatchPage.NoMatch.error"); //$NON-NLS-1$ - - boolean check= !failed; - hunkItems[h].setChecked(check); - if (check) - checkedSubs++; - - String hunkLabel= hunk.getDescription(); - if (hunkError != null) - hunkLabel+= " " + hunkError; //$NON-NLS-1$ - hunkItems[h].setText(hunkLabel); - hunkItems[h].setImage(getImage(hunk)); - } - - String label= diff.getDescription(strip); - if (error != null) - label+= " " + error; //$NON-NLS-1$ - item.setText(label); - item.setImage(getImage(diff)); - item.setChecked(checkedSubs > 0); - boolean gray= (checkedSubs > 0 && checkedSubs < hunkItems.length); - item.setGrayed(gray); - item.setExpanded(gray); - } - setPageComplete(updateModel()); - } - - /** - * Updates the gray state of the given diff and the checked state of its children. - */ - private void updateCheckedState(TreeItem diffItem) { - boolean checked= diffItem.getChecked(); - // check whether we can enable all hunks - TreeItem[] hunks= diffItem.getItems(); - int checkedCount= 0; - for (int i= 0; i < hunks.length; i++) { - Hunk hunk= (Hunk) hunks[i].getData(); - if (checked) { - if (hunk.fMatches) { - hunks[i].setChecked(true); - checkedCount++; - } - } else { - hunks[i].setChecked(false); - } - } - diffItem.setGrayed(checkedCount > 0 && checkedCount < hunks.length); - diffItem.setChecked(checkedCount > 0); - - setPageComplete(updateModel()); - } - - /** - * Updates the gray state of the given items parent. - */ - private void updateGrayedState(TreeItem hunk) { - TreeItem diff= hunk.getParentItem(); - TreeItem[] hunks= diff.getItems(); - int checked= 0; - for (int i= 0; i < hunks.length; i++) - if (hunks[i].getChecked()) - checked++; - diff.setChecked(checked > 0); - diff.setGrayed(checked > 0 && checked < hunks.length); - - setPageComplete(updateModel()); - } - - private void addSpacer(Composite parent) { - Label label= new Label(parent, SWT.NONE); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint= 20; - label.setLayoutData(gd); - } - - private int getStripPrefixSegments() { - int stripPrefixSegments= 0; - if (fStripPrefixSegments != null) { - String s= fStripPrefixSegments.getText(); - try { - stripPrefixSegments= Integer.parseInt(s); - } catch(NumberFormatException ex) { - } - } - return stripPrefixSegments; - } - - private int getFuzzFactor() { - int fuzzFactor= 0; - if (fFuzzField != null) { - String s= fFuzzField.getText(); - try { - fuzzFactor= Integer.parseInt(s); - } catch(NumberFormatException ex) { - } - } - return fuzzFactor; - } - - public boolean updateModel() { - boolean atLeastOneIsEnabled= false; - if (fTree != null && !fTree.isDisposed()) { - TreeItem [] diffItems= fTree.getItems(); - for (int i= 0; i < diffItems.length; i++) { - TreeItem diffItem= diffItems[i]; - Object data= diffItem.getData(); - if (data instanceof Diff) { - Diff diff= (Diff) data; - boolean b= diffItem.getChecked(); - diff.setEnabled(b); - if (b) { - TreeItem [] hunkItems= diffItem.getItems(); - for (int j= 0; j < hunkItems.length; j++) { - TreeItem hunkItem= hunkItems[j]; - data= hunkItem.getData(); - if (data instanceof Hunk) { - Hunk hunk= (Hunk) data; - b= hunkItem.getChecked(); - hunk.setEnabled(b); - if (b) { - atLeastOneIsEnabled= true; - } - } - } - } - } - } - } - return atLeastOneIsEnabled; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt deleted file mode 100644 index fbc5599cd..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt +++ /dev/null @@ -1,6 +0,0 @@ -1 -2 -3 -conflict -4 -5
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt deleted file mode 100644 index b1849b6fa..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt +++ /dev/null @@ -1,8 +0,0 @@ -1 -2 -outgoing addition -3 -outgoing change -4 -pseudo conflict -5
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt deleted file mode 100644 index acbf082c0..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 -incoming addition -incoming addition -2 -3 -incoming change -4 -pseudo conflict -5
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/package.html b/bundles/org.eclipse.compare/compare/org/eclipse/compare/package.html deleted file mode 100644 index 1963dd462..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/package.html +++ /dev/null @@ -1,99 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="Author" content="IBM"> - <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]"> - <title>Package-level Javadoc</title> -</head> -<body> -Provides support for performing structural and textual -compare operations on arbitrary data and displaying the results. -<h2> -Package Specification</h2> - -The class <b>CompareUI</b> defines the entry point to initiate a configurable -compare operation on arbitrary resources. The result of the compare is -opened into a compare editor where the details can be browsed and edited -in dynamically selected structure and content viewers. -<p> - -A compare operation must be implemented as a subclass of <b>CompareEditorInput</b>. -A <b>CompareEditorInput</b> runs a (potentially lengthy) compare operation -under progress monitor control, creates a UI for drilling-down into the -compare results, tracks the dirty state of the result in case of merge, -and saves any changes that occured during a merge. -<p> - -The <b>NavigationAction</b> is used to navigate (step) through the individual -differences of a <b>CompareEditorInput</b>. -<p> - -An instance of <b>CompareConfiguration</b> configures various UI aspects -of compare/merge viewers like title labels and images, or whether a side -of a merge viewer is editable. It is passed to the <b>CompareEditorInput</b> -on creation. -<p> - -When implementing a hierarchical compare operation as a subclass of -<b>CompareEditorInput</b> clients have to provide a tree of objects where each -node implements the interface -<b>org.eclipse.compare.structuremergeviewer.IStructureComparator</b>. -This interface is used by the hierarchical differencing engine -(<b>org.eclipse.compare.structuremergeviewer.Differencer</b>) to walk the tree. -<br> -In addition every leaf of the tree must implement the <b>IStreamContentAccessor</b> -interface in order to give the differencing engine access to its stream content. -<p> - -The abstract class <b>BufferedContent</b> provides a default implementation -for the <b>IStreamContentAccessor</b> and <b>IContentChangeNotifier</b> interfaces. -Its subclass <b>ResourceNode</b> adds an implementation for the -<b>IStructureComparator</b> and <b>ITypedElement</b> interfaces -based on Eclipse workbench resources (org.eclipse.core.resources.IResource). -It can be used without modification as the input to the differencing engine. -<p> - -The <b>ZipFileStructureCreator</b> is an implementation of the -<b>org.eclipse.compare.structuremergeviewer.IStructureCreator</b> interface -and makes the contents of a zip archive available as a -hierarchical structure of <b>IStructureComparator</b>s which can be easily compared -by the differencing engine (<b>org.eclipse.compare.structuremergeviewer.Differencer</b>). -It is a good example for how to make structured files available to the hierarchical -compare functionality of the Compare plugin. -<p> - -The <b>EditionSelectionDialog</b> is a simple selection dialog where -one input element can be compared against a list of historic variants (<i>editions</i>) -of the same input element. The dialog can be used to implement functions -like <i>"Replace with Version"</i> or <i>"Replace with Edition"</i> on workbench resources. -<p> - -In addition it is possible to specify a subsection of the input element -(e.g. a method in a Java source file) by means of a <i>path</i>. In this -case the dialog compares only the subsection (as specified by the path) -with the corresponding subsection in the list of editions. This functionality -can be used to implement <i>"Replace with Method Edition"</i> for the Java -language. -<p> - -The <b>EditionSelectionDialog</b> requires that the editions implement -the <b>IStreamContentAccessor</b> and <b>IModificationDate</b> interfaces. -The <b>HistoryItem</b> is a convenience class that implements these interfaces -for <b>IFileState</b> objects. -<p> - - -The <b>CompareViewerPane</b> is a convenience class which provides -a label and local toolbar for a compare viewer (or any other subclass of a -JFace <b>Viewer</b>). -<br> -Its abstract subclass <b>CompareViewerSwitchingPane</b> supports <i>dynamic -viewer switching</i>, that is the viewer installed in the pane is dynamically -determined by the pane's input object. -Both classes are useful if you want to use compare viewers outside the context of -a compare editor, for example in a dialog or wizard. - - -</body> -</html> diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java deleted file mode 100644 index bab434292..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -import java.util.ArrayList; -import java.util.List; - -/** - * A custom iterator to iterate over a List of <code>RangeDifferences</code>. - * It is used internally by the <code>RangeDifferencer</code>. - */ -/* package */ class DifferencesIterator { - - List fRange; - int fIndex; - RangeDifference[] fArray; - RangeDifference fDifference; - - /** - * Creates a differences iterator on an array of <code>RangeDifference</code>s. - */ - DifferencesIterator(RangeDifference[] differenceRanges) { - - fArray= differenceRanges; - fIndex= 0; - fRange= new ArrayList(); - if (fIndex < fArray.length) - fDifference= fArray[fIndex++]; - else - fDifference= null; - } - - /** - * Returns the number of RangeDifferences - */ - int getCount() { - return fRange.size(); - } - - /** - * Appends the edit to its list and moves to the next <code>RangeDifference</code>. - */ - void next() { - fRange.add(fDifference); - if (fDifference != null) { - if (fIndex < fArray.length) - fDifference= fArray[fIndex++]; - else - fDifference= null; - } - } - - /** - * Difference iterators are used in pairs. - * This method returns the other iterator. - */ - DifferencesIterator other(DifferencesIterator right, DifferencesIterator left) { - if (this == right) - return left; - return right; - } - - /** - * Removes all <code>RangeDifference</code>s - */ - void removeAll() { - fRange.clear(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java deleted file mode 100644 index e4f87ad7b..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -/** - * For breaking an object to compare into a sequence of comparable entities. - * <p> - * It is used by <code>RangeDifferencer</code> to find longest sequences of - * matching and non-matching ranges. - * <p> - * For example, to compare two text documents and find longest common sequences - * of matching and non-matching lines, the implementation must break the document - * into lines. <code>getRangeCount</code> would return the number of lines in the - * document, and <code>rangesEqual</code> would compare a specified line given - * with one in another <code>IRangeComparator</code>. - * </p> - * <p> - * Clients should implement this interface; there is no standard implementation. - * </p> - */ -public interface IRangeComparator { - - /** - * Returns the number of comparable entities. - * - * @return the number of comparable entities - */ - int getRangeCount(); - - /** - * Returns whether the comparable entity given by the first index - * matches an entity specified by the other <code>IRangeComparator</code> and index. - * - * @param thisIndex the index of the comparable entity within this <code>IRangeComparator</code> - * @param other the IRangeComparator to compare this with - * @param otherIndex the index of the comparable entity within the other <code>IRangeComparator</code> - * @return <code>true</code> if the comparable entities are equal - */ - boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex); - - /** - * Returns whether a comparison should be skipped because it would be too costly (or lengthy). - * - * @param length a number on which to base the decision whether to return - * <code>true</code> or <code>false</code> - * @param maxLength another number on which to base the decision whether to return - * <code>true</code> or <code>false</code> - * @param other the other <code>IRangeComparator</code> to compare with - * @return <code>true</code> to avoid a too lengthy range comparison - */ - boolean skipRangeComparison(int length, int maxLength, IRangeComparator other); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java deleted file mode 100644 index 30fb0b081..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -/* package */ class LinkedRangeDifference extends RangeDifference { - - static final int INSERT= 0; - static final int DELETE= 1; - static final int CHANGE= 2; - static final int ERROR= 3; - - LinkedRangeDifference fNext; - - /** - * Creates a LinkedRangeDifference an initializes it to the error state - */ - LinkedRangeDifference() { - super(ERROR); - fNext= null; - } - - /** - * Constructs and links a LinkeRangeDifference to another LinkedRangeDifference - */ - LinkedRangeDifference(LinkedRangeDifference next, int operation) { - super(operation); - fNext= next; - } - - /** - * Follows the next link - */ - LinkedRangeDifference getNext() { - return fNext; - } - - boolean isDelete() { - return kind() == DELETE; - } - - boolean isInsert() { - return kind() == INSERT; - } - - /** - * Sets the next link of this LinkedRangeDifference - */ - void setNext(LinkedRangeDifference next) { - fNext= next; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java deleted file mode 100644 index 296cb9662..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -/** - * Description of a change between two or three ranges of comparable entities. - * <p> - * <code>RangeDifference</code> objects are the elements of a compare result returned from - * the <code>RangeDifferencer</code> <code>find* </code> methods. - * Clients use these objects as they are returned from the differencer. - * This class is not intended to be instantiated or subclassed. - * <p> - * Note: A range in the <code>RangeDifference</code> object is given as a start index - * and length in terms of comparable entities. However, these entity indices and counts - * are not necessarily character positions. For example, if an entity represents a line - * in a document, the start index would be a line number and the count would be in lines. - * </p> - * - * @see RangeDifferencer - */ -public class RangeDifference { - - /** Two-way change constant indicating no change. */ - public final static int NOCHANGE= 0; - /** Two-way change constant indicating two-way change (same as <code>RIGHT</code>) */ - public final static int CHANGE= 2; - - /** Three-way change constant indicating a change in both right and left. */ - public final static int CONFLICT= 1; - /** Three-way change constant indicating a change in right. */ - public final static int RIGHT= 2; - /** Three-way change constant indicating a change in left. */ - public final static int LEFT= 3; - /** - * Three-way change constant indicating the same change in both right and left, - * that is only the ancestor is different. - */ - public final static int ANCESTOR= 4; - - /** Constant indicating an unknown change kind. */ - public final static int ERROR= 5; - - /** the kind of change: NOCHANGE, CHANGE, LEFT, RIGHT, ANCESTOR, CONFLICT, ERROR */ - int fKind; - - int fLeftStart; - int fLeftLength; - int fRightStart; - int fRightLength; - int lAncestorStart; - int lAncestorLength; - - /** - * Creates a new range difference with the given change kind. - * - * @param changeKind the kind of change - */ - /* package */ RangeDifference(int changeKind) { - fKind= changeKind; - } - - /** - * Creates a new <code>RangeDifference</code> with the given change kind - * and left and right ranges. - * - * @param changeKind the kind of change - * @param rightStart start index of entity on right side - * @param rightLength number of entities on right side - * @param leftStart start index of entity on left side - * @param leftLength number of entities on left side - */ - /* package */ RangeDifference(int kind, int rightStart, int rightLength, int leftStart, int leftLength) { - fKind= kind; - fRightStart= rightStart; - fRightLength= rightLength; - fLeftStart= leftStart; - fLeftLength= leftLength; - } - - /** - * Creates a new <code>RangeDifference</code> with the given change kind - * and left, right, and ancestor ranges. - * - * @param changeKind the kind of change - * @param rightStart start index of entity on right side - * @param rightLength number of entities on right side - * @param leftStart start index of entity on left side - * @param leftLength number of entities on left side - * @param ancestorStart start index of entity on ancestor side - * @param ancestorLength number of entities on ancestor side - */ - /* package */ RangeDifference(int kind, int rightStart, int rightLength, int leftStart, int leftLength, - int ancestorStart, int ancestorLength) { - this(kind, rightStart, rightLength, leftStart, leftLength); - lAncestorStart= ancestorStart; - lAncestorLength= ancestorLength; - } - - /** - * Returns the kind of difference. - * - * @return the kind of difference, one of - * <code>NOCHANGE</code>, <code>CHANGE</code>, <code>LEFT</code>, <code>RIGHT</code>, - * <code>ANCESTOR</code>, <code>CONFLICT</code>, <code>ERROR</code> - */ - public int kind() { - return fKind; - } - - /** - * Returns the start index of the entity range on the ancestor side. - * - * @return the start index of the entity range on the ancestor side - */ - public int ancestorStart() { - return lAncestorStart; - } - - /** - * Returns the number of entities on the ancestor side. - * - * @return the number of entities on the ancestor side - */ - public int ancestorLength() { - return lAncestorLength; - } - - /** - * Returns the end index of the entity range on the ancestor side. - * - * @return the end index of the entity range on the ancestor side - */ - public int ancestorEnd() { - return lAncestorStart + lAncestorLength; - } - - /** - * Returns the start index of the entity range on the right side. - * - * @return the start index of the entity range on the right side - */ - public int rightStart() { - return fRightStart; - } - - /** - * Returns the number of entities on the right side. - * - * @return the number of entities on the right side - */ - public int rightLength() { - return fRightLength; - } - - /** - * Returns the end index of the entity range on the right side. - * - * @return the end index of the entity range on the right side - */ - public int rightEnd() { - return fRightStart + fRightLength; - } - - /** - * Returns the start index of the entity range on the left side. - * - * @return the start index of the entity range on the left side - */ - public int leftStart() { - return fLeftStart; - } - - /** - * Returns the number of entities on the left side. - * - * @return the number of entities on the left side - */ - public int leftLength() { - return fLeftLength; - } - - /** - * Returns the end index of the entity range on the left side. - * - * @return the end index of the entity range on the left side - */ - public int leftEnd() { - return fLeftStart + fLeftLength; - } - - /** - * Returns the maximum number of entities in the left, right, and ancestor sides of this range. - * - * @return the maximum number of entities in the left, right, and ancestor sides of this range - */ - public int maxLength() { - return Math.max(fRightLength, Math.max(fLeftLength, lAncestorLength)); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java deleted file mode 100644 index 9d5eb1886..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java +++ /dev/null @@ -1,542 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -import java.util.*; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.IProgressMonitor; - -/** - * A <code>RangeDifferencer</code> finds the differences between two or three <code>IRangeComparator</code>s. - * <p> - * To use the differencer, clients provide an <code>IRangeComparator</code> - * that breaks their input data into a sequence of comparable entities. The differencer - * returns the differences among these sequences as an array of <code>RangeDifference</code> objects - * (<code>findDifferences</code> methods). - * Every <code>RangeDifference</code> represents a single kind of difference - * and the corresponding ranges of the underlying comparable entities in the - * left, right, and optionally ancestor sides. - * <p> - * Alternatively, the <code>findRanges</code> methods not only return objects for - * the differing ranges but for non-differing ranges too. - * <p> - * The algorithm used is an objectified version of one described in: - * <it>A File Comparison Program,</it> by Webb Miller and Eugene W. Myers, - * Software Practice and Experience, Vol. 15, Nov. 1985. - * - * @see IRangeComparator - * @see RangeDifference - */ -public final class RangeDifferencer { - - private static final RangeDifference[] EMPTY_RESULT= new RangeDifference[0]; - - /* (non Javadoc) - * Non instantiatiable! - */ - private RangeDifferencer() { - } - - /** - * Finds the differences between two <code>IRangeComparator</code>s. - * The differences are returned as an array of <code>RangeDifference</code>s. - * If no differences are detected an empty array is returned. - * - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences, or an empty array if no differences were found - */ - public static RangeDifference[] findDifferences(IRangeComparator left, IRangeComparator right) { - return findDifferences((IProgressMonitor)null, left, right); - } - - /** - * Finds the differences between two <code>IRangeComparator</code>s. - * The differences are returned as an array of <code>RangeDifference</code>s. - * If no differences are detected an empty array is returned. - * - * @param pm if not <code>null</code> used to report progress - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences, or an empty array if no differences were found - * @since 2.0 - */ - public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) { - - // assert that both IRangeComparators are of the same class - Assert.isTrue(right.getClass().equals(left.getClass())); - - int rightSize= right.getRangeCount(); - int leftSize= left.getRangeCount(); - // - // Differences matrix: - // only the last d of each diagonal is stored, i.e., lastDiagonal[k] = row of d - // - int diagLen= 2 * Math.max(rightSize, leftSize); // bound on the size of edit script - int maxDiagonal= diagLen; - int lastDiagonal[]= new int[diagLen + 1]; // the row containing the last d - // on diagonal k (lastDiagonal[k] = row) - int origin= diagLen / 2; // origin of diagonal 0 - - // script corresponding to d[k] - LinkedRangeDifference script[]= new LinkedRangeDifference[diagLen + 1]; - int row, col; - - // find common prefix - for (row= 0; row < rightSize && row < leftSize && rangesEqual(right, row, left, row) == true; ++row) - ; - - lastDiagonal[origin]= row; - script[origin]= null; - int lower= (row == rightSize) ? origin + 1 : origin - 1; - int upper= (row == leftSize) ? origin - 1 : origin + 1; - - if (lower > upper) - return EMPTY_RESULT; - - //System.out.println("findDifferences: " + maxDiagonal + " " + lower + " " + upper); - - // for each value of the edit distance - for (int d= 1; d <= maxDiagonal; ++d) { // d is the current edit distance - - if (pm != null) - pm.worked(1); - - if (right.skipRangeComparison(d, maxDiagonal, left)) - return EMPTY_RESULT; // should be something we already found - - // for each relevant diagonal (-d, -d+2 ..., d-2, d) - for (int k= lower; k <= upper; k += 2) { // k is the current diagonal - LinkedRangeDifference edit; - - if (pm != null && pm.isCanceled()) - return EMPTY_RESULT; - - if (k == origin - d || k != origin + d && lastDiagonal[k + 1] >= lastDiagonal[k - 1]) { - // - // move down - // - row= lastDiagonal[k + 1] + 1; - edit= new LinkedRangeDifference(script[k + 1], LinkedRangeDifference.DELETE); - } else { - // - // move right - // - row= lastDiagonal[k - 1]; - edit= new LinkedRangeDifference(script[k - 1], LinkedRangeDifference.INSERT); - } - col= row + k - origin; - edit.fRightStart= row; - edit.fLeftStart= col; - Assert.isTrue(k >= 0 && k <= maxDiagonal); - script[k]= edit; - - // slide down the diagonal as far as possible - while (row < rightSize && col < leftSize && rangesEqual(right, row, left, col) == true) { - ++row; - ++col; - } - - Assert.isTrue(k >= 0 && k <= maxDiagonal); // Unreasonable value for diagonal index - lastDiagonal[k]= row; - - if (row == rightSize && col == leftSize) { - //showScript(script[k], right, left); - return createDifferencesRanges(script[k]); - } - if (row == rightSize) - lower= k + 2; - if (col == leftSize) - upper= k - 2; - } - --lower; - ++upper; - } - // too many differences - Assert.isTrue(false); - return null; - } - - /** - * Finds the differences among three <code>IRangeComparator</code>s. - * The differences are returned as a list of <code>RangeDifference</code>s. - * If no differences are detected an empty list is returned. - * If the ancestor range comparator is <code>null</code>, a two-way - * comparison is performed. - * - * @param ancestor the ancestor range comparator or <code>null</code> - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences, or an empty array if no differences were found - */ - public static RangeDifference[] findDifferences(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) { - return findDifferences(null, ancestor, left, right); - } - - /** - * Finds the differences among three <code>IRangeComparator</code>s. - * The differences are returned as a list of <code>RangeDifference</code>s. - * If no differences are detected an empty list is returned. - * If the ancestor range comparator is <code>null</code>, a two-way - * comparison is performed. - * - * @param pm if not <code>null</code> used to report progress - * @param ancestor the ancestor range comparator or <code>null</code> - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences, or an empty array if no differences were found - * @since 2.0 - */ - public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) { - - if (ancestor == null) - return findDifferences(pm, left, right); - - RangeDifference[] leftAncestorScript= null; - RangeDifference[] rightAncestorScript= findDifferences(pm, ancestor, right); - if (rightAncestorScript != null) - leftAncestorScript= findDifferences(pm, ancestor, left); - if (rightAncestorScript == null || leftAncestorScript == null) - return null; - - DifferencesIterator myIter= new DifferencesIterator(rightAncestorScript); - DifferencesIterator yourIter= new DifferencesIterator(leftAncestorScript); - - List diff3= new ArrayList(); - diff3.add(new RangeDifference(RangeDifference.ERROR)); // add a sentinel - - int changeRangeStart= 0; - int changeRangeEnd= 0; - // - // Combine the two two-way edit scripts into one - // - while (myIter.fDifference != null || yourIter.fDifference != null) { - - DifferencesIterator startThread; - myIter.removeAll(); - yourIter.removeAll(); - // - // take the next diff that is closer to the start - // - if (myIter.fDifference == null) - startThread= yourIter; - else if (yourIter.fDifference == null) - startThread= myIter; - else { // not at end of both scripts take the lowest range - if (myIter.fDifference.fLeftStart <= yourIter.fDifference.fLeftStart) // 2 -> common (Ancestor) change range - startThread= myIter; - else - startThread= yourIter; - } - changeRangeStart= startThread.fDifference.fLeftStart; - changeRangeEnd= startThread.fDifference.leftEnd(); - - startThread.next(); - // - // check for overlapping changes with other thread - // merge overlapping changes with this range - // - DifferencesIterator other= startThread.other(myIter, yourIter); - while (other.fDifference != null && other.fDifference.fLeftStart <= changeRangeEnd) { - int newMax= other.fDifference.leftEnd(); - other.next(); - if (newMax >= changeRangeEnd) { - changeRangeEnd= newMax; - other= other.other(myIter, yourIter); - } - } - diff3.add(createRangeDifference3(myIter, yourIter, diff3, right, left, changeRangeStart, changeRangeEnd)); - } - - // remove sentinel - diff3.remove(0); - return (RangeDifference[]) diff3.toArray(EMPTY_RESULT); - } - - /** - * Finds the differences among two <code>IRangeComparator</code>s. - * In contrast to <code>findDifferences</code>, the result - * contains <code>RangeDifference</code> elements for non-differing ranges too. - * - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences - */ - public static RangeDifference[] findRanges(IRangeComparator left, IRangeComparator right) { - return findRanges((IProgressMonitor)null, left, right); - } - - /** - * Finds the differences among two <code>IRangeComparator</code>s. - * In contrast to <code>findDifferences</code>, the result - * contains <code>RangeDifference</code> elements for non-differing ranges too. - * - * @param pm if not <code>null</code> used to report progress - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences - * @since 2.0 - */ - public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) { - RangeDifference[] in= findDifferences(pm, left, right); - List out= new ArrayList(); - - RangeDifference rd; - - int mstart= 0; - int ystart= 0; - - for (int i= 0; i < in.length; i++) { - RangeDifference es= in[i]; - - rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, es.rightStart() - mstart, ystart, es.leftStart() - ystart); - if (rd.maxLength() != 0) - out.add(rd); - - out.add(es); - - mstart= es.rightEnd(); - ystart= es.leftEnd(); - } - rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, right.getRangeCount() - mstart, ystart, left.getRangeCount() - ystart); - if (rd.maxLength() > 0) - out.add(rd); - - return (RangeDifference[]) out.toArray(EMPTY_RESULT); - } - - /** - * Finds the differences among three <code>IRangeComparator</code>s. - * In contrast to <code>findDifferences</code>, the result - * contains <code>RangeDifference</code> elements for non-differing ranges too. - * If the ancestor range comparator is <code>null</code>, a two-way - * comparison is performed. - * - * @param pm if not <code>null</code> used to report progress - * @param ancestor the ancestor range comparator or <code>null</code> - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences - */ - public static RangeDifference[] findRanges(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) { - return findRanges(null, ancestor, left, right); - } - - /** - * Finds the differences among three <code>IRangeComparator</code>s. - * In contrast to <code>findDifferences</code>, the result - * contains <code>RangeDifference</code> elements for non-differing ranges too. - * If the ancestor range comparator is <code>null</code>, a two-way - * comparison is performed. - * - * @param pm if not <code>null</code> used to report progress - * @param ancestor the ancestor range comparator or <code>null</code> - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences - * @since 2.0 - */ - public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) { - - if (ancestor == null) - return findRanges(pm, left, right); - - RangeDifference[] in= findDifferences(pm, ancestor, left, right); - List out= new ArrayList(); - - RangeDifference rd; - - int mstart= 0; - int ystart= 0; - int astart= 0; - - for (int i= 0; i < in.length; i++) { - RangeDifference es= (RangeDifference) in[i]; - - rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, es.rightStart() - mstart, ystart, es.leftStart() - ystart, astart, es.ancestorStart() - astart); - if (rd.maxLength() > 0) - out.add(rd); - - out.add(es); - - mstart= es.rightEnd(); - ystart= es.leftEnd(); - astart= es.ancestorEnd(); - } - rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, right.getRangeCount() - mstart, ystart, left.getRangeCount() - ystart, astart, ancestor.getRangeCount() - astart); - if (rd.maxLength() > 0) - out.add(rd); - - return (RangeDifference[]) out.toArray(EMPTY_RESULT); - } - - //---- private methods - - /** - * Creates a Vector of DifferencesRanges out of the LinkedRangeDifference. - * It coalesces adjacent changes. - * In addition, indices are changed such that the ranges are 1) open, i.e, - * the end of the range is not included, and 2) are zero based. - */ - private static RangeDifference[] createDifferencesRanges(LinkedRangeDifference start) { - - LinkedRangeDifference ep= reverseDifferences(start); - ArrayList result= new ArrayList(); - RangeDifference es= null; - - while (ep != null) { - es= new RangeDifference(RangeDifference.CHANGE); - - if (ep.isInsert()) { - es.fRightStart= ep.fRightStart + 1; - es.fLeftStart= ep.fLeftStart; - RangeDifference b= ep; - do { - ep= ep.getNext(); - es.fLeftLength++; - } while (ep != null && ep.isInsert() && ep.fRightStart == b.fRightStart); - } else { - es.fRightStart= ep.fRightStart; - es.fLeftStart= ep.fLeftStart; - - RangeDifference a= ep; - // - // deleted lines - // - do { - a= ep; - ep= ep.getNext(); - es.fRightLength++; - } while (ep != null && ep.isDelete() && ep.fRightStart == a.fRightStart + 1); - - boolean change= (ep != null && ep.isInsert() && ep.fRightStart == a.fRightStart); - - if (change) { - RangeDifference b= ep; - // - // replacement lines - // - do { - ep= ep.getNext(); - es.fLeftLength++; - } while (ep != null && ep.isInsert() && ep.fRightStart == b.fRightStart); - } else { - es.fLeftLength= 0; - } - es.fLeftStart++; // meaning of range changes from "insert after", to "replace with" - - } - // - // the script commands are 1 based, subtract one to make them zero based - // - es.fRightStart--; - es.fLeftStart--; - result.add(es); - } - return (RangeDifference[]) result.toArray(EMPTY_RESULT); - } - - /** - * Creates a <code>RangeDifference3</code> given the - * state of two DifferenceIterators. - */ - private static RangeDifference createRangeDifference3( - DifferencesIterator myIter, - DifferencesIterator yourIter, - List diff3, - IRangeComparator right, - IRangeComparator left, - int changeRangeStart, - int changeRangeEnd) { - - int rightStart, rightEnd; - int leftStart, leftEnd; - int kind= RangeDifference.ERROR; - RangeDifference last= (RangeDifference) diff3.get(diff3.size() - 1); - - Assert.isTrue((myIter.getCount() != 0 || yourIter.getCount() != 0)); // At least one range array must be non-empty - // - // find corresponding lines to fChangeRangeStart/End in right and left - // - if (myIter.getCount() == 0) { // only left changed - rightStart= changeRangeStart - last.ancestorEnd() + last.rightEnd(); - rightEnd= changeRangeEnd - last.ancestorEnd() + last.rightEnd(); - kind= RangeDifference.LEFT; - } else { - RangeDifference f= (RangeDifference) myIter.fRange.get(0); - RangeDifference l= (RangeDifference) myIter.fRange.get(myIter.fRange.size() - 1); - rightStart= changeRangeStart - f.fLeftStart + f.fRightStart; - rightEnd= changeRangeEnd - l.leftEnd() + l.rightEnd(); - } - - if (yourIter.getCount() == 0) { // only right changed - leftStart= changeRangeStart - last.ancestorEnd() + last.leftEnd(); - leftEnd= changeRangeEnd - last.ancestorEnd() + last.leftEnd(); - kind= RangeDifference.RIGHT; - } else { - RangeDifference f= (RangeDifference) yourIter.fRange.get(0); - RangeDifference l= (RangeDifference) yourIter.fRange.get(yourIter.fRange.size() - 1); - leftStart= changeRangeStart - f.fLeftStart + f.fRightStart; - leftEnd= changeRangeEnd - l.leftEnd() + l.rightEnd(); - } - - if (kind == RangeDifference.ERROR) { // overlapping change (conflict) -> compare the changed ranges - if (rangeSpansEqual(right, rightStart, rightEnd - rightStart, left, leftStart, leftEnd - leftStart)) - kind= RangeDifference.ANCESTOR; - else - kind= RangeDifference.CONFLICT; - } - return new RangeDifference(kind, rightStart, rightEnd - rightStart, leftStart, leftEnd - leftStart, changeRangeStart, changeRangeEnd - changeRangeStart); - } - - /** - * Tests if two ranges are equal - */ - private static boolean rangesEqual(IRangeComparator a, int ai, IRangeComparator b, int bi) { - return a.rangesEqual(ai, b, bi); - } - - /** - * Tests whether <code>right</code> and <code>left</left> changed in the same way - */ - private static boolean rangeSpansEqual(IRangeComparator right, int rightStart, int rightLen, IRangeComparator left, int leftStart, int leftLen) { - if (rightLen == leftLen) { - int i= 0; - for (i= 0; i < rightLen; i++) { - if (!rangesEqual(right, rightStart + i, left, leftStart + i)) - break; - } - if (i == rightLen) - return true; - } - return false; - } - - /** - * Reverses the range differences - */ - private static LinkedRangeDifference reverseDifferences(LinkedRangeDifference start) { - LinkedRangeDifference ep, behind, ahead; - - ahead= start; - ep= null; - while (ahead != null) { - behind= ep; - ep= ahead; - ahead= ahead.getNext(); - ep.setNext(behind); - } - return ep; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html deleted file mode 100644 index 368068b3b..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html +++ /dev/null @@ -1,44 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="Author" content="IBM"> - <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]"> - <title>Package-level Javadoc</title> -</head> -<body> -Provides support for finding the differences between -two or three sequences of comparable entities. -<h2> -Package Specification</h2> - -The class <b>RangeDifferencer</b> finds longest sequences of matching and -non-matching comparable entities. Its implementation is based on -an objectified version of the algorithm described in: -<i>A File Comparison Program,</i> by Webb Miller and Eugene W. Myers, -Software Practice and Experience, Vol. 15, Nov. 1985. -<p> - -Clients must supply the input to the differencer as an implementation -of the <b>IRangeComparator</b> interface. -An <b>IRangeComparator</b> breaks the input data into a sequence -of entities and provides a method for comparing -one entity with the entity in another <b>IRangeComparator</b>. -<p> - -For example, to compare two text documents and find longest common -sequences of matching and non-matching lines, -the implementation of <b>IRangeComparator</b> -must break the document into lines and provide a method for testing -whether two lines are considered equal. -See <b>org.eclipse.compare.internal.DocLineComparator</b> for how this can be done. -<p> - -The differencer returns the differences among these sequences as an -array of <b>RangeDifference</b> objects. -Every single <b>RangeDifference</b> describes the kind of difference -(no change, change, addition, deletion) and the corresponding ranges -of the underlying comparable entities in the two or three inputs. - -</body> -</html> diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java deleted file mode 100644 index 0d013988a..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.util.ArrayList; - -/** - * The standard implementation of a diff container element. - * <p> - * This class may be instantiated, or further subclassed. - * </p> - */ -public abstract class DiffContainer extends DiffElement implements IDiffContainer { - - private static IDiffElement[] fgEmptyArray= new IDiffElement[0]; - private ArrayList fChildren; - - /** - * Creates a new container with the specified kind under the given parent. - * - * @param parent under which the new container is added as a child or <code>null</code>. - * @param name of the container - * @param kind of difference (defined in <code>Differencer</code>). - */ - public DiffContainer(IDiffContainer parent, int kind) { - super(parent, kind); - } - - /** - * Tries to find the child with the given name. - * Returns <code>null</code> if no such child exists. - * - * @param name of the child to find - * @return the first element with a matching name - */ - public IDiffElement findChild(String name) { - Object[] children= getChildren(); - for (int i= 0; i < children.length; i++) { - IDiffElement child= (IDiffElement) children[i]; - if (name.equals(child.getName())) - return child; - } - return null; - } - - /* (non Javadoc) - * see IDiffContainer.add - */ - public void add(IDiffElement diff) { - if (fChildren == null) - fChildren= new ArrayList(); - fChildren.add(diff); - diff.setParent(this); - } - - /** - * Removes the given child from this container. - * If the container becomes empty it is removed from its container. - */ - /* (non Javadoc) - * see IDiffContainer.removeToRoot - */ - public void removeToRoot(IDiffElement child) { - if (fChildren != null) { - fChildren.remove(child); - child.setParent(null); - if (fChildren.size() == 0) { - IDiffContainer p= getParent(); - if (p != null) - p.removeToRoot(this); - } - } - } - - /** - * Removes the given child (non-recursively) from this container. - * - * @param child to remove - */ - public void remove(IDiffElement child) { - if (fChildren != null) { - fChildren.remove(child); - child.setParent(null); - } - } - - /* (non Javadoc) - * see IDiffContainer.hasChildren - */ - public boolean hasChildren() { - return fChildren != null && fChildren.size() > 0; - } - - /* (non Javadoc) - * see IDiffContainer.getChildren - */ - public IDiffElement[] getChildren() { - if (fChildren != null) - return (IDiffElement[]) fChildren.toArray(fgEmptyArray); - return fgEmptyArray; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java deleted file mode 100644 index 2630ac52e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.compare.ITypedElement; - -/** - * An abstract base implementation of the <code>IDiffElement</code> interface. - * <p> - * Subclasses may add behavior and state, and may override <code>getImage</code> - * and <code>getType</code> to suit. - * </p> - */ -public abstract class DiffElement implements IDiffElement { - - private int fKind; - private IDiffContainer fParent; - - /** - * Creates a new <code>DiffElement</code> as a child of the given parent. - * If parent is not <code>null</code> the new element is added to the parent. - * - * @param parent the parent of this child; if not <code>null</code> this element is automatically added as a child - * @param kind the kind of change - */ - public DiffElement(IDiffContainer parent, int kind) { - fParent= parent; - fKind= kind; - if (parent != null) - parent.add(this); - } - - /** - * The <code>DiffElement</code> implementation of this <code>ITypedInput</code> - * method returns <code>null</code>. Subclasses may re-implement to provide - * an image for this element. - */ - public Image getImage() { - return null; - } - - /** - * The <code>DiffElement</code> implementation of this <code>ITypedElement</code> - * method returns <code>ITypedElement.UNKNOWN_TYPE</code>. Subclasses may - * re-implement to provide a type for this element. - */ - public String getType() { - return ITypedElement.UNKNOWN_TYPE; - } - - /** - * Sets the kind of difference for this element. - * - * @param kind set the kind of difference this element represents - * @see Differencer - */ - public void setKind(int kind) { - fKind= kind; - } - - /* (non Javadoc) - * see IDiffElement.getKind - */ - public int getKind() { - return fKind; - } - - /* (non Javadoc) - * see IDiffElement.getParent - */ - public IDiffContainer getParent() { - return fParent; - } - - /* (non Javadoc) - * see IDiffElement.setParent - */ - public void setParent(IDiffContainer parent) { - fParent= parent; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java deleted file mode 100644 index 9d8624231..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java +++ /dev/null @@ -1,357 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.text.MessageFormat; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.util.ListenerList; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.Utilities; - -/** - * Diff node are used as the compare result of the differencing engine. - * Since it implements the <code>ITypedElement</code> and <code>ICompareInput</code> - * interfaces it can be used directly to display the - * compare result in a <code>DiffTreeViewer</code> and as the input to any other - * compare/merge viewer. - * <p> - * <code>DiffNode</code>s are typically created as the result of performing - * a compare with the <code>Differencer</code>. - * <p> - * Clients typically use this class as is, but may subclass if required. - * - * @see DiffTreeViewer - * @see Differencer - */ -public class DiffNode extends DiffContainer implements ITypedElement, ICompareInput { - - private ITypedElement fAncestor; - private ITypedElement fLeft; - private ITypedElement fRight; - private boolean fDontExpand; - private ListenerList fListener; - private boolean fSwapSides; - - - /** - * Creates a new <code>DiffNode</code> and initializes with the given values. - * - * @param parent under which the new container is added as a child or <code>null</code> - * @param kind of difference (defined in <code>Differencer</code>) - * @param ancestor the common ancestor input to a compare - * @param left the left input to a compare - * @param right the right input to a compare - */ - public DiffNode(IDiffContainer parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) { - this(parent, kind); - fAncestor= ancestor; - fLeft= left; - fRight= right; - } - - /** - * Creates a new <code>DiffNode</code> with diff kind <code>Differencer.CHANGE</code> - * and initializes with the given values. - * - * @param left the left input to a compare - * @param right the right input to a compare - */ - public DiffNode(ITypedElement left, ITypedElement right) { - this(null, Differencer.CHANGE, null, left, right); - } - - /** - * Creates a new <code>DiffNode</code> and initializes with the given values. - * - * @param kind of difference (defined in <code>Differencer</code>) - * @param ancestor the common ancestor input to a compare - * @param left the left input to a compare - * @param right the right input to a compare - */ - public DiffNode(int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) { - this(null, kind, ancestor, left, right); - } - - /** - * Creates a new <code>DiffNode</code> with the given diff kind. - * - * @param kind of difference (defined in <code>Differencer</code>) - */ - public DiffNode(int kind) { - super(null, kind); - } - - /** - * Creates a new <code>DiffNode</code> and initializes with the given values. - * - * @param parent under which the new container is added as a child or <code>null</code> - * @param kind of difference (defined in <code>Differencer</code>) - */ - public DiffNode(IDiffContainer parent, int kind) { - super(parent, kind); - } - - /** - * Registers a listener for changes of this <code>ICompareInput</code>. - * Has no effect if an identical listener is already registered. - * - * @param listener the listener to add - */ - public void addCompareInputChangeListener(ICompareInputChangeListener listener) { - if (fListener == null) - fListener= new ListenerList(); - fListener.add(listener); - } - - /** - * Unregisters a <code>ICompareInput</code> listener. - * Has no effect if listener is not registered. - * - * @param listener the listener to remove - */ - public void removeCompareInputChangeListener(ICompareInputChangeListener listener) { - if (fListener != null) { - fListener.remove(listener); - if (fListener.isEmpty()) - fListener= null; - } - } - - /** - * Sends out notification that a change has occured on the <code>ICompareInput</code>. - */ - protected void fireChange() { - if (fListener != null) { - Object[] listeners= fListener.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((ICompareInputChangeListener) listeners[i]).compareInputChanged(this); - } - } - - //---- getters & setters - - /** - * Returns <code>true</code> if this node shouldn't automatically be expanded in - * a </code>DiffTreeViewer</code>. - * - * @return <code>true</code> if node shouldn't automatically be expanded - */ - public boolean dontExpand() { - return fDontExpand; - } - - /** - * Controls whether this node is not automatically expanded when displayed in - * a </code>DiffTreeViewer</code>. - * - * @param dontExpand if <code>true</code> this node is not automatically expanded in </code>DiffTreeViewer</code> - */ - public void setDontExpand(boolean dontExpand) { - fDontExpand= dontExpand; - } - - /** - * Returns the first not-<code>null</code> input of this node. - * Method checks the three inputs in the order: ancestor, right, left. - * - * @return the first not-<code>null</code> input of this node - */ - public ITypedElement getId() { - if (fAncestor != null) - return fAncestor; - if (fRight != null) - return fRight; - return fLeft; - } - - /** - * Returns the (non-<code>null</code>) name of the left or right side if they are identical. - * Otherwise both names are concatenated (separated with a slash ('/')). - * <p> - * Subclasses may re-implement to provide a different name for this node. - */ - /* (non Javadoc) - * see ITypedElement.getName - */ - public String getName() { - String right= null; - if (fRight != null) - right= fRight.getName(); - - String left= null; - if (fLeft != null) - left= fLeft.getName(); - - if (right == null && left == null) { - if (fAncestor != null) - return fAncestor.getName(); - return Utilities.getString("DiffNode.noName"); //$NON-NLS-1$ - } - - if (right == null) - return left; - if (left == null) - return right; - - if (right.equals(left)) - return right; - - String s1; - String s2; - - if (fSwapSides) { - s1= left; - s2= right; - } else { - s1= right; - s2= left; - } - - String fmt= Utilities.getString("DiffNode.nameFormat"); //$NON-NLS-1$ - return MessageFormat.format(fmt, new String[] { s1, s2 }); - } - - void swapSides(boolean swap) { - fSwapSides= swap; - } - - /* (non Javadoc) - * see ITypedElement.getImage - */ - public Image getImage() { - ITypedElement id= getId(); - if (id != null) - return id.getImage(); - return null; - } - - /* (non Javadoc) - * see ITypedElement.getType - */ - public String getType() { - ITypedElement id= getId(); - if (id != null) - return id.getType(); - return ITypedElement.UNKNOWN_TYPE; - } - - /* (non Javadoc) - * see ICompareInput.getAncestor - */ - public ITypedElement getAncestor() { - return fAncestor; - } - - /** - * Sets the left input to the given value. - * - * @param left the new value for the left input - */ - public void setLeft(ITypedElement left) { - fLeft= left; - } - - /* (non Javadoc) - * see ICompareInput.getLeft - */ - public ITypedElement getLeft() { - return fLeft; - } - - /** - * Sets the right input to the given value. - * - * @param right the new value for the right input - */ - public void setRight(ITypedElement right) { - fRight= right; - } - - /* (non Javadoc) - * see ICompareInput.getRight - */ - public ITypedElement getRight() { - return fRight; - } - - /* (non Javadoc) - * see ICompareInput.copy - */ - public void copy(boolean leftToRight) { - //System.out.println("DiffNode.copy: " + leftToRight); - - IDiffContainer pa= getParent(); - if (pa instanceof ICompareInput) { - ICompareInput parent= (ICompareInput) pa; - Object dstParent= leftToRight ? parent.getRight() : parent.getLeft(); - - if (dstParent instanceof IEditableContent) { - ITypedElement dst= leftToRight ? getRight() : getLeft(); - ITypedElement src= leftToRight ? getLeft() : getRight(); - dst= ((IEditableContent)dstParent).replace(dst, src); - if (leftToRight) - setRight(dst); - else - setLeft(dst); - - //setKind(Differencer.NO_CHANGE); - - fireChange(); - } - } - } - - /* (non Javadoc) - * see Object.hashCode - */ - public int hashCode() { - String[] path= getPath(this, 0); - int hashCode= 1; - for (int i= 0; i < path.length; i++) { - String s= path[i]; - hashCode= (31*hashCode) + (s != null ? s.hashCode() : 0); - } - return hashCode; - } - - /* (non Javadoc) - * see Object.equals - */ - public boolean equals(Object other) { - if (other != null && getClass() == other.getClass()) { - String[] path1= getPath(this, 0); - String[] path2= getPath((DiffNode) other, 0); - if (path1.length != path2.length) - return false; - for (int i= 0; i < path1.length; i++) - if (! path1[i].equals(path2[i])) - return false; - return true; - } - return super.equals(other); - } - - private static String[] getPath(ITypedElement el, int level) { - String[] path= null; - if (el instanceof IDiffContainer) { - IDiffContainer parent= ((IDiffContainer)el).getParent(); - if (parent instanceof ITypedElement) - path= getPath((ITypedElement)parent, level+1); - } - if (path == null) - path= new String[level+1]; - path[(path.length-1)-level]= el.getName(); - return path; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java deleted file mode 100644 index 5e63ab230..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java +++ /dev/null @@ -1,719 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.util.Iterator; -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.util.*; -import org.eclipse.jface.action.*; -import org.eclipse.jface.viewers.*; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.*; - -/** - * A tree viewer that works on objects implementing - * the <code>IDiffContainer</code> and <code>IDiffElement</code> interfaces. - * <p> - * This class may be instantiated; it is not intended to be subclassed outside - * this package. - * </p> - * - * @see IDiffContainer - * @see IDiffElement - */ -public class DiffTreeViewer extends TreeViewer { - - static class DiffViewerSorter extends ViewerSorter { - - public boolean isSorterProperty(Object element, Object property) { - return false; - } - - public int category(Object node) { - if (node instanceof DiffNode) { - Object o= ((DiffNode) node).getId(); - if (o instanceof DocumentRangeNode) - return ((DocumentRangeNode) o).getTypeCode(); - } - return 0; - } - } - - class DiffViewerContentProvider implements ITreeContentProvider { - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - public boolean isDeleted(Object element) { - return false; - } - - public void dispose() { - inputChanged(DiffTreeViewer.this, getInput(), null); - } - - public Object getParent(Object element) { - if (element instanceof IDiffElement) - return ((IDiffElement)element).getParent(); - return null; - } - - public final boolean hasChildren(Object element) { - if (element instanceof IDiffContainer) - return ((IDiffContainer)element).hasChildren(); - return false; - } - - public final Object[] getChildren(Object element) { - if (element instanceof IDiffContainer) - return ((IDiffContainer)element).getChildren(); - return new Object[0]; - } - - public Object[] getElements(Object element) { - return getChildren(element); - } - } - - /* - * Takes care of swapping left and right if fLeftIsLocal - * is true. - */ - class DiffViewerLabelProvider extends LabelProvider { - - public String getText(Object element) { - - if (element instanceof IDiffElement) - return ((IDiffElement)element).getName(); - - return Utilities.getString(fBundle, "defaultLabel"); //$NON-NLS-1$ - } - - public Image getImage(Object element) { - if (element instanceof IDiffElement) { - IDiffElement input= (IDiffElement) element; - - int kind= input.getKind(); - if (fLeftIsLocal) { - switch (kind & Differencer.DIRECTION_MASK) { - case Differencer.LEFT: - kind= (kind &~ Differencer.LEFT) | Differencer.RIGHT; - break; - case Differencer.RIGHT: - kind= (kind &~ Differencer.RIGHT) | Differencer.LEFT; - break; - } - } - - return fCompareConfiguration.getImage(input.getImage(), kind); - } - return null; - } - } - - static class FilterSame extends ViewerFilter { - public boolean select(Viewer viewer, Object parentElement, Object element) { - if (element instanceof IDiffElement) - return (((IDiffElement)element).getKind() & Differencer.PSEUDO_CONFLICT) == 0; - return true; - } - public boolean isFilterProperty(Object element, Object property) { - return false; - } - } - - private ResourceBundle fBundle; - private CompareConfiguration fCompareConfiguration; - /* package */ boolean fLeftIsLocal; - private IPropertyChangeListener fPropertyChangeListener; - - private Action fCopyLeftToRightAction; - private Action fCopyRightToLeftAction; - private Action fEmptyMenuAction; - private Action fExpandAllAction; - - /** - * Creates a new viewer for the given SWT tree control with the specified configuration. - * - * @param tree the tree control - * @param configuration the configuration for this viewer - */ - public DiffTreeViewer(Tree tree, CompareConfiguration configuration) { - super(tree); - initialize(configuration); - } - - /** - * Creates a new viewer under the given SWT parent and with the specified configuration. - * - * @param parent the SWT control under which to create the viewer - * @param configuration the configuration for this viewer - */ - public DiffTreeViewer(Composite parent, CompareConfiguration configuration) { - super(new Tree(parent, SWT.MULTI)); - initialize(configuration); - } - - private void initialize(CompareConfiguration configuration) { - - Control tree= getControl(); - - INavigatable nav= new INavigatable() { - public boolean gotoDifference(boolean next) { - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - return internalNavigate(next, true); - } - }; - tree.setData(INavigatable.NAVIGATOR_PROPERTY, nav); - - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - IOpenable openable= new IOpenable() { - public void openSelected() { - internalOpen(); - } - }; - tree.setData(IOpenable.OPENABLE_PROPERTY, openable); - - fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false); //$NON-NLS-1$ - - tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle()); - - Composite parent= tree.getParent(); - - fBundle= ResourceBundle.getBundle("org.eclipse.compare.structuremergeviewer.DiffTreeViewerResources"); //$NON-NLS-1$ - - // register for notification with the CompareConfiguration - fCompareConfiguration= configuration; - if (fCompareConfiguration != null) { - fPropertyChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - DiffTreeViewer.this.propertyChange(event); - } - }; - fCompareConfiguration.addPropertyChangeListener(fPropertyChangeListener); - } - - setContentProvider(new DiffViewerContentProvider()); - setLabelProvider(new DiffViewerLabelProvider()); - - addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent se) { - updateActions(); - } - } - ); - - setSorter(new DiffViewerSorter()); - - ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(parent); - if (tbm != null) { - tbm.removeAll(); - - tbm.add(new Separator("merge")); //$NON-NLS-1$ - tbm.add(new Separator("modes")); //$NON-NLS-1$ - tbm.add(new Separator("navigation")); //$NON-NLS-1$ - - createToolItems(tbm); - updateActions(); - - tbm.update(true); - } - - MenuManager mm= new MenuManager(); - mm.setRemoveAllWhenShown(true); - mm.addMenuListener( - new IMenuListener() { - public void menuAboutToShow(IMenuManager mm) { - fillContextMenu(mm); - if (mm.isEmpty()) { - if (fEmptyMenuAction == null) { - fEmptyMenuAction= - new Action(Utilities.getString(fBundle, "emptyMenuItem")) {}; //$NON-NLS-1$ - fEmptyMenuAction.setEnabled(false); - } - mm.add(fEmptyMenuAction); - } - } - } - ); - tree.setMenu(mm.createContextMenu(tree)); - } - - /** - * Returns the viewer's name. - * - * @return the viewer's name - */ - public String getTitle() { - String title= Utilities.getString(fBundle, "title", null); //$NON-NLS-1$ - if (title == null) - title= Utilities.getString("DiffTreeViewer.title"); //$NON-NLS-1$ - return title; - } - - /** - * Returns the resource bundle. - * - * @return the viewer's resource bundle - */ - protected ResourceBundle getBundle() { - return fBundle; - } - - /** - * Returns the compare configuration of this viewer. - * - * @return the compare configuration of this viewer - */ - public CompareConfiguration getCompareConfiguration() { - return fCompareConfiguration; - } - - /** - * Called on the viewer disposal. - * Unregisters from the compare configuration. - * Clients may extend if they have to do additional cleanup. - */ - protected void handleDispose(DisposeEvent event) { - - if (fCompareConfiguration != null) { - if (fPropertyChangeListener != null) - fCompareConfiguration.removePropertyChangeListener(fPropertyChangeListener); - fCompareConfiguration= null; - } - fPropertyChangeListener= null; - - super.handleDispose(event); - } - - /** - * Tracks property changes of the configuration object. - * Clients may extend to track their own property changes. - */ - protected void propertyChange(PropertyChangeEvent event) { - } - - protected void inputChanged(Object in, Object oldInput) { - super.inputChanged(in, oldInput); - - if (in != oldInput) { - initialSelection(); - updateActions(); - } - } - - /** - * This hook method is called from within <code>inputChanged</code> - * after a new input has been set but before any controls are updated. - * This default implementation calls <code>navigate(true)</code> - * to select and expand the first leaf node. - * Clients can override this method and are free to decide whether - * they want to call the inherited method. - * - * @since 2.0 - */ - protected void initialSelection() { - navigate(true); - } - - /** - * Overridden to avoid expanding <code>DiffNode</code>s that shouldn't expand. - */ - protected void internalExpandToLevel(Widget node, int level) { - - Object data= node.getData(); - - if (dontExpand(data)) - return; - - super.internalExpandToLevel(node, level); - } - - /** - * This hook method is called from within <code>internalExpandToLevel</code> - * to control whether a given model node should be expanded or not. - * This default implementation checks whether the object is a <code>DiffNode</code> and - * calls <code>dontExpand()</code> on it. - * Clients can override this method and are free to decide whether - * they want to call the inherited method. - * - * @param o the model object to be expanded - * @return <code>false</code> if a node should be expanded, <code>true</code> to prevent expanding - * @since 2.0 - */ - protected boolean dontExpand(Object o) { - return o instanceof DiffNode && ((DiffNode)o).dontExpand(); - } - - //---- merge action support - - /** - * This factory method is called after the viewer's controls have been created. - * It installs four actions in the given <code>ToolBarManager</code>. Two actions - * allow for copying one side of a <code>DiffNode</code> to the other side. - * Two other actions are for navigating from one node to the next (previous). - * <p> - * Clients can override this method and are free to decide whether they want to call - * the inherited method. - * - * @param toolbarManager the toolbar manager for which to add the actions - */ - protected void createToolItems(ToolBarManager toolbarManager) { - -// fCopyLeftToRightAction= new Action() { -// public void run() { -// copySelected(true); -// } -// }; -// Utilities.initAction(fCopyLeftToRightAction, fBundle, "action.TakeLeft."); -// toolbarManager.appendToGroup("merge", fCopyLeftToRightAction); - -// fCopyRightToLeftAction= new Action() { -// public void run() { -// copySelected(false); -// } -// }; -// Utilities.initAction(fCopyRightToLeftAction, fBundle, "action.TakeRight."); -// toolbarManager.appendToGroup("merge", fCopyRightToLeftAction); - -// fNextAction= new Action() { -// public void run() { -// navigate(true); -// } -// }; -// Utilities.initAction(fNextAction, fBundle, "action.NextDiff."); //$NON-NLS-1$ -// toolbarManager.appendToGroup("navigation", fNextAction); //$NON-NLS-1$ - -// fPreviousAction= new Action() { -// public void run() { -// navigate(false); -// } -// }; -// Utilities.initAction(fPreviousAction, fBundle, "action.PrevDiff."); //$NON-NLS-1$ -// toolbarManager.appendToGroup("navigation", fPreviousAction); //$NON-NLS-1$ - } - - /** - * This method is called to add actions to the viewer's context menu. - * It installs actions for expanding tree nodes, copying one side of a <code>DiffNode</code> to the other side. - * Clients can override this method and are free to decide whether they want to call - * the inherited method. - * - * @param manager the menu manager for which to add the actions - */ - protected void fillContextMenu(IMenuManager manager) { - if (fExpandAllAction == null) { - fExpandAllAction= new Action() { - public void run() { - expandSelection(); - } - }; - Utilities.initAction(fExpandAllAction, fBundle, "action.ExpandAll."); //$NON-NLS-1$ - } - - boolean enable= false; - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - Iterator elements= ((IStructuredSelection)selection).iterator(); - while (elements.hasNext()) { - Object element= elements.next(); - if (element instanceof IDiffContainer) { - if (((IDiffContainer)element).hasChildren()) { - enable= true; - break; - } - } - } - } - fExpandAllAction.setEnabled(enable); - - manager.add(fExpandAllAction); - - if (fCopyLeftToRightAction != null) - manager.add(fCopyLeftToRightAction); - if (fCopyRightToLeftAction != null) - manager.add(fCopyRightToLeftAction); - } - - /** - * Expands to infinity all items in the selection. - * - * @since 2.0 - */ - protected void expandSelection() { - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - Iterator elements= ((IStructuredSelection)selection).iterator(); - while (elements.hasNext()) { - Object next= elements.next(); - expandToLevel(next, ALL_LEVELS); - } - } - } - - /** - * Copies one side of all <code>DiffNode</code>s in the current selection to the other side. - * Called from the (internal) actions for copying the sides of a <code>DiffNode</code>. - * Clients may override. - * - * @param leftToRight if <code>true</code> the left side is copied to the right side. - * If <code>false</code> the right side is copied to the left side - */ - protected void copySelected(boolean leftToRight) { - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - Iterator e= ((IStructuredSelection) selection).iterator(); - while (e.hasNext()) { - Object element= e.next(); - if (element instanceof ICompareInput) - copyOne((ICompareInput) element, leftToRight); - } - } - } - - /** - * Called to copy one side of the given node to the other. - * This default implementation delegates the call to <code>ICompareInput.copy(...)</code>. - * Clients may override. - * - * @param leftToRight if <code>true</code> the left side is copied to the right side. - * If <code>false</code> the right side is copied to the left side - */ - protected void copyOne(ICompareInput node, boolean leftToRight) { - - node.copy(leftToRight); - - // update node's image - update(new Object[] { node }, null); - } - - /** - * Selects the next (or previous) node of the current selection. - * If there is no current selection the first (last) node in the tree is selected. - * Wraps around at end or beginning. - * Clients may override. - * - * @param next if <code>true</code> the next node is selected, otherwise the previous node - */ - protected void navigate(boolean next) { - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - internalNavigate(next, false); - } - - //---- private - - /** - * Selects the next (or previous) node of the current selection. - * If there is no current selection the first (last) node in the tree is selected. - * Wraps around at end or beginning. - * Clients may override. - * - * @param next if <code>true</code> the next node is selected, otherwise the previous node - * @return <code>true</code> if at end (or beginning) - */ - private boolean internalNavigate(boolean next, boolean fireOpen) { - - Control c= getControl(); - if (!(c instanceof Tree)) - return false; - - Tree tree= (Tree) c; - TreeItem item= null; - TreeItem children[]= tree.getSelection(); - if (children != null && children.length > 0) - item= children[0]; - if (item == null) { - children= tree.getItems(); - if (children != null && children.length > 0) { - item= children[0]; - if (item != null && item.getItemCount() <= 0) { - internalSetSelection(item, fireOpen); // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - return false; - } - } - } - - while (true) { - item= findNextPrev(item, next); - if (item == null) - break; - if (item.getItemCount() <= 0) - break; - } - - if (item != null) { - internalSetSelection(item, fireOpen); // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - return false; - } - return true; - } - - private TreeItem findNextPrev(TreeItem item, boolean next) { - - if (item == null) - return null; - - TreeItem children[]= null; - - if (!next) { - - TreeItem parent= item.getParentItem(); - if (parent != null) - children= parent.getItems(); - else - children= item.getParent().getItems(); - - if (children != null && children.length > 0) { - // goto previous child - int index= 0; - for (; index < children.length; index++) - if (children[index] == item) - break; - - if (index > 0) { - - item= children[index-1]; - - while (true) { - createChildren(item); - int n= item.getItemCount(); - if (n <= 0) - break; - - item.setExpanded(true); - item= item.getItems()[n-1]; - } - - // previous - return item; - } - } - - // go up - return parent; - - } else { - item.setExpanded(true); - createChildren(item); - - if (item.getItemCount() > 0) { - // has children: go down - children= item.getItems(); - return children[0]; - } - - while (item != null) { - children= null; - TreeItem parent= item.getParentItem(); - if (parent != null) - children= parent.getItems(); - else - children= item.getParent().getItems(); - - if (children != null && children.length > 0) { - // goto next child - int index= 0; - for (; index < children.length; index++) - if (children[index] == item) - break; - - if (index < children.length-1) { - // next - return children[index+1]; - } - } - - // go up - item= parent; - } - } - - return item; - } - - private void internalSetSelection(TreeItem ti, boolean fireOpen) { - if (ti != null) { - Object data= ti.getData(); - if (data != null) { - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - ISelection selection= new StructuredSelection(data); - setSelection(selection, true); - ISelection currentSelection= getSelection(); - if (fireOpen && currentSelection != null && selection.equals(currentSelection)) { - fireOpen(new OpenEvent(this, selection)); - } - } - } - } - - private final boolean isEditable(Object element, boolean left) { - if (element instanceof ICompareInput) { - ICompareInput diff= (ICompareInput) element; - Object side= left ? diff.getLeft() : diff.getRight(); - if (side == null && diff instanceof IDiffElement) { - IDiffContainer container= ((IDiffElement)diff).getParent(); - if (container instanceof ICompareInput) { - ICompareInput parent= (ICompareInput) container; - side= left ? parent.getLeft() : parent.getRight(); - } - } - if (side instanceof IEditableContent) - return ((IEditableContent) side).isEditable(); - } - return false; - } - - private void updateActions() { - int leftToRight= 0; - int rightToLeft= 0; - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection) selection; - Iterator e= ss.iterator(); - while (e.hasNext()) { - Object element= e.next(); - if (element instanceof ICompareInput) { - if (isEditable(element, false)) - leftToRight++; - if (isEditable(element, true)) - rightToLeft++; - if (leftToRight > 0 && rightToLeft > 0) - break; - } - } - if (fExpandAllAction != null) - fExpandAllAction.setEnabled(selection.isEmpty()); - } - if (fCopyLeftToRightAction != null) - fCopyLeftToRightAction.setEnabled(leftToRight > 0); - if (fCopyRightToLeftAction != null) - fCopyRightToLeftAction.setEnabled(rightToLeft > 0); - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private void internalOpen() { - ISelection selection= getSelection(); - if (selection != null && !selection.isEmpty()) { - fireOpen(new OpenEvent(this, selection)); - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties deleted file mode 100644 index 1691840e2..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties +++ /dev/null @@ -1,53 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)DiffTreeViewerResources.properties -# -# Resource strings for DiffTreeViewer.java - -title= Structure Compare -defaultLabel= <no name> - -##################################################### -# Dummy menu item for empty context menu -##################################################### - -emptyMenuItem= <Empty Menu> - -##################################################### -# Actions -##################################################### - -action.Smart.label=Smart -action.Smart.tooltip=Guess Similar Elements -action.Smart.image=smartmode_co.gif - -action.ExpandAll.label=Expand All -action.ExpandAll.tooltip=Expand All Nodes - -action.CompareContents.label= Show Content Comparison -action.CompareContents.tooltip= Show content comparison - -action.NextDiff.label=Next -action.NextDiff.tooltip=Select Next Change -action.NextDiff.image=next_nav.gif - -action.PrevDiff.label=Previous -action.PrevDiff.tooltip=Select Previous Change -action.PrevDiff.image=prev_nav.gif - -action.TakeLeft.label=Copy Left to Right -action.TakeLeft.tooltip=Copy Selected Nodes from Left to Right -action.TakeLeft.image=copycont_r_co.gif - -action.TakeRight.label=Copy Right to Left -action.TakeRight.tooltip=Copy Selected Nodes from Right to Left -action.TakeRight.image=copycont_l_co.gif diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java deleted file mode 100644 index e71152b6a..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java +++ /dev/null @@ -1,522 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.io.*; -import java.util.*; -import java.text.MessageFormat; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.Utilities; - - -/** - * A generic two-way or three-way differencing engine. - * <p> - * The engine is used by calling one of the <code>findDifferences</code> methods and passing - * in the objects to compare. - * The engine calls the following methods on the input objects to perform the compare: - * <UL> - * <LI><code>getChildren</code>: for enumerating the children of an object (if any), - * <LI><code>contentsEqual</code>: for comparing the content of leaf objects, that is, objects without children, - * <LI><code>visit</code>: for every pair of compared object the compare result is passed in. - * </UL> - * Clients may use as is, or subclass to provide a custom implementation for the three hooks. - * However the default implementation already deals with the typical case: - * <UL> - * <LI><code>getChildren</code>: tries to apply the <code>IStructureComparator</code> - * interface to enumerate the children, - * <LI><code>contentsEqual</code>: tries to apply the <code>IStreamContentAccessor</code> interface - * to perform a byte-wise content comparison, - * <LI><code>visit</code>: creates a <code>DiffNode</code> for any detected difference between the compared objects and - * links it under a parent node effectively creating a tree of differences. - * </UL> - * The different kind of changes detected by the engine are decoded as follows: - * In the two-way case only NO_CHANGE, ADDITION, DELETION, and CHANGE are used. - * In the three-way case these constants are bitwise ORed with one of directional constants - * LEFT, RIGHT, and CONFLICTING. - */ -public class Differencer { - - // The kind of differences. - /** - * Difference constant (value 0) indicating no difference. - */ - public static final int NO_CHANGE= 0; - /** - * Difference constant (value 1) indicating one side was added. - */ - public static final int ADDITION= 1; - /** - * Difference constant (value 2) indicating one side was removed. - */ - public static final int DELETION= 2; - /** - * Difference constant (value 3) indicating side changed. - */ - public static final int CHANGE= 3; - - /** - * Bit mask (value 3) for extracting the kind of difference. - */ - public static final int CHANGE_TYPE_MASK= 3; - - // The direction of a three-way change. - /** - * Three-way change constant (value 4) indicating a change on left side. - */ - public static final int LEFT= 4; - - /** - * Three-way change constant (value 8) indicating a change on right side. - */ - public static final int RIGHT= 8; - - /** - * Three-way change constant (value 12) indicating a change on left and - * right sides. - */ - public static final int CONFLICTING= 12; - - /** - * Bit mask (value 12) for extracting the direction of a three-way change. - */ - public static final int DIRECTION_MASK= 12; - - /** - * Constant (value 16) indicating a change on left and - * right side (with respect to ancestor) but left and right are identical. - */ - public static final int PSEUDO_CONFLICT= 16; - - - static class Node { - List fChildren; - int fCode; - Object fAncestor; - Object fLeft; - Object fRight; - - Node() { - } - Node(Node parent, Object ancestor, Object left, Object right) { - parent.add(this); - fAncestor= ancestor; - fLeft= left; - fRight= right; - } - void add(Node child) { - if (fChildren == null) - fChildren= new ArrayList(); - fChildren.add(child); - } - Object visit(Differencer d, Object parent, int level) { - if (fCode == NO_CHANGE) - return null; - //dump(level); - Object data= d.visit(parent, fCode, fAncestor, fLeft, fRight); - if (fChildren != null) { - Iterator i= fChildren.iterator(); - while (i.hasNext()) { - Node n= (Node) i.next(); - n.visit(d, data, level+1); - } - } - return data; - } -// private void dump(int level) { -// String name= null; -// if (fAncestor instanceof ITypedElement) -// name= ((ITypedElement)fAncestor).getName(); -// if (name == null && fLeft instanceof ITypedElement) -// name= ((ITypedElement)fLeft).getName(); -// if (name == null && fRight instanceof ITypedElement) -// name= ((ITypedElement)fRight).getName(); -// if (name == null) -// name= "???"; //$NON-NLS-1$ -// -// for (int i= 0; i < level; i++) -// System.out.print(" "); //$NON-NLS-1$ -// -// System.out.println(getDiffType(fCode) + name); -// } - -// private String getDiffType(int code) { -// String dir= " "; //$NON-NLS-1$ -// switch (code & DIRECTION_MASK) { -// case LEFT: -// dir= ">"; //$NON-NLS-1$ -// break; -// case RIGHT: -// dir= "<"; //$NON-NLS-1$ -// break; -// case CONFLICTING: -// dir= "!"; //$NON-NLS-1$ -// break; -// } -// String change= "="; //$NON-NLS-1$ -// switch (code & CHANGE_TYPE_MASK) { -// case ADDITION: -// change= "+"; //$NON-NLS-1$ -// break; -// case DELETION: -// change= "-"; //$NON-NLS-1$ -// break; -// case CHANGE: -// change= "#"; //$NON-NLS-1$ -// break; -// } -// return dir + change + " "; //$NON-NLS-1$ -// } - } - - /** - * Creates a new differencing engine. - */ - public Differencer() { - } - - /** - * Starts the differencing engine on the three input objects. If threeWay is <code>true</code> a - * three-way comparison is performed, otherwise a two-way compare (in the latter case the ancestor argument is ignored). - * The progress monitor is passed to the method <code>updateProgress</code> which is called for every node or - * leaf compare. The method returns the object that was returned from the top-most call to method <code>visit</code>. - * At most two of the ancestor, left, and right parameters are allowed to be <code>null</code>. - * - * @param threeWay if <code>true</code> a three-way comparison is performed, otherwise a two-way compare - * @param pm a progress monitor which is passed to method <code>updateProgress</code> - * @param data a client data that is passed to the top-level call to <code>visit</code> - * @param ancestor the ancestor object of the compare (may be <code>null</code>) - * @param left the left object of the compare - * @param right the right object of the compare - * @return the object returned from the top most call to method <code>visit</code>, - * possibly <code>null</code> - */ - public Object findDifferences(boolean threeWay, IProgressMonitor pm, Object data, Object ancestor, Object left, Object right) { - - Node root= new Node(); - - int code= traverse(threeWay, root, pm, threeWay ? ancestor : null, left, right); - - if (code != NO_CHANGE) { - List l= root.fChildren; - if (l.size() > 0) { - Node first= (Node)l.get(0); - return first.visit(this, data, 0); - } - } - return null; - } - - /** - * Traverse tree in postorder. - */ - private int traverse(boolean threeWay, Node parent, IProgressMonitor pm, Object ancestor, Object left, Object right) { - - Object[] ancestorChildren= getChildren(ancestor); - Object[] rightChildren= getChildren(right); - Object[] leftChildren= getChildren(left); - - int code= NO_CHANGE; - - Node node= new Node(parent, ancestor, left, right); - - boolean content= true; // we reset this if we have at least one child - - if (((threeWay && ancestorChildren != null) || !threeWay) - && rightChildren != null && leftChildren != null) { - // we only recurse down if no leg is null - // a node - - Set allSet= new HashSet(20); - Map ancestorSet= null; - Map rightSet= null; - Map leftSet= null; - - if (ancestorChildren != null) { - ancestorSet= new HashMap(10); - for (int i= 0; i < ancestorChildren.length; i++) { - Object ancestorChild= ancestorChildren[i]; - ancestorSet.put(ancestorChild, ancestorChild); - allSet.add(ancestorChild); - } - } - - if (rightChildren != null) { - rightSet= new HashMap(10); - for (int i= 0; i < rightChildren.length; i++) { - Object rightChild= rightChildren[i]; - rightSet.put(rightChild, rightChild); - allSet.add(rightChild); - } - } - - if (leftChildren != null) { - leftSet= new HashMap(10); - for (int i= 0; i < leftChildren.length; i++) { - Object leftChild= leftChildren[i]; - leftSet.put(leftChild, leftChild); - allSet.add(leftChild); - } - } - - Iterator e= allSet.iterator(); - while (e.hasNext()) { - Object keyChild= e.next(); - - content= false; - - if (pm != null) { - - if (pm.isCanceled()) - throw new OperationCanceledException(); - - updateProgress(pm, keyChild); - } - - Object ancestorChild= ancestorSet != null ? ancestorSet.get(keyChild) : null; - Object leftChild= leftSet != null ? leftSet.get(keyChild) : null; - Object rightChild= rightSet != null ? rightSet.get(keyChild) : null; - - int c= traverse(threeWay, node, pm, ancestorChild, leftChild, rightChild); - - if ((c & CHANGE_TYPE_MASK) != NO_CHANGE) { - code|= CHANGE; // deletions and additions of child result in a change of the container - code|= (c & DIRECTION_MASK); // incoming & outgoing are just ored - } - } - } - - if (content) // a leaf - code= compare(threeWay, ancestor, left, right); - - node.fCode= code; - - return code; - } - - /** - * Called for every node or leaf comparison. - * The differencing engine passes in the input objects of the compare and the result of the compare. - * The data object is the value returned from a call to the <code>visit</code> method on the parent input. - * It can be considered the "parent" reference and is useful when building a tree. - * <p> - * The <code>Differencer</code> implementation returns a new - * <code>DiffNode</code> which is initialized with the corresponding values. - * Subclasses may override. - * - * @param data object returned from parent call to <code>visit</code>, - * possibly <code>null</code> - * @param result the result of the compare operation performed on the three inputs - * @param ancestor the compare ancestor of the left and right inputs - * @param left the left input to the compare - * @param right the right input to the compare - * @return the result, possibly <code>null</code> - */ - protected Object visit(Object data, int result, Object ancestor, Object left, Object right) { - return new DiffNode((IDiffContainer) data, result, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right); - } - - /** - * Performs a 2-way or 3-way compare of the given leaf elements and returns an integer - * describing the kind of difference. - */ - private int compare(boolean threeway, Object ancestor, Object left, Object right) { - - int description= NO_CHANGE; - - if (threeway) { - if (ancestor == null) { - if (left == null) { - if (right == null) { - Assert.isTrue(false); - // shouldn't happen - } else { - description= RIGHT | ADDITION; - } - } else { - if (right == null) { - description= LEFT | ADDITION; - } else { - description= CONFLICTING | ADDITION; - if (contentsEqual(left, right)) - description|= PSEUDO_CONFLICT; - } - } - } else { - if (left == null) { - if (right == null) { - description= CONFLICTING | DELETION | PSEUDO_CONFLICT; - } else { - if (contentsEqual(ancestor, right)) - description= LEFT | DELETION; - else - description= CONFLICTING | CHANGE; - } - } else { - if (right == null) { - if (contentsEqual(ancestor, left)) - description= RIGHT | DELETION; - else - description= CONFLICTING | CHANGE; - } else { - boolean ay= contentsEqual(ancestor, left); - boolean am= contentsEqual(ancestor, right); - - if (ay && am) - ; - else if (ay && !am) { - description= RIGHT | CHANGE; - } else if (!ay && am) { - description= LEFT | CHANGE; - } else { - description= CONFLICTING | CHANGE; - if (contentsEqual(left, right)) - description|= PSEUDO_CONFLICT; - } - } - } - } - } else { // two way compare ignores ancestor - if (left == null) { - if (right == null) { - Assert.isTrue(false); - // shouldn't happen - } else { - description= ADDITION; - } - } else { - if (right == null) { - description= DELETION; - } else { - if (! contentsEqual(left, right)) - description= CHANGE; - } - } - } - - return description; - } - - /** - * Performs a content compare on the two given inputs. - * <p> - * The <code>Differencer</code> implementation - * returns <code>true</code> if both inputs implement <code>IStreamContentAccessor</code> - * and their byte contents is identical. Subclasses may override to implement - * a different content compare on the given inputs. - * </p> - * - * @param input1 first input to contents compare - * @param input2 second input to contents compare - * @return <code>true</code> if content is equal - */ - protected boolean contentsEqual(Object input1, Object input2) { - - if (input1 == input2) - return true; - - InputStream is1= getStream(input1); - InputStream is2= getStream(input2); - - if (is1 == null && is2 == null) // no byte contents - return true; - - try { - if (is1 == null || is2 == null) // only one has contents - return false; - - while (true) { - int c1= is1.read(); - int c2= is2.read(); - if (c1 == -1 && c2 == -1) - return true; - if (c1 != c2) - break; - - } - } catch (IOException ex) { - } finally { - if (is1 != null) { - try { - is1.close(); - } catch(IOException ex) { - } - } - if (is2 != null) { - try { - is2.close(); - } catch(IOException ex) { - } - } - } - return false; - } - - /** - * Tries to return an InputStream for the given object. - * Returns <code>null</code> if the object not an IStreamContentAccessor - * or an error occured. - */ - private InputStream getStream(Object o) { - if (o instanceof IStreamContentAccessor) { - try { - return ((IStreamContentAccessor)o).getContents(); - } catch(CoreException ex) { - } - } - return null; - } - - /** - * Returns the children of the given input or <code>null</code> if there are no children. - * <p> - * The <code>Differencer</code> implementation checks whether the input - * implements the <code>IStructureComparator</code> interface. If yes it is used - * to return an array containing all children. Otherwise <code>null</code> is returned. - * Subclasses may override to implement a different strategy to enumerate children. - * </p> - * - * @param input the object for which to return children - */ - protected Object[] getChildren(Object input) { - if (input instanceof IStructureComparator) - return ((IStructureComparator)input).getChildren(); - return null; - } - - /** - * Called for every leaf or node compare to update progress information. - * <p> - * The <code>Differencer</code> implementation shows the name of the input object - * as a subtask. Subclasses may override. - * </p> - * - * @param progressMonitor the progress monitor for reporting progress - * @param node the currently processed non-<code>null</code> node - */ - protected void updateProgress(IProgressMonitor progressMonitor, Object node) { - if (node instanceof ITypedElement) { - String name= ((ITypedElement)node).getName(); - String fmt= Utilities.getString("Differencer.progressFormat"); //$NON-NLS-1$ - String msg= MessageFormat.format(fmt, new String[] { name }); - progressMonitor.subTask(msg); - //progressMonitor.worked(1); - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java deleted file mode 100644 index 20044c731..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java +++ /dev/null @@ -1,342 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.ArrayList; - -import org.eclipse.jface.text.*; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.*; -import org.eclipse.compare.internal.Utilities; -import org.eclipse.compare.contentmergeviewer.IDocumentRange; - - -/** - * A document range node represents a structural element - * when performing a structure compare of documents. - * <code>DocumentRangeNodes</code> are created while parsing the document and represent - * a semantic entity (e.g. a Java class or method). - * As a consequence of the parsing a <code>DocumentRangeNode</code> maps to a range - * of characters in the document. - * <p> - * Since a <code>DocumentRangeNode</code> implements the <code>IStructureComparator</code> - * and <code>IStreamContentAccessor</code> interfaces it can be used as input to the - * differencing engine. This makes it possible to perform - * a structural diff on a document and have the nodes and leaves of the compare easily map - * to character ranges within the document. - * <p> - * Subclasses may add additional state collected while parsing the document. - * </p> - * @see Differencer - */ -public class DocumentRangeNode - implements IDocumentRange, IStructureComparator, IEditableContent, IStreamContentAccessor { - - private static final boolean POS_UPDATE= true; - - private IDocument fBaseDocument; - private Position fRange; // the range in the base document - private int fTypeCode; - private String fID; - private Position fAppendPosition; // a position where to insert a child textually - private ArrayList fChildren; - - /** - * Creates a new <code>DocumentRangeNode</code> for the given range within the specified - * document. The <code>typeCode</code> is uninterpreted client data. The ID is used when comparing - * two nodes with each other: i.e. the differencing engine performs a content compare - * on two nodes if their IDs are equal. - * - * @param typeCode a type code for this node - * @param id an identifier for this node - * @param document document on which this node is based on - * @param start start position of range within document - * @param length length of range - */ - public DocumentRangeNode(int typeCode, String id, IDocument document, int start, int length) { - - fTypeCode= typeCode; - fID= id; - - fBaseDocument= document; - fBaseDocument.addPositionCategory(RANGE_CATEGORY); - fRange= new Position(start, length); - - if (POS_UPDATE) { - try { - document.addPosition(RANGE_CATEGORY, fRange); - } catch (BadPositionCategoryException ex) { - } catch (BadLocationException ex) { - } - } - } - - /* (non Javadoc) - * see IDocumentRange.getDocument - */ - public IDocument getDocument() { - return fBaseDocument; - } - - /* (non Javadoc) - * see IDocumentRange.getRange - */ - public Position getRange() { - return fRange; - } - - /** - * Returns the type code of this node. - * The type code is uninterpreted client data which can be set in the constructor. - * - * @return the type code of this node - */ - public int getTypeCode() { - return fTypeCode; - } - - /** - * Returns this node's id. - * It is used in <code>equals</code> and <code>hashcode</code>. - * - * @return the node's id - */ - public String getId() { - return fID; - } - - /** - * Sets this node's id. - * It is used in <code>equals</code> and <code>hashcode</code>. - * - * @param id the new id for this node - */ - public void setId(String id) { - fID= id; - } - - /** - * Adds the given node as a child. - * - * @param node the node to add as a child - */ - public void addChild(DocumentRangeNode node) { - if (fChildren == null) - fChildren= new ArrayList(); - fChildren.add(node); - } - - /* (non Javadoc) - * see IStructureComparator.getChildren - */ - public Object[] getChildren() { - if (fChildren != null) - return fChildren.toArray(); - return new Object[0]; - } - - /** - * Sets the length of the range of this node. - * - * @param length the length of the range - */ - public void setLength(int length) { - getRange().setLength(length); - } - - /** - * Sets a position within the document range that can be used to (legally) insert - * text without breaking the syntax of the document. - * <p> - * E.g. when parsing a Java document the "append position" of a <code>DocumentRangeNode</code> - * representating a Java class could be the character position just before the closing bracket. - * Inserting the text of a new method there would not disturb the syntax of the class. - * - * @param pos the character position within the underlying document where text can be legally inserted - */ - public void setAppendPosition(int pos) { - if (POS_UPDATE) { - fBaseDocument.removePosition(fAppendPosition); - try { - Position p= new Position(pos); - fBaseDocument.addPosition(RANGE_CATEGORY, p); - fAppendPosition= p; - } catch (BadPositionCategoryException ex) { - } catch (BadLocationException ex) { - // ignore - } - } else { - fAppendPosition= new Position(pos); - } - } - - /** - * Returns the position that has been set with <code>setAppendPosition</code>. - * If <code>setAppendPosition</code> hasn't been called, the position after the last character - * of this range is returned. - * - * @return a position where text can be legally inserted - */ - public Position getAppendPosition() { - if (fAppendPosition == null) { - if (POS_UPDATE) { - try { - Position p= new Position(fBaseDocument.getLength()); - fBaseDocument.addPosition(RANGE_CATEGORY, p); - fAppendPosition= p; - } catch (BadPositionCategoryException ex) { - } catch (BadLocationException ex) { - // ignore - } - } else { - fAppendPosition= new Position(fBaseDocument.getLength()); - } - } - return fAppendPosition; - } - - /** - * Implementation based on <code>getID</code>. - */ - public boolean equals(Object other) { - if (other != null && other.getClass() == getClass()) { - DocumentRangeNode tn= (DocumentRangeNode) other; - return fTypeCode == tn.fTypeCode && fID.equals(tn.fID); - } - return super.equals(other); - } - - /** - * Implementation based on <code>getID</code>. - */ - public int hashCode() { - return fID.hashCode(); - } - - /** - * Find corresponding position - */ - private Position findCorrespondingPosition(DocumentRangeNode otherParent, DocumentRangeNode child) { - - // we try to find a predecessor of left Node which exists on the right side - - if (child != null && fChildren != null) { - int ix= otherParent.fChildren.indexOf(child); - if (ix >= 0) { - - for (int i= ix - 1; i >= 0; i--) { - DocumentRangeNode c1= (DocumentRangeNode) otherParent.fChildren.get(i); - int i2= fChildren.indexOf(c1); - if (i2 >= 0) { - DocumentRangeNode c= (DocumentRangeNode) fChildren.get(i2); - //System.out.println(" found corresponding: " + i2 + " " + c); - Position p= c.fRange; - - //try { - Position po= new Position(p.getOffset() + p.getLength() + 1, 0); - //c.fBaseDocument.addPosition(RANGE_CATEGORY, po); - return po; - //} catch (BadLocationException ex) { - //} - //break; - } - } - - for (int i= ix; i < otherParent.fChildren.size(); i++) { - DocumentRangeNode c1= (DocumentRangeNode) otherParent.fChildren.get(i); - int i2= fChildren.indexOf(c1); - if (i2 >= 0) { - DocumentRangeNode c= (DocumentRangeNode) fChildren.get(i2); - //System.out.println(" found corresponding: " + i2 + " " + c); - Position p= c.fRange; - //try { - Position po= new Position(p.getOffset(), 0); - //c.fBaseDocument.addPosition(RANGE_CATEGORY, po); - return po; - //} catch (BadLocationException ex) { - //} - //break; - } - } - - } - } - return getAppendPosition(); - } - - private void add(String s, DocumentRangeNode parent, DocumentRangeNode child) { - - Position p= findCorrespondingPosition(parent, child); - if (p != null) { - try { - fBaseDocument.replace(p.getOffset(), p.getLength(), s); - } catch (BadLocationException ex) { - // ignore - } - } - } - - /* (non Javadoc) - * see IStreamContentAccessor.getContents - */ - public InputStream getContents() { - String s; - try { - s= fBaseDocument.get(fRange.getOffset(), fRange.getLength()); - } catch (BadLocationException ex) { - s= ""; //$NON-NLS-1$ - } - return new ByteArrayInputStream(Utilities.getBytes(s)); - } - - /* (non Javadoc) - * see IEditableContent.isEditable - */ - public boolean isEditable() { - return true; - } - - /* (non Javadoc) - * see IEditableContent.replace - */ - public ITypedElement replace(ITypedElement child, ITypedElement other) { - - DocumentRangeNode src= null; - String srcContents= ""; //$NON-NLS-1$ - - if (other != null) { - src= (DocumentRangeNode) child; - - if (other instanceof IStreamContentAccessor) { - try { - InputStream is= ((IStreamContentAccessor)other).getContents(); - srcContents= Utilities.readString(is); - } catch(CoreException ex) { - } - } - } - - if (child == null) // no destination: we have to add the contents into the parent - add(srcContents, null, src); - - return child; - } - - /* (non Javadoc) - * see IEditableContent.setContent - */ - public void setContent(byte[] content) { - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java deleted file mode 100644 index 39947707d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import org.eclipse.compare.ITypedElement; -import org.eclipse.swt.graphics.Image; - -/** - * Interface for objects used as input to a two-way or three-way compare viewer. - * It defines API for accessing the three sides for the compare, - * and a name and image which is used when displaying the three way input - * in the UI, for example, in a title bar. - * <p> - * Note: at most two sides of an <code>ICompareInput</code> can be <code>null</code>, - * (as it is normal for additions or deletions) but not all three. - * <p> - * <code>ICompareInput</code> provides methods for registering - * <code>ICompareInputChangeListener</code>s - * that get informed if one (or more) - * of the three sides of an <code>ICompareInput</code> object changes its value. - * <p> - * For example when accepting an incoming addition - * the (non-<code>null</code>) left side of an <code>ICompareInput</code> - * is copied to the right side by means of method <code>copy</code>. - * This should trigger a call to <code>compareInputChanged</code> of registered - * <code>ICompareInputChangeListener</code>s. - * <p> - * Clients can implement this interface, or use the convenience implementation - * <code>DiffNode</code>. - * </p> - * - * @see StructureDiffViewer - * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer - * @see DiffNode - */ -public interface ICompareInput { - - /** - * Returns name of input. - * This name is displayed when this input is shown in a viewer. - * In many cases this name is the name of one of the non-<code>null</code> sides or a combination - * thereof. - * - * @return name of input - */ - String getName(); - - /** - * Returns an image representing this input. - * This image is typically displayed when this input is shown in a viewer. - * In many cases this image is the image of one of the non-<code>null</code> sides. - * - * @return image representing this input, or <code>null</code> if no icon should be shown - */ - Image getImage(); - - /** - * Returns the kind of difference between the - * three sides ancestor, left and right. - * This field is only meaningful if the <code>ICompareInput</code> - * is the result of another compare. In this case it is used - * together with <code>getImage</code> to compose a icon - * which reflects the kind of difference between the two or three elements. - * - * @return kind of difference (see <code>Differencer</code>) - */ - int getKind(); - - /** - * Returns the ancestor side of this input. - * Returns <code>null</code> if this input has no ancestor - * or in the two-way compare case. - * - * @return the ancestor of this input, or <code>null</code> - */ - ITypedElement getAncestor(); - - /** - * Returns the left side of this input. - * Returns <code>null</code> if there is no left side (deletion or addition). - * - * @return the left side of this input, or <code>null</code> - */ - ITypedElement getLeft(); - - /** - * Returns the right side of this input. - * Returns <code>null</code> if there is no right side (deletion or addition). - * - * @return the right side of this input, or <code>null</code> - */ - ITypedElement getRight(); - - /** - * Registers the given listener for notification. - * If the identical listener is already registered the method has no effect. - * - * @param listener the listener to register for changes of this input - */ - void addCompareInputChangeListener(ICompareInputChangeListener listener); - - /** - * Unregisters the given listener. - * If the identical listener is not registered the method has no effect. - * - * @param listener the listener to unregister - */ - void removeCompareInputChangeListener(ICompareInputChangeListener listener); - - /** - * Copy one side (source) to the other side (destination) depending on the - * value of <code>leftToRight</code>. This method is called from - * a merge viewer if a corresponding action ("take left" or "take right") - * has been pressed. - * <p> - * The implementation should handle the following cases: - * <UL> - * <LI> - * if the source side is <code>null</code> the destination must be deleted, - * <LI> - * if the destination is <code>null</code> the destination must be created - * and filled with the contents from the source, - * <LI> - * if both sides are non-<code>null</code> the contents of source must be copied to destination. - * </UL> - * In addition the implementation should send out notification to the registered - * <code>ICompareInputChangeListener</code>. - * - * @param leftToRight if <code>true</code> the left side is copied to the right side. - * If <code>false</code> the right side is copied to the left side - */ - void copy(boolean leftToRight); -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java deleted file mode 100644 index 4cb79df1a..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -/** - * Listener that gets informed if one (or more) - * of the three sides of an <code>ICompareInput</code> object changes its value. - * <p> - * For example when accepting an incoming addition - * the (non-null) left side of an <code>ICompareInput</code> - * is copied to the right side (which was <code>null</code>). - * This triggers a call to <code>compareInputChanged</code> of registered - * <code>ICompareInputChangeListener</code>. - * <p> - * Note however, that listener are not informed if the content of one of the sides changes. - * <p> - * Clients may implement this interface. It is also implemented by viewers that take - * an <code>ICompareInput</code> as input. - * </p> - */ -public interface ICompareInputChangeListener { - - /** - * Called whenever the value (not the content) of one or more of the three sides - * of a <code>ICompareInput</code> has changed. - * - * @param source the <code>ICompareInput</code> that has changed - */ - void compareInputChanged(ICompareInput source); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java deleted file mode 100644 index bda0662fa..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -/** - * <code>IDiffContainer</code> is a <code>IDiffElement</code> with children. - * <p> - * <code>IDiffContainer</code> are the inner nodes displayed - * by the <code>DiffTreeViewer</code>. - * <code>IDiffContainer</code> are typically created as the result of performing - * a compare with the <code>Differencer</code>. - * <p> - * Clients may implement this interface, or use one of the standard implementations, - * <code>DiffContainer</code> or <code>DiffNode</code>. - * - * @see Differencer - * @see DiffTreeViewer - */ -public interface IDiffContainer extends IDiffElement { - - /** - * Returns whether this container has at least one child. - * In some cases this methods avoids having to call the - * potential more costly <code>getChildren</code> method. - * - * @return <code>true</code> if this container has at least one child - */ - boolean hasChildren(); - - /** - * Returns the children of this container. - * If this container has no children an empty array is returned (not <code>null</code>). - * - * @return the children of this container as an array - */ - IDiffElement[] getChildren(); - - /** - * Adds the given child to this container. - * If the child is already contained in this container, this method has no effect. - * - * @param child the child to be added to this container - */ - void add(IDiffElement child); - - /** - * Removes the given child from this container. - * If the container becomes empty it is removed from its container. - * If the child is not contained in this container, this method has no effect. - * - * @param child the child to be removed from this container - */ - void removeToRoot(IDiffElement child); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java deleted file mode 100644 index f70b7eb3f..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import org.eclipse.compare.ITypedElement; - -/** - * An <code>IDiffElement</code> is used in the <code>DiffTreeViewer</code> - * to display the kind of change detected as the result of a two-way or three-way compare. - * <p> - * The base interface <code>ITypedElement</code> provides a name, a type, and an image. - * <code>IDiffElement</code> adds API for maintaining a parent relationship. - * <p> - * <code>DiffTreeViewer</code> works on a tree of <code>IDiffElements</code>. - * Leaf elements must implement the - * <code>IDiffElement</code> interface, inner nodes the <code>IDiffContainer</code> interface. - * <p> - * <code>IDiffElement</code>s are typically created as the result of performing - * a compare with the <code>Differencer</code>. - * <p> - * Clients may implement this interface, or use one of the standard implementations, - * <code>DiffElement</code>, <code>DiffContainer</code>, or <code>DiffNode</code>. - * - * @see DiffTreeViewer - * @see DiffElement - * @see DiffContainer - * @see DiffNode - */ -public interface IDiffElement extends ITypedElement { - - /** - * Returns the kind of difference as defined in <code>Differencer</code>. - * - * @return the kind of difference as defined in <code>Differencer</code> - */ - int getKind(); - - /** - * Returns the parent of this element. - * If the object is the root of a hierarchy <code>null</code> is returned. - * - * @return the parent of this element, or <code>null</code> if the element has no parent - */ - IDiffContainer getParent(); - - /** - * Sets the parent of this element. - * - * @param parent the new parent of this element, or <code>null</code> if this - * element is to have no parent - */ - void setParent(IDiffContainer parent); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java deleted file mode 100644 index 4a07c3f47..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -/** - * Interface used to compare hierarchical structures. - * It is used by the differencing engine. - * <p> - * Clients typically implement this interface in an adaptor class which - * wrappers the objects to be compared. - * - * @see org.eclipse.compare.ResourceNode - * @see Differencer - */ -public interface IStructureComparator { - - /** - * Returns an iterator for all children of this object or <code>null</code> - * if there are no children. - * - * @return an array with all children of this object, or an empty array if there are no children - */ - Object[] getChildren(); - - /** - * Returns whether some other object is "equal to" this one - * with respect to a structural comparison. For example, when comparing - * Java class methods, <code>equals</code> would return <code>true</code> - * if two methods have the same signature (the argument names and the - * method body might differ). - * - * @param other the reference object with which to compare - * @return <code>true</code> if this object is the same as the other argument; <code>false</code> otherwise - * @see java.lang.Object#equals - */ - boolean equals(Object other); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java deleted file mode 100644 index e75dec79d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -/** - * Interface used to create a hierarchical structure of - * <code>IStructureComparator</code>s for a given input object. - * In addition, it provides methods for locating a path in the hierarchical structure - * and to map a node of this structure back to the corresponding input object. - * <p> - * Structure creators are used in the following contexts: - * <ul> - * <li> - * the <code>StructureDiffViewer</code> uses an <code>IStructureCreator</code> to - * build two (or three) tree structures of its input elements (method <code>getStructure</code>). - * These trees are then compared with each other by means of the differencing engine and displayed - * with the <code>DiffTreeViewer</code>, - * </li> - * <li> - * the <code>ReplaceWithEditionDialog</code> uses an <code>IStructureCreator</code> - * to map a path back to a range of characters in the textual representation. - * </li> - * </ul> - * A <code>IStructureCreator</code> provides methods for rewriting the tree produced by the differencing - * engine to support "smart" structural differencing. E.g. certain patterns of pairs of "addition" - * and "deletion" nodes can be detected as renames and merged into a single node. - * </p> - * <p> - * Clients may implement this interface; there is no standard implementation. - * </p> - * - * @see StructureDiffViewer - * @see org.eclipse.compare.EditionSelectionDialog - * @see Differencer - */ -public interface IStructureCreator { - - /** - * Returns a descriptive name which can be used in the UI of the <code>StructureDiffViewer</code>. - * - * @return a descriptive name for this <code>IStructureCreator</code> - */ - String getName(); - - /** - * Creates a tree structure consisting of <code>IStructureComparator</code>s - * from the given object and returns its root object. - * Implementing this method typically involves parsing the input object. - * In case of an error (e.g. a parsing error) the value <code>null</code> is returned. - * - * @param input the object from which to create the tree of <code>IStructureComparator</code> - * @return the root node of the structure or <code>null</code> in case of error - */ - IStructureComparator getStructure(Object input); - - /** - * Creates the single node specified by path from the given input object. - * In case of an error (e.g. a parsing error) the value <code>null</code> is returned. - * This method is similar to <code>getStructure</code> but in - * contrast to <code>getStructure</code> only a single node without any children must be returned. - * This method is used in the <code>ReplaceWithEditionDialog</code> to locate a sub element - * (e.g. a method) within an input object (e.g. a file containing source code). - * <p> - * One (not optimized) approach to implement this method is calling <code>getStructure(input)</code> - * to build the full tree, and then finding that node within the tree that is specified - * by <code>path</code>. - * <p> - * The syntax of <code>path</code> is not specified, because it is treated by the compare subsystem - * as an opaque entity and is not further interpreted. Clients using this functionality - * will pass a value of <code>path</code> to the <code>selectEdition</code> - * method of <code>ReplaceWithEditionDialog</code> and will receive this value unchanged - * as an argument to <code>locate</code>. - * - * @param path specifies a sub object within the input object - * @param input the object from which to create the <code>IStructureComparator</code> - * @return the single node specified by <code>path</code> or <code>null</code> - * - * @see org.eclipse.compare.EditionSelectionDialog#selectEdition - */ - IStructureComparator locate(Object path, Object input); - - /** - * Returns the contents of the given node as a string for the purpose - * of performing a content comparison only (that is the string will not be visible in the UI). - * If <code>ignoreWhitespace</code> is <code>true</code> all character sequences considered - * whitespace should be removed from the returned string. - * - * @param node the node for which to return a string representation - * @param ignoreWhitespace if <code>true</code> the returned string should not contain whitespace - * @return the string contents of the given node - */ - String getContents(Object node, boolean ignoreWhitespace); - - /** - * Called whenever a copy operation has been performed on a tree node. - * - * @param node the node for which to save the new content - * @param input the object from which the structure tree was created in <code>getStructure</code> - */ - void save(IStructureComparator node, Object input); -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java deleted file mode 100644 index 7699d8c91..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java +++ /dev/null @@ -1,372 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.widgets.*; -import org.eclipse.jface.util.PropertyChangeEvent; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.*; - - -/** - * A diff tree viewer that can be configured with a <code>IStructureCreator</code> - * to retrieve a hierarchical structure from the input object (an <code>ICompareInput</code>) - * and perform a two-way or three-way compare on it. - * <p> - * This class may be instantiated; it is not intended to be subclassed outside - * this package. - * </p> - * - * @see IStructureCreator - * @see ICompareInput - */ -public class StructureDiffViewer extends DiffTreeViewer { - - private Differencer fDifferencer; - private boolean fThreeWay= false; - - private ITypedElement fAncestorInput; - private ITypedElement fLeftInput; - private ITypedElement fRightInput; - - private IStructureComparator fAncestorStructure; - private IStructureComparator fLeftStructure; - private IStructureComparator fRightStructure; - - private IStructureCreator fStructureCreator; - private IDiffContainer fRoot; - private IContentChangeListener fContentChangedListener; - private ICompareInputChangeListener fThreeWayInputChangedListener; - private CompareViewerSwitchingPane fParent; - - /** - * Creates a new viewer for the given SWT tree control with the specified configuration. - * - * @param tree the tree control - * @param configuration the configuration for this viewer - */ - public StructureDiffViewer(Tree tree, CompareConfiguration configuration) { - super(tree, configuration); - Composite c= tree.getParent(); - if (c instanceof CompareViewerSwitchingPane) - fParent= (CompareViewerSwitchingPane) c; - initialize(); - } - - /** - * Creates a new viewer under the given SWT parent with the specified configuration. - * - * @param parent the SWT control under which to create the viewer - * @param configuration the configuration for this viewer - */ - public StructureDiffViewer(Composite parent, CompareConfiguration configuration) { - super(parent, configuration); - if (parent instanceof CompareViewerSwitchingPane) - fParent= (CompareViewerSwitchingPane) parent; - initialize(); - } - - private void initialize() { - - setAutoExpandLevel(3); - - fContentChangedListener= new IContentChangeListener() { - public void contentChanged(IContentChangeNotifier changed) { - StructureDiffViewer.this.contentChanged(changed); - } - }; - fThreeWayInputChangedListener= new ICompareInputChangeListener() { - public void compareInputChanged(ICompareInput input) { - StructureDiffViewer.this.compareInputChanged(input); - } - }; - } - - /** - * Configures the <code>StructureDiffViewer</code> with a structure creator. - * The structure creator is used to create a hierarchical structure - * for each side of the viewer's input element of type <code>ICompareInput</code>. - * - * @param structureCreator the new structure creator - */ - public void setStructureCreator(IStructureCreator structureCreator) { - if (fStructureCreator != structureCreator) { - fStructureCreator= structureCreator; - Control tree= getControl(); - if (tree != null && !tree.isDisposed()) - tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle()); - } - } - - /** - * Returns the structure creator or <code>null</code> if no - * structure creator has been set with <code>setStructureCreator</code>. - * - * @return the structure creator or <code>null</code> - */ - public IStructureCreator getStructureCreator() { - return fStructureCreator; - } - - /** - * Reimplemented to get the descriptive title for this viewer from the <code>IStructureCreator</code>. - */ - public String getTitle() { - if (fStructureCreator != null) - return fStructureCreator.getName(); - return super.getTitle(); - } - - /** - * Overridden because the input of this viewer is not identical to the root of the tree. - * The tree's root is a IDiffContainer that was returned from the method <code>diff</code>. - * - * @return the root of the diff tree produced by method <code>diff</code> - */ - protected Object getRoot() { - return fRoot; - } - - /** - * Overridden to create the comparable structures from the input object - * and to feed them through the differencing engine. Note: for this viewer - * the value from <code>getInput</code> is not identical to <code>getRoot</code>. - */ - protected void inputChanged(Object input, Object oldInput) { - if (input instanceof ICompareInput) { - compareInputChanged((ICompareInput) input); - if (input != oldInput) - initialSelection(); - } - } - - protected void initialSelection() { - expandToLevel(2); - } - - /* (non Javadoc) - * Overridden to unregister all listeners. - */ - protected void handleDispose(DisposeEvent event) { - - compareInputChanged(null); - - fContentChangedListener= null; - fThreeWayInputChangedListener= null; - - super.handleDispose(event); - } - - /** - * Recreates the comparable structures for the input sides. - */ - protected void compareInputChanged(ICompareInput input) { - ITypedElement t= null; - boolean changed= false; - - if (input != null) - t= input.getAncestor(); - - fThreeWay= (t != null); - - if (t != fAncestorInput) { - if (fAncestorInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fAncestorInput).removeContentChangeListener(fContentChangedListener); - fAncestorInput= t; - if (fAncestorInput != null) { - fAncestorStructure= fStructureCreator.getStructure(fAncestorInput); - changed= true; - } else - fAncestorStructure= null; - if (fAncestorInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fAncestorInput).addContentChangeListener(fContentChangedListener); - } - - if (input != null) - t= input.getLeft(); - if (t != fLeftInput) { - if (fLeftInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fLeftInput).removeContentChangeListener(fContentChangedListener); - fLeftInput= t; - if (fLeftInput != null) { - fLeftStructure= fStructureCreator.getStructure(fLeftInput); - changed= true; - } else - fLeftStructure= null; - if (fLeftInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fLeftInput).addContentChangeListener(fContentChangedListener); - } - - if (input != null) - t= input.getRight(); - if (t != fRightInput) { - if (fRightInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fRightInput).removeContentChangeListener(fContentChangedListener); - fRightInput= t; - if (fRightInput != null) { - fRightStructure= fStructureCreator.getStructure(fRightInput); - changed= true; - } else - fRightStructure= null; - if (fRightInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fRightInput).addContentChangeListener(fContentChangedListener); - } - - if (changed) - diff(); - } - - /** - * Calls <code>diff</code> whenever the byte contents changes. - */ - protected void contentChanged(IContentChangeNotifier changed) { - - if (fStructureCreator == null) - return; - - if (changed != null) { - if (changed == fAncestorInput) { - fAncestorStructure= fStructureCreator.getStructure(fAncestorInput); - } else if (changed == fLeftInput) { - fLeftStructure= fStructureCreator.getStructure(fLeftInput); - } else if (changed == fRightInput) { - fRightStructure= fStructureCreator.getStructure(fRightInput); - } else - return; - } else { - fAncestorStructure= fStructureCreator.getStructure(fAncestorInput); - fLeftStructure= fStructureCreator.getStructure(fLeftInput); - fRightStructure= fStructureCreator.getStructure(fRightInput); - } - - diff(); - } - - /** - * This method is called from within <code>diff()</code> before the difference - * tree is being built. - * Clients may override this method to perform their own pre-processing. - * This default implementation does nothing. - * @param ancestor the ancestor input to the differencing operation - * @param left the left input to the differencing operation - * @param right the right input to the differencing operation - * @since 2.0 - */ - protected void preDiffHook(IStructureComparator ancestor, IStructureComparator left, IStructureComparator right) { - // we do nothing here - } - - /** - * Runs the difference engine and refreshes the tree. - */ - protected void diff() { - - preDiffHook(fAncestorStructure, fLeftStructure, fRightStructure); - - String message= null; - - if ((fThreeWay && fAncestorStructure == null) || fLeftStructure == null || fRightStructure == null) { - // could not get structure of one (or more) of the legs - fRoot= null; - message= CompareMessages.getString("StructureDiffViewer.StructureError"); //$NON-NLS-1$ - - } else { // calculate difference of the two (or three) structures - - if (fDifferencer == null) - fDifferencer= new Differencer() { - protected boolean contentsEqual(Object o1, Object o2) { - return StructureDiffViewer.this.contentsEqual(o1, o2); - } - protected Object visit(Object data, int result, Object ancestor, Object left, Object right) { - Object o= super.visit(data, result, ancestor, left, right); - if (fLeftIsLocal && o instanceof DiffNode) - ((DiffNode)o).swapSides(fLeftIsLocal); - return o; - } - }; - - fRoot= (IDiffContainer) fDifferencer.findDifferences(fThreeWay, null, null, - fAncestorStructure, fLeftStructure, fRightStructure); - - if (fRoot == null || fRoot.getChildren().length == 0) { - message= CompareMessages.getString("StructureDiffViewer.NoStructuralDifferences"); //$NON-NLS-1$ - } else { - postDiffHook(fDifferencer, fRoot); - } - } - if (fParent != null) - fParent.setTitleArgument(message); - - refresh(getRoot()); - } - - /** - * This method is called from within <code>diff()</code> after the difference - * tree has been built. - * Clients may override this method to perform their own post-processing. - * This default implementation does nothing. - * @param differencer the differencer used to perform the differencing - * @param root the non-<code>null</code> root node of the difference tree - * @since 2.0 - */ - protected void postDiffHook(Differencer differencer, IDiffContainer root) { - // we do nothing here - } - - /** - * Performs a byte compare on the given objects. - * Called from the difference engine. - * Returns <code>null</code> if no structure creator has been set. - */ - private boolean contentsEqual(Object o1, Object o2) { - if (fStructureCreator != null) { - boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false); - String s1= fStructureCreator.getContents(o1, ignoreWhiteSpace); - String s2= fStructureCreator.getContents(o2, ignoreWhiteSpace); - if (s1 == null || s2 == null) - return false; - return s1.equals(s2); - } - return false; - } - - /** - * Tracks property changes of the configuration object. - * Clients may override to track their own property changes. - * In this case they must call the inherited method. - */ - protected void propertyChange(PropertyChangeEvent event) { - String key= event.getProperty(); - if (key.equals(CompareConfiguration.IGNORE_WHITESPACE)) - diff(); - else - super.propertyChange(event); - } - - /** - * Overridden to call the <code>save</code> method on the structure creator after - * nodes have been copied from one side to the other side of an input object. - * - * @param leftToRight if <code>true</code> the left side is copied to the right side. - * If <code>false</code> the right side is copied to the left side - */ - protected void copySelected(boolean leftToRight) { - super.copySelected(leftToRight); - - if (fStructureCreator != null) - fStructureCreator.save( - leftToRight ? fRightStructure : fLeftStructure, - leftToRight ? fRightInput : fLeftInput); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html deleted file mode 100644 index 60257a4d8..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html +++ /dev/null @@ -1,79 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="Author" content="IBM"> - <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]"> - <title>Package-level Javadoc</title> -</head> -<body> -Provides support for finding and displaying the differences -between hierarchically structured data. -<h2> -Package Specification</h2> - -The class <b>Differencer</b> is a differencing engine for hierarchically -structured data. It takes two or three inputs and performs a two-way or -three-way compare on them. -<p> - -If the input elements to the differencing engine implement the <b>IStructureComparator</b> -interface the engine recursively applies itself to the children of -the input element. Leaf elements must implement the <b>org.eclipse.compare.IStreamContentAccessor</b> -interface so that the differencer can perform a bytewise comparison on their contents. -<p> - -One good example for this is <b>org.eclipse.compare.ResourceNode</b> which implements both interfaces -(and more) for Eclipse workspace resources (org.eclipse.core.resources.IResource). -<p> - -Another example is the <b>DocumentRangeNode</b> which can be used to compare hierarchical structures -that are superimposed on a document, that is where nodes and leafs correspond to ranges in a document -(<b>org.eclipse.compare.contentmergeviewer.IDocumentRange</b>). -<br> -Typically <b>DocumentRangeNode</b>s are created while parsing a document and they represent -the semantic entities of the document (e.g. a Java class, method or field). -The two subclasses <b>JavaNode</b> (in org.eclipse.jdt.internal.ui.compare) -and <b>PropertyNode</b> (in org.eclipse.jdt.internal.ui.compare) are good examples for this. -<p> - -By default the differencing engine returns the result of the compare operation -as a tree of <b>DiffNode</b> objects. However, this can be changed by overriding -a single method of the engine. -<p> - -Every <b>DiffNode</b> describes the changes among the two or three inputs. -<p> - -A tree of <b>DiffNodes</b> can be displayed in a <b>DiffTreeViewer</b>. -The <b>DiffTreeViewer</b> requires that inner nodes of the tree implement -the <b>IDiffContainer</b> interface and leafs the <b>IDiffElement</b> interface. -<p> - -The typical steps to compare hierarchically structured data and to display -the differences would be to: -<ul> -<li> -map the input data into a tree of <b>IStructureComparator</b> and <b>IStreamContentAccessor</b>s,</li> - -<li> -perform the compare operation by means of the <b>Differencer</b>, and</li> - -<li> -feed the differencing result into the <b>DiffTreeViewer</b>.</li> - -</ul> - -The <b>StructureDiffViewer</b> is a specialized <b>DiffTreeViewer</b> -that automates the three steps from above. It takes a single input object -of type <b>ICompareInput</b> from which it retrieves the two or three -input elements to compare. Then it uses a <b>IStructureCreator</b> to -extract a tree of <b>IStructureComparator</b> and <b>IStreamContentAccessor</b> -from them. These trees are then compared with the differencing engine and -the result is displayed in the tree viewer. -<p> - - - -</body> -</html> diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif Binary files differdeleted file mode 100644 index 0088c97c8..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif Binary files differdeleted file mode 100644 index 6c83c45d9..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif Binary files differdeleted file mode 100644 index a3a444adf..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif Binary files differdeleted file mode 100644 index 706dc020e..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif Binary files differdeleted file mode 100644 index b95e26a1b..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/next_nav.gif b/bundles/org.eclipse.compare/icons/full/clcl16/next_nav.gif Binary files differdeleted file mode 100644 index 8392f3345..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/next_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/prev_nav.gif b/bundles/org.eclipse.compare/icons/full/clcl16/prev_nav.gif Binary files differdeleted file mode 100644 index 9b278e6fa..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/prev_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif Binary files differdeleted file mode 100644 index c2a47b6a2..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif Binary files differdeleted file mode 100644 index 3aabbce51..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif Binary files differdeleted file mode 100644 index 2045daedd..000000000 --- a/bundles/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif b/bundles/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif Binary files differdeleted file mode 100644 index ecde52ea8..000000000 --- a/bundles/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif b/bundles/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif Binary files differdeleted file mode 100644 index 097ecdda5..000000000 --- a/bundles/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/cview16/compare_view.gif b/bundles/org.eclipse.compare/icons/full/cview16/compare_view.gif Binary files differdeleted file mode 100644 index 41800a0c9..000000000 --- a/bundles/org.eclipse.compare/icons/full/cview16/compare_view.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif Binary files differdeleted file mode 100644 index 6e00deec9..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif Binary files differdeleted file mode 100644 index cb11ac9f9..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif Binary files differdeleted file mode 100644 index 202b04139..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif Binary files differdeleted file mode 100644 index 4e9a3eb98..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif Binary files differdeleted file mode 100644 index e84103f40..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/next_nav.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/next_nav.gif Binary files differdeleted file mode 100644 index 6cbeced26..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/next_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif Binary files differdeleted file mode 100644 index a3441a062..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif Binary files differdeleted file mode 100644 index 6f55d908b..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif Binary files differdeleted file mode 100644 index 2a8541ca8..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif Binary files differdeleted file mode 100644 index ecab86455..000000000 --- a/bundles/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif b/bundles/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif Binary files differdeleted file mode 100644 index c76fcc707..000000000 --- a/bundles/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif b/bundles/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif Binary files differdeleted file mode 100644 index 55147cc33..000000000 --- a/bundles/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif Binary files differdeleted file mode 100644 index 3ce77c8d3..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif Binary files differdeleted file mode 100644 index d9f5900b6..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif Binary files differdeleted file mode 100644 index 61289f18f..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif Binary files differdeleted file mode 100644 index 4fdde615d..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif Binary files differdeleted file mode 100644 index feb14bf53..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/next_nav.gif b/bundles/org.eclipse.compare/icons/full/elcl16/next_nav.gif Binary files differdeleted file mode 100644 index 03b7af342..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/next_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/prev_nav.gif b/bundles/org.eclipse.compare/icons/full/elcl16/prev_nav.gif Binary files differdeleted file mode 100644 index dd65c5235..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/prev_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif Binary files differdeleted file mode 100644 index e0a262e03..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif Binary files differdeleted file mode 100644 index 3e45390ef..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif Binary files differdeleted file mode 100644 index 4c2532296..000000000 --- a/bundles/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/etool16/conflict_edit.gif b/bundles/org.eclipse.compare/icons/full/etool16/conflict_edit.gif Binary files differdeleted file mode 100644 index b4451ec5e..000000000 --- a/bundles/org.eclipse.compare/icons/full/etool16/conflict_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif b/bundles/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif Binary files differdeleted file mode 100644 index f816c9e43..000000000 --- a/bundles/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/eview16/compare_view.gif b/bundles/org.eclipse.compare/icons/full/eview16/compare_view.gif Binary files differdeleted file mode 100644 index 1030b6efc..000000000 --- a/bundles/org.eclipse.compare/icons/full/eview16/compare_view.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/obj16/day_obj.gif b/bundles/org.eclipse.compare/icons/full/obj16/day_obj.gif Binary files differdeleted file mode 100644 index 96aae05cb..000000000 --- a/bundles/org.eclipse.compare/icons/full/obj16/day_obj.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/obj16/resource_obj.gif b/bundles/org.eclipse.compare/icons/full/obj16/resource_obj.gif Binary files differdeleted file mode 100644 index d1e679e38..000000000 --- a/bundles/org.eclipse.compare/icons/full/obj16/resource_obj.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/add_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/add_ov.gif Binary files differdeleted file mode 100644 index 2a8115602..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/add_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/chg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/chg_ov.gif Binary files differdeleted file mode 100644 index 67b25c457..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/chg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif Binary files differdeleted file mode 100644 index e049755f2..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif Binary files differdeleted file mode 100644 index 020fc5438..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif Binary files differdeleted file mode 100644 index 39ed5115e..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/del_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/del_ov.gif Binary files differdeleted file mode 100644 index 675c20fcc..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/del_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/error_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/error_ov.gif Binary files differdeleted file mode 100644 index 95e4db64f..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/error_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif Binary files differdeleted file mode 100644 index 0dc3ea89a..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif Binary files differdeleted file mode 100644 index f719405c9..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/indel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/indel_ov.gif Binary files differdeleted file mode 100644 index 3e107d24d..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/indel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif Binary files differdeleted file mode 100644 index 780da9881..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif Binary files differdeleted file mode 100644 index 4f6a3168e..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif Binary files differdeleted file mode 100644 index ab4898167..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif Binary files differdeleted file mode 100644 index 14ba0119b..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif Binary files differdeleted file mode 100644 index 0aca3c482..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif Binary files differdeleted file mode 100644 index c37753736..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif Binary files differdeleted file mode 100644 index 11c2d5de0..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif Binary files differdeleted file mode 100644 index 704d70694..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif Binary files differdeleted file mode 100644 index 95ec3012e..000000000 --- a/bundles/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugin.properties b/bundles/org.eclipse.compare/plugin.properties deleted file mode 100644 index 4c7b6e640..000000000 --- a/bundles/org.eclipse.compare/plugin.properties +++ /dev/null @@ -1,181 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -# -# Resource strings for Compare Plug-in -# -pluginName= Compare Support -providerName=Eclipse.org - -# -# Extension point names -# -structureCreators= Structure Creator -structureMergeViewers= Structure Merge Viewer -contentMergeViewers= Content Merge Viewer -contentViewers= Content Viewer - -# -# CompareUIPlugin -# -CompareUIPlugin.dialogTitle=Compare -CompareUIPlugin.noActiveWorkbenchPage=Can't find active workbench page -CompareUIPlugin.compareFailed=Compare Failed -CompareUIPlugin.openEditorError=Problems Opening Editor -CompareUIPlugin.noDifferences=There are no differences between the selected inputs. - -# -# Compare Editor -# -defaultCompareEditor.name= Default Compare Editor -CompareEditor.saveError.title= Save Error -CompareEditor.cantSaveError= Can''t save contents ({0}) -CompareEditor.invalidInput=Invalid Input: Must be CompareEditorInput - -# -# Commands -# -compareCategory.name= Compare -compareCategory.description= Compare command category - -Command.copyRightToLeft.name= Copy from Right to Left -Command.copyRightToLeft.description= Copy Current Change from Right to Left - -Command.copyLeftToRight.name= Copy from Left to Right -Command.copyLeftToRight.description= Copy Current Change from Left to Right - -Command.copyAllRightToLeft.name= Copy All from Right to Left -Command.copyAllRightToLeft.description= Copy All Changes from Right to Left - -Command.copyAllLeftToRight.name= Copy All from Left to Right -Command.copyAllLeftToRight.description= Copy All Change from Left to Right - -Command.selectNextChange.name= Select Next Change -Command.selectNextChange.description= Select Next Change - -Command.selectPreviousChange.name= Select Previous Change -Command.selectPreviousChange.description= Select Previous Change - - -# -# Context menu & actions -# -CompareWithMenu.label= Comp&are With - -CompareWithEachOtherAction.label= &Each Other -CompareWithEachOtherAction.tooltip= Compare the Selected Resources - -TeamMenu.label= T&eam - -CompareWithPatchAction.label= &Apply Patch... -CompareWithPatchAction.tooltip= Apply a Patch to the Selected Resources - -CompareWithHistoryAction.label= &Local History... -CompareWithHistoryAction.tooltip= Compare the Selected Resource with Local History - -ReplaceWithMenu.label= Rep&lace With - -ReplaceFromHistoryAction.label= &Local History... -ReplaceFromHistoryAction.tooltip= Replace the Selected Resource with Local History - -ReplaceWithPreviousFromHistoryAction.label= &Previous from Local History -ReplaceWithPreviousFromHistoryAction.tooltip= Replace the Selected Resource with the Previous from Local History - -addFromHistoryAction.label= Restore from Local Histor&y... -addFromHistoryAction.tooltip= Restore Deleted Files from Local History - -# -# Preference Page -# -ComparePreferencePage.name= Compare/Patch - -ComparePreferencePage.generalTab.label= &General - -ComparePreferencePage.structureCompare.label= &Open structure compare automatically -ComparePreferencePage.showMoreInfo.label= &Show additional compare information in the status line -ComparePreferencePage.ignoreWhitespace.label= Ignore &white space -ComparePreferencePage.saveBeforePatching.label= A&utomatically save dirty editors before patching - -ComparePreferencePage.textCompareTab.label= &Text Compare - -ComparePreferencePage.initiallyShowAncestorPane.label= Initially show a&ncestor pane -ComparePreferencePage.showPseudoConflicts.label= Show &pseudo conflicts -ComparePreferencePage.synchronizeScrolling.label= Synchronize &scrolling between panes in compare viewers -ComparePreferencePage.useSingleLine.label= Connect &ranges with single line - -ComparePreferencePage.preview.label= Preview: -ComparePreferencePage.ancestor.label= Common Ancestor -ComparePreferencePage.left.label= Local -ComparePreferencePage.right.label= Remote -ComparePreferencePage.backgroundColor1.label= Bac&kground Color: -ComparePreferencePage.backgroundColor2.label= S&ystem Default -ComparePreferencePage.backgroundColor3.label= C&ustom - -compareFontDefiniton.label= Compare Text Font -compareFontDefiniton.description= The compare text font is used by textual compare/merge editors. - -# New UI -#ComparePreferencePage.useSplines.label= Use splines in center panel -#ComparePreferencePage.useResolveUI.label= Use new resolve UI - -CompareEditorInput.defaultTitle= Compare - -# -# Toolbar actions -# -action.IgnoreWhiteSpace.label=Ignore White Space -action.IgnoreWhiteSpace.tooltip=Ignore White Space Where Applicable -action.IgnoreWhiteSpace.image=etool16/ignorews_edit.gif - -action.Next.label=Next Difference -action.Next.tooltip=Go to Next Difference -action.Next.image=elcl16/next_nav.gif - -action.Previous.label=Previous Difference -action.Previous.tooltip=Go to Previous Difference -action.Previous.image=elcl16/prev_nav.gif - -# -# Built in Structure Creators -# -ZipStructureCreator.name=Zip Archive Compare - -# -# Compare Dialog -# -CompareDialog.commitAction.label=Commit -CompareDialog.saveErrorTitle=Save Error -CompareDialog.saveErrorMessage=Can't save - -# -# Compare With Each Other -# -ResourceCompare.taskName=Operation in Progress... -ResourceCompare.twoWay.title=Compare ({0}-{1}) -ResourceCompare.twoWay.tooltip={0}-{1} -ResourceCompare.threeWay.title=Compare ({0}-{1}-{2}) -ResourceCompare.threeWay.tooltip={1}-{2} - -# -# DiffTreeViewer & DiffNodes -# -DiffTreeViewer.title= Structure Compare -DiffNode.noName= <no name> -DiffNode.nameFormat= {0} / {1} - -# -# Differencing engine -# -Differencer.progressFormat= Comparing {0} - -# -# Patch: rejected patch markers -# -rejectedPatchMarker.name= Rejected Patch diff --git a/bundles/org.eclipse.compare/plugin.xml b/bundles/org.eclipse.compare/plugin.xml deleted file mode 100644 index 42c24dab2..000000000 --- a/bundles/org.eclipse.compare/plugin.xml +++ /dev/null @@ -1,316 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!-- ======================================================================= --> -<!-- Compare UI Plugin --> -<!-- ======================================================================= --> - -<plugin - name="%pluginName" - id="org.eclipse.compare" - version="2.1.0" - provider-name="%providerName" - class="org.eclipse.compare.internal.CompareUIPlugin"> - - <requires> - <import plugin="org.eclipse.ui"/> - <import plugin="org.eclipse.core.resources"/> - </requires> - - <runtime> - <library name="compare.jar" > - <export name="*"/> - <packages prefixes="org.eclipse.compare"/> - </library> - </runtime> - -<!-- Compare extension point definitions --> - - <extension-point - id="structureCreators" - name="%structureCreators" - schema="schema/structureCreators.exsd" - /> - - <extension-point - id="structureMergeViewers" - name="%structureMergeViewers" - schema="schema/structureMergeViewers.exsd" - /> - - <extension-point - id="contentMergeViewers" - name="%contentMergeViewers" - schema="schema/contentMergeViewers.exsd" - /> - - <extension-point - id="contentViewers" - name="%contentViewers" - schema="schema/contentViewers.exsd" - /> - -<!-- Extensions --> - - <extension point="org.eclipse.ui.fontDefinitions"> - <fontDefinition - label="%compareFontDefiniton.label" - id="org.eclipse.compare.contentmergeviewer.TextMergeViewer" - defaultsTo="org.eclipse.jface.textfont"> - <description> - %compareFontDefiniton.description - </description> - </fontDefinition> - </extension> - - <extension point="org.eclipse.core.resources.markers" - id="rejectedPatchMarker" name="%rejectedPatchMarker.name"> - <super type="org.eclipse.core.resources.taskmarker"/> - <persistent value="true"/> - </extension> - - <extension point="org.eclipse.ui.editors"> - <editor id="org.eclipse.compare.CompareEditor" - name="%defaultCompareEditor.name" - icon="icons/full/cview16/compare_view.gif" - class="org.eclipse.compare.internal.CompareEditor" - contributorClass="org.eclipse.compare.internal.CompareEditorContributor"> - </editor> - </extension> - - <extension - point="org.eclipse.ui.preferencePages"> - <page name="%ComparePreferencePage.name" - id="org.eclipse.compare.internal.ComparePreferencePage" - class="org.eclipse.compare.internal.ComparePreferencePage" - category= "org.eclipse.ui.preferencePages.Workbench"> - </page> - </extension> - - <!-- commands and their bindings --> - <extension point="org.eclipse.ui.commands"> - - <category - name="%compareCategory.name" - description="%compareCategory.description" - id="org.eclipse.compare.ui.category.compare" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.copyRightToLeft" - name= "%Command.copyRightToLeft.name" - description="%Command.copyRightToLeft.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.copyRightToLeft" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.copyLeftToRight" - name= "%Command.copyLeftToRight.name" - description="%Command.copyLeftToRight.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.copyLeftToRight" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.copyAllRightToLeft" - name= "%Command.copyAllRightToLeft.name" - description="%Command.copyAllRightToLeft.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.copyAllRightToLeft" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.copyAllLeftToRight" - name= "%Command.copyAllLeftToRight.name" - description="%Command.copyAllLeftToRight.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.copyAllLeftToRight" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.selectNextChange" - name= "%Command.selectNextChange.name" - description="%Command.selectNextChange.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.selectNextChange" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.selectPreviousChange" - name= "%Command.selectPreviousChange.name" - description="%Command.selectPreviousChange.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.selectPreviousChange" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - </extension> - - <extension point="org.eclipse.ui.popupMenus"> - - <objectContribution - id="org.eclipse.compare.CompareAction" - objectClass="org.eclipse.core.resources.IResource" adaptable="true"> - <menu - id="replaceWithMenu" - path="additions" - label="%ReplaceWithMenu.label"> - <separator name="replaceWithGroup"/> - </menu> - <menu - id="compareWithMenu" - path="additions" - label="%CompareWithMenu.label"> - <separator name="compareWithGroup"/> - </menu> - <menu - id="team.main" - path="additions" - label="%TeamMenu.label"> - <separator name="group1"/> - </menu> - <action - id="compareWithEachOther" - label="%CompareWithEachOtherAction.label" - tooltip="%CompareWithEachOtherAction.tooltip" - menubarPath="compareWithMenu/compareWithGroup" - enablesFor="2+" - class="org.eclipse.compare.internal.CompareAction"> - </action> - <action - id="compareWithPatch" - label="%CompareWithPatchAction.label" - tooltip="%CompareWithPatchAction.tooltip" - menubarPath="team.main/group1" - enablesFor="1" - class="org.eclipse.compare.internal.patch.CompareWithPatchAction"> - </action> - - </objectContribution> - - <objectContribution - id="org.eclipse.compare.ReplaceWithEditionAction" - objectClass="org.eclipse.core.resources.IFile" adaptable="true"> - <menu - id="replaceWithMenu" - path="additions" - label="%ReplaceWithMenu.label"> - <separator name="replaceWithGroup"/> - </menu> - <action - id="replaceFromHistory" - label="%ReplaceFromHistoryAction.label" - tooltip="%ReplaceFromHistoryAction.tooltip" - menubarPath="replaceWithMenu/replaceWithGroup" - enablesFor="1" - class="org.eclipse.compare.internal.ReplaceWithEditionAction"> - </action> - <action - id="replaceWithPreviousFromHistory" - label="%ReplaceWithPreviousFromHistoryAction.label" - tooltip="%ReplaceWithPreviousFromHistoryAction.tooltip" - menubarPath="replaceWithMenu/replaceWithGroup" - enablesFor="1" - class="org.eclipse.compare.internal.ReplaceWithPreviousEditionAction"> - </action> - </objectContribution> - - <objectContribution - id="org.eclipse.compare.CompareWithEditionAction" - objectClass="org.eclipse.core.resources.IFile" adaptable="true"> - <menu - id="compareWithMenu" - path="additions" - label="%CompareWithMenu.label"> - <separator name="compareWithGroup"/> - </menu> - <action - id="compareWithHistory" - label="%CompareWithHistoryAction.label" - tooltip="%CompareWithHistoryAction.tooltip" - menubarPath="compareWithMenu/compareWithGroup" - enablesFor="1" - class="org.eclipse.compare.internal.CompareWithEditionAction"> - </action> - </objectContribution> - - <objectContribution - id="org.eclipse.compare.AddFromHistoryAction" - objectClass="org.eclipse.core.resources.IContainer" adaptable="true"> - <action - id="addFromHistoryAction" - label="%addFromHistoryAction.label" - tooltip="%addFromHistoryAction.tooltip" - menubarPath="replaceWithMenu" - enablesFor="1" - class="org.eclipse.compare.internal.AddFromHistoryAction"> - </action> - </objectContribution> - - </extension> - - <extension point="org.eclipse.compare.structureCreators"> - <structureCreator - id="org.eclipse.compare.ZipFileStructureCreator" - extensions="zip" - class="org.eclipse.compare.ZipFileStructureCreator"> - </structureCreator> - </extension> - - <extension point="org.eclipse.compare.contentMergeViewers"> - <viewer - id="org.eclipse.compare.BinaryCompareViewerCreator" - extensions="class,exe,dll,binary,zip,jar" - class="org.eclipse.compare.internal.BinaryCompareViewerCreator"> - </viewer> - <viewer - id="org.eclipse.compare.TextMergeViewerCreator" - extensions="txt" - class="org.eclipse.compare.internal.TextMergeViewerCreator"> - </viewer> - <viewer - id="org.eclipse.compare.ImageMergeViewerCreator" - extensions="gif,jpg" - class="org.eclipse.compare.internal.ImageMergeViewerCreator"> - </viewer> - </extension> - - <extension point="org.eclipse.compare.contentViewers"> - <viewer - id="org.eclipse.compare.TextViewerCreator" - extensions="txt" - class="org.eclipse.compare.internal.TextViewerCreator"> - </viewer> - </extension> - -</plugin> - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.classpath b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.classpath deleted file mode 100644 index 8a49fb9d5..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.classpath +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="compare"/> - <classpathentry kind="src" path="/org.eclipse.core.boot"/> - <classpathentry kind="src" path="/org.eclipse.core.runtime"/> - <classpathentry kind="src" path="/org.eclipse.ui"/> - <classpathentry kind="src" path="/org.eclipse.core.resources"/> - <classpathentry kind="src" path="/org.eclipse.swt"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.cvsignore b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.cvsignore deleted file mode 100644 index ba077a403..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -bin diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.project b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.project deleted file mode 100644 index bf7d0f58b..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.project +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.compare</name> - <comment></comment> - <projects> - <project>org.eclipse.core.boot</project> - <project>org.eclipse.ui</project> - <project>org.eclipse.core.runtime</project> - <project>org.eclipse.core.resources</project> - <project>org.eclipse.swt</project> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.pde.PluginNature</nature> - </natures> -</projectDescription> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/about.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/about.html deleted file mode 100644 index 9db411aab..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/about.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<html> -<head> -<title>About</title> -<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> -</head> -<body lang="EN-US"> -<h2>About This Content</h2> - -<p>20th June, 2002</p> -<h3>License</h3> -<p>Eclipse.org makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the -Common Public License Version 1.0 ("CPL"). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>. -For purposes of the CPL, "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> - -</body> -</html>
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties deleted file mode 100644 index f9934a8cd..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties +++ /dev/null @@ -1,18 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -source.compare.jar = compare/ -bin.includes = icons/,\ - plugin.xml,\ - *.jar,\ - plugin.properties,\ - about.html -src.includes = about.html,\ - schema/ diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html deleted file mode 100644 index 9afaaa08e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html +++ /dev/null @@ -1,1305 +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 March 27th 2003 - -<h2> -Problem reports fixed</h2> -Fixed 5 Javadoc warnings - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 24th 2003 - -<h2> -Problem reports fixed</h2> -Updated schema copyright notices<br> -updated javadoc - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 19th 2003 - -<h2> -Problem reports fixed</h2> -Fixed wording in properties files<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=35130">#35130</a>: Dialogs do not set the dialog font<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 14th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=34732">#34732</a>: Compare/Patch preference page mnemonic<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=34696">#34696</a>: Title casing issues<br> - - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 6th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27405">#27405</a>: Should consider using the new font propogation support<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24255">#24255</a>: Internal error when invoking "Restore from Local History" in Outline view<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32737">#32737</a>: NegativeArraySizeException: Compare/patch preference page<br> - - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 4th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32769">#32769</a>: Missing mneumonic in compare preference page<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32798">#32798</a>: No mnemonic for ComparePreferencePage.useSingleLine.label<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32207">#32207</a>: Wording: "Open with Compare Editor" action in sync view<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28190">#28190</a>: Middle area should act like sash<br> -added required IDs for compare viewers in plugin.xml<br> - - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 20th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=20248">#20248</a>: [Compare] Have to perform two actions to see diff<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24165">#24165</a>: Should have menu action for showing compare contents<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13332">#13332</a>: autosave before patching: can i undo?<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24077">#24077</a>: Comparing file named 'platformOption' does not use text editor<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=23958">#23958</a>: NPE in compare with patch<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28402">#28402</a>: CompareConfiguration leaks Images<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13844">#13844</a>: TextMergeViewer should keep track of its posted runnables<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14353">#14353</a>: Cannot perform merge with keyboard accelerators/mnemonics<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 18th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5323">#5323</a>: Compare does not handle correctly conflicts at same location<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=26035">#26035</a>: Local history uses wrong character encoding<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=15654">#15654</a>: Can't maximize Compare with Local History window<br> - - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 13th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31136">#31136</a>: Red icon too intrusive<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31357">#31357</a>: Compare View -- Compare-style option required.<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31633">#31633</a>: Cannot apply patch successfully<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10754">#10754</a>: Compare actions should target source window<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 11th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=25507">#25507</a>: Compare view prevents Ctrl + F6 working<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18571">#18571</a>: patch: scary error dialog when no patch in clipboard<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28840">#28840</a>: Strange behavious applying patch<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 6th 2003 (M5 aka RC0) - -<h2> -API Additions</h2> -Added new method EditionSelectionDialog.getSelection() - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=30525">#30525</a>: "Team" menu item missing accelerator<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28202">#28202</a>: contentmergeviewers do not work with mixed-case extensions<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19114">#19114</a>: Restore Java Element from Local History should also provide check boxes [compare]<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28436">#28436</a>: Overview rule green only after focus change<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=29793">#29793</a>: Automatically suggest a fuzz factor when applying a patch<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 28th 2003 - -<h2> -API Additions</h2> -Added new method CompareUI.findContentViewer(..., Object input, ...) - -<h2> -Problem reports fixed</h2> -Remoced doc folder.<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24597">#24597</a>: Compare UI API issues<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=23883">#23883</a>: CompareDialog.commitAction.label string resource name is wrong<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=29791">#29791</a>: Rename 'Compare to Patch' to 'Apply Patch'<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 14th 2003 - -<h2> -Problem reports fixed</h2> -Extension point schema files added.<br> -Resolve status indicator is only shown if there are incoming changes. - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 7th 2003 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28278">#28278</a>: TextMergeViewer leaks Color objects<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27864">#27864</a>: Load of CompareUI fails when not triggered in UI thread<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28388">#28388</a>: Illegal Argument Exceptions in compare viewer<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 17th 2002 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28388">#28388</a>: Illegal Argument Exceptions in compare viewer<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 16th 2002 - -<h2> -Problem reports fixed</h2> -Fixed a problem with trim in compare viewer on Mac OS X.<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28278">#28278</a>: TextMergeViewer leaks Color objects<br> - -<hr WIDTH="100%"></h1> -Eclipse Build Input December 13th 2002 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28012">#28012</a>: Double-click behaving strangely in Synchronize View<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 10th 2002 - -<h2> -What's new in this drop</h2> -The Textmergeviewer sports a first cut of a new UI for left/right copying, -showing the 'resolved' status of a change, and uses smooth lines to -connect the differing ranges in the left and right panes. -The new UI options are off by default. You can turn them on -with the three 'experimental' options on the Compare preference page. - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27993">#27993</a>: Incorrect structure comparison<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 3rd 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API Additions</h3> -Made internal class Splitter public API. - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#24597</a>: Compare UI API issues<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input November 26th 2002 - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#20975</a>: Compare preference page has no F1 help<br> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 27th 2002 - -<h2> -What's new in this drop</h2> -Updated JavaDoc package.html files - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 25th 2002 - -<h2> -What's new in this drop</h2> -Updated JavaDoc - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 12th 2002 - -<h2> -What's new in this drop</h2> - -There were several complains that clicking on a zip file in the left pane (structure input pane) feeds all other -compare panes (see bug 13730). There are cases where this is expensive (for example a large zip file that has -to be read from a repository). To avoid those situations the left pane now honors single or double click mode as -set in Preferences->Workbench. So if this preference is set to double click the user has to double click on a file -in the left pane to actually feed all other compare panes. - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 8th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#18807</a>: Compare with patch fails due to missing LF<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13730">#13730</a>: Entire zipfiles content sent prior when computing synchronization view content<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 7th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13730">#13730</a>: Entire zipfiles content sent prior when computing synchronization view content<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14952">#14952</a>: Diff Browser Opens Too Small / Not Easily Resizable<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 6th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -New constant CompareUI.PLUGIN_ID - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13949">#13949</a>: DBCS: bogus at text compare<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19013">#19013</a>: backgronud color: is it honored?<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19216">#19216</a>: Accessibility in Workbench > Compare > Text Compare<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19371">#19371</a>: Java & Compare editor's Next/Previous toolbar buttons shouldn't be retargetable<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input June 1st 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -Made class NavigationAction public. - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8004">#8004</a>: Ctrl+E beeps every time<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14800">#14800</a>: Compare View eats tabs<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18200">#18200</a>: Both sets of arrows say "Select Next Change"<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18206">#18206</a>: Casing, wording issue on "Last Resource reached" prompt<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16285">#16285</a>: Add from Local History needs a description label<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17431">#17431</a>: Accessibility issues<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18148">#18148</a>: Using combinations of No and Next file button break wrapping<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18151">#18151</a>: Next File button does not ding when on last file<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16570">#16570</a>: Compare refuses to show further differences if not ignoring whitespaces<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10790">#10790</a>: Patch does not apply if file not found locally<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=12643">#12643</a>: Expand all does not disable when there is no selection<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 31st 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18116">#18116</a>: Compare view does not inherit Java editor background color<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13190">#13190</a>: Compare with Patch does not apply Patch, if single file selected<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 30th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17699">#17699</a>: Java Editor: Local Histroy menu entries are enabled for read-only files<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16283">#16283</a>: Add from Local History items are unsorted<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16288">#16288</a>: Add from Local History: list of available editions flashes<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17664">#17664</a>: Applying a patch with deleted package fails<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 29th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14040">#14040</a>: Platform interoperability issue w.r.t. Compare With Patch<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17790">#17790</a>: Missing mnemonics in patch selection dialog<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10917">#10917</a>: Patch support does not use mnemonics<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 28th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17889">#17889</a>: Should not assume type of PropertyChangeEvent values<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17678">#17678</a>: Applying a patch does many compiles<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17536">#17536</a>: NPE in compare<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17121">#17121</a>: Casing of message when end of changes needs to be sentence style<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17648">#17648</a>: Can't apply patch w/o ignoring whitespace<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16936">#16936</a>: Compare with patch requires "Ignore Whitespace" to be turned off<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 18th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14371">#14371</a>: TextMergeViewer.sameDoc() is broken<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14378">#14378</a>: CompareEditorInput never resets dirtyness flag (detailed)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14680">#14680</a>: Compare unreadable in high contrast black<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14952">#14952</a>: Diff Browser Opens Too Small / Not Easily Resizable<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14742">#14742</a>: Ignore whitespace preference<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14624">#14624</a>: No visual cue when compared file wraps<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13606">#13606</a>: Support multiple selection in Add from local history<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input May 16th 2002 - -<h2> -What's new in this drop</h2> -Bumped plugin version number to 2.0.0<br> -Adapted to new findEditor methods<br> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8373">#8373</a>: Compare With->Patch... missing mnemonic<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=12719">#12719</a>: "Show Pseudo-Conflicts" setting is problematic<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input April 30th 2002 - -<h2> -What's new in this drop</h2> -All strings NLSed. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14515">#14515</a>: java compare uses internal jcore scanner<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14782">#14782</a>: Add from Local History missing mnemonic<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input April 18th 2002 - -<h2> -What's new in this drop</h2> -All strings NLSed. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13152">#13152</a>: Internal error in "Add from Local History..." on packages<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input April 9th 2002 - -<h2> -What's new in this drop</h2> -New context menu action 'Add From Local History'. Just select any resource container and -'Add From Local History' presents all files that were deleted from the workspace but are -still in the local history. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> -The new 'Add From Local History' suffers from #12915. It works if the files were deleted -within the same session. However if you shut down and restart a workspace some deleted -files are nor listed. - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11578">#11578</a>: Patch: Missing resource on dialog<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11579">#11579</a>: Compare with Patch should be disabled on closed projects<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11907">#11907</a>: clicking in bird's eye view spots does nothing if panes not synched<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11536">#11536</a>: Option to turn off structured comparison<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10682">#10682</a>: Need better UI for recovering deletions from local history<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11446">#11446</a>: provide "add from local history" for compilation units<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8615">#8615</a>: Styled Text widget does not respond to system color change<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9673">#9673</a>: editor background color - no effect on other viewers<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11642">#11642</a>: Compare editors not using default background colors<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10434">#10434</a>: Compare browser fails silently and does not give result<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 18th 2002 - -<h2> -What's new in this drop</h2> -First cut of a birdseyeview for the text compare viewer.<br> -'Compare which Each other' for Java elements. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3641">#3641</a>: DCR: Can't compare from outliner (1GDHJKK)<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 14th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11305">#11305</a>: Can't compare a "C" file<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 12th 2002 - -<h2> -What's new in this drop</h2> -Structure Compare viewers are enabled by default.<br> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10379">#10379</a>: Compare with Local History Dialog: lower pane is missing a bordeer<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9768">#9768</a>: (empty-menu) in compare view<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9842">#9842</a>: Expand All action needed in structure compare view<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input March 5th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9869">#9869</a>: Need more support for creating/deleting resources<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 26th 2002 - -<h2> -What's new in this drop</h2> -Patch: for every rejected file a task marker is added<br> -Compare preference page shows options in a preview<br> -New preference option for additional compare status line information - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9540">#9540</a>: Compare with patch: it should not be possible to check items that could not be applied<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9532">#9532</a>: Compare with patch: next disabled although clipboard specified<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7681">#7681</a>: Structured results expands import statements<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9572">#9572</a>: Debugging trace left in status bar<br> - - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 12th 2002 - -<h2> -What's new in this drop</h2> -The patch wizard no longer opens a Compare Editor but applies the -patch directly to the workspace. This will be the default. -In the future the old behavior of opening the Compare Editor will be -an additional option when finishing the wizard. -<br> -Patch wizard has a 'Reverse' option for applying a "reversed" patch. -This option can be used to 'undo' a patch. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9153">#9153</a>: NPE when closing synchronize view<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9331">#9331</a>: NPE during compare with stream version<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6346">#6346</a>: Problems with Patch<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6727">#6727</a>: Patch: *.rej file must be saved in workspace<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7358">#7358</a>: Internal Error in Compare with Patch with new files<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input February 5th 2002 - -<h2> -What's new in this drop</h2> -The structure compare pane opens when a resource is selected. -In previous version a double click was required. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5063">#5063</a>: Should not have to double-click to open Structure Compare<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2602">#2602</a>: Compare FW accessibility issues (1GK79UB)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2707">#2707</a>: Merge viewer should ask for save before releasing (1GI9JXS)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2772">#2772</a>: DCR: Automatic structure compare (1GJ6EUY)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3829">#3829</a>: Smart rename button enabled when no smartness is available (1GEUVHN)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9089">#9089</a>: Local history - Selecting item in structured compare has no effect<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 29th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6271">#6271</a>: Can't tell which file is which in Compare browser<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2519">#2519</a>: next/prev arrows active when only one difference in compare (1GFIQX3)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8363">#8363</a>: NPE comparing two resources in the navigator.<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2501">#2501</a>: Empty menu in compare browser (1GFBQKE)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2854">#2854</a>: Compare: Save code path problematic (1GJYGAX)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8574">#8574</a>: Not structure compare in compare with local history<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 23th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8089">#8089</a>: Replace from local history: parse error<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 22th 2002 - -<h2> -What's new in this drop</h2> -Fixed an inconsistency in the binary compare viewer: -info message didn't match +/-icon in the resource compare pane. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3859">#3859</a>: replace from history does not work for elements with error (1GEYIZ6)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6177">#6177</a>: Double click action dangerous in 'Restore from Local History'<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7821">#7821</a>: Team 2.0 CVS synchronze bug 'no-name' dirs..<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2773">#2773</a>: Java structure compare should give better indication when no changes (1GJ6ENE)<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 15th 2002 - -<h2> -What's new in this drop</h2> -Fixed a problem in DiffNode.getName()and the DiffTreeViewer's label provider -where the left and right half of a DiffNode label would be reversed because -the "leftIsLocal" property of a CompareConfiguration wasn't obeyed. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1893">#1893</a>: Compare Viewer doesn't scroll to last line (1GBB34N)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5839">#5839</a>: Usability: Initial diff is sometimes not horizontally aligned<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5325">#5325</a>: Compare always scroll the text pane to the extreme limit<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7048">#7048</a>: First element not selected<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2548">#2548</a>: Project compare should open viewing selected file (1GFMRP6)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2938">#2938</a>: Replace from local history should show busy cursor (1GKU0P3)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7594">#7594</a>: Menu entry "Replace with Previous" shouldn't have a "..."<br> -Workaround added for:<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7320">#7320</a>: Next diff scrolls when going into current diff<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input January 8th 2002 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -Added methods to CompareUI plugin for adding and removing aliases -for the file extension to StructureCompareViewer mapping -(addStructureViewerAlias, removeStructureViewerAlias). - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6828">#6828</a>: Support with replace with previous<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2396">#2396</a>: Save in compare editors needs progress bar (1GEYF58)<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5271">#5271</a>: JARs compared as source in release browser<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5121">#5121</a>: Replace with Previous (from local history)<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 11th 2001 - -<h2> -What's new in this drop</h2> -Keyboard shortcuts for 'Goto next Difference' and 'Goto previous Difference' -changed to Control-E and Control-Shift-E.<br> -Better NLS support.<br> -Updated file "about.html". - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input December 4th 2001 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4381">#4381</a>: Replace from local histroy - workspace element included <br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse Build Input November 27th 2001 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6298">#6298</a>: Replace with Local History: Workbench -> Workspace<br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5238">#5238</a>: Compare fails if takes more than 20 seconds<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 210, November 12th, 2001 - -<h2> -What's new in this drop</h2> -First cut for 'rejected hunk' support. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -new classes CompareViewerPane and CompareViewerSwitchingPane<br> - -<h3> -Other highlights</h3> -Improved Patch wizard.<br> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5723">#5723</a>: Apply Patch dialog has no radio selection<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 207, November 1st, 2001 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5334">#5334: Internal errors using patch tool</a><br> -<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5150">#5150: Compare with patch cannot read VCM's CVS patch file</a><br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 204, October 12th, 2001 - -<h2> -What's new in this drop</h2> -First cut of patch support. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 202, September 27th, 2001 - -<h2> -What's new in this drop</h2> - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -1GKKUA5: ITPUI:WINNT - Severe: memory leak in sync view<br> -1GKKGGS: ITPJUI:WIN2000 - (136) compares zips as source<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 201, September 21st, 2001 - -<h2> -What's new in this drop</h2> -removed direction icon in TextMergeViewer for two-way compare - -<h3> -API changes</h3> - -<h3> -API Additions</h3> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -1GJURWJ: ITPUI:WIN2000 - Hebrew + Japanese: compare view defaults to binary<br> -1GK0388: ITPJCORE:WIN2000 - replace with local history: selecting (workspace) deletes source<br> -1GITG2V: ITPUI:WIN2000 - Comparing html files uses binary compare<br> -1GJW2TP: ITPJUI:WIN2000 - java compare: why beep every time?<br> - -<h2> -Problem reports closed</h2> - -<h1> -<hr WIDTH="100%"></h1> -Eclipse SDK Build 200, September 13th, 2001 - -<h2> -What's new in this drop</h2> -If not specified otherwise Compare viewer font is taken from workbench text font<br> -The shortcut for "Goto Next/Previous Difference" is Ctrl-D/Ctrl-Shift-D -to avoid a clash with Ctrl-P of the Print command. - -<h3> -API changes</h3> - -<h3> -API Additions</h3> -new method EditionSelectionDialog.setHideIdenticalEntries(boolean)<br> -new method EditionSelectionDialog.setTargetIsRight(boolean)<br> -new method EditionSelectionDialog.setAddMode(boolean)<br> -new method CompareEditorInput.saveChanges(...)<br> -new method TextMergeViewer.createLineComparator(IDocument document, IRegion region, boolean ignoreWhiteSpace)<br> - -<h3> -Other highlights</h3> - -<h2> -Known deficiencies</h2> - -<h2> -Problem reports fixed</h2> -1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty<br> -1GG0ELM: ITPVCM:ALL - Local history displayed some of Today's items as Yesterday<br> -1GGNKHN: ITPJUI:ALL - No progress during replace with local history<br> -1GF2JNI: ITPUI:ALL - (minor)Compare failed title should be title case<br> -1GHBPA1: ITPVCM:WINNT - Compare - next change arrow switches to wrong file<br> -1GGQQH3: ITPJUI:WINNT - Compare hightlights a non-change instead of the change<br> -1GI5DN9: ITPUI:WIN2000 - Conflicting token deletions don't show up in text compare viewer<br> -1GI3KUR: ITPJUI:WIN2000 - Compare: double-click in versions list closes view<br> -1GFFR4B: ITPUI:WIN98 - local history is misleading<br> -1GBM0IL: ITPUI:WINNT - CompareEditorInput#save should throw CoreException<br> -1GI99LE: ITPUI:ALL - Compare viewer does not show last line when horizontal scroll bar is present<br> -1GBB34N: ITPJUI:WIN2000 - Compare Viewer doesn't scroll to last line<br> -1GGZ8DO: ITPJUI:WIN - MergeViewer invalid selection range<br> -1GIIBHM: ITPUI:WIN2000 - Problems when comparing zip files<br> -1GIKKOZ: ITPUI:ALL - alt copyright text in html doc needs update<br> -1GIURNB: ITPUI:ALL - property file of EditionSelectionDialog contains configuration options<br> -1GIUS6L: ITPUI:ALL - TextMergeViewer uses deprecated Thread.stop()<br> -1GI3HDZ: ITPJUI:ALL - Compare: conflicts with no ancestor does not show differences<br> -1GEUX0D: ITPJUI:ALL - not state aware toolbar button in compare<br> - -<h2> -Problem reports closed</h2> -1GF9Y9C: ITPUI:WIN2000 - DCR: only get ancestor pane contents if pane is visible<br> - -</body> -</html> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java deleted file mode 100644 index 2f87cb105..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.*; -import org.eclipse.jface.util.ListenerList; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.internal.Utilities; - -/** - * Abstract implementation for a buffered <code>IStreamContentAccessor</code>. - * <p> - * Subclasses must implement the <code>createStream</code> method - * to connect the buffered content with a streamable source (e.g., a file). - * <p> - * As long as the contents of <code>BufferedContent</code> is only retrieved as an input stream - * (by means of <code>getContents</code>) and the <code>BufferedContent</code> is not modified (with - * <code>setContent</code>) no buffering takes place. - * Buffering starts when either method <code>getContent</code> or <code>setContent</code> is called. - * - * @see IContentChangeNotifier - * @see IStreamContentAccessor - */ -public abstract class BufferedContent implements IContentChangeNotifier, IStreamContentAccessor { - - byte[] fContent; - private ListenerList fListenerList; - - /** - * Creates a buffered stream content accessor. - */ - protected BufferedContent() { - } - - /* (non-Javadoc) - * see IStreamContentAccessor.getContents - */ - public InputStream getContents() throws CoreException { - if (fContent != null) - return new ByteArrayInputStream(fContent); - return createStream(); - } - - /** - * Creates and returns a stream for reading the contents. - * <p> - * Subclasses must implement this method. - * </p> - * - * @return the stream from which the content is read - * @exception CoreException if the contents could not be accessed - */ - protected abstract InputStream createStream() throws CoreException; - - /** - * Sets the contents. Registered content change listeners are notified. - * - * @param contents the new contents - */ - public void setContent(byte[] contents) { - fContent= contents; - fireContentChanged(); - } - - /** - * Returns the contents as an array of bytes. - * - * @return the contents as an array of bytes, or <code>null</code> if - * the contents could not be accessed - */ - public byte[] getContent() { - if (fContent == null) { - try { - InputStream is= createStream(); - fContent= Utilities.readBytes(is); - } catch(CoreException ex) { - } - } - return fContent; - } - - /** - * Discards the buffered content. - */ - public void discardBuffer() { - fContent= null; - } - - /* (non-Javadoc) - * see IContentChangeNotifier.addChangeListener - */ - public void addContentChangeListener(IContentChangeListener listener) { - if (fListenerList == null) - fListenerList= new ListenerList(); - fListenerList.add(listener); - } - - /* (non-Javadoc) - * see IContentChangeNotifier.removeChangeListener - */ - public void removeContentChangeListener(IContentChangeListener listener) { - if (fListenerList != null) { - fListenerList.remove(listener); - if (fListenerList.isEmpty()) - fListenerList= null; - } - } - - /** - * Notifies all registered <code>IContentChangeListener</code>s of a content change. - */ - protected void fireContentChanged() { - if (fListenerList != null) { - Object[] listeners= fListenerList.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((IContentChangeListener)listeners[i]).contentChanged(this); - } - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java deleted file mode 100644 index 4fe3a8a7d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java +++ /dev/null @@ -1,445 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.util.HashMap; - -import org.eclipse.swt.graphics.*; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.util.*; -import org.eclipse.jface.preference.IPreferenceStore; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.structuremergeviewer.Differencer; - -/** - * A <code>CompareConfiguration</code> object - * controls various UI aspects of compare/merge viewers like - * title labels and images, or whether a side of a merge viewer is editable. - * In addition to these fixed properties <code>ICompareConfiguration</code> provides - * API for an open ended set of properties. Different viewers which share the same - * configuration can communicate via this mechanism. E.g. if a compare editor - * has a button for controlling whether compare viewers ignore white space, - * the button would trigger a change of the boolean <code>IGNORE_WHITESPACE</code> property - * and all interested viewers would receive notification. - * <p> - * Suitable default labels are provided (without images); both the left and right sides - * are editable. - * </p> - * <p> - * Clients may use this class as is, or subclass to add new state and behavior. - * </p> - */ -public class CompareConfiguration { - - /** - * Name of the ignore whitespace property (value <code>"IGNORE_WHITESPACE"</code>). - */ - public static final String IGNORE_WHITESPACE= "IGNORE_WHITESPACE"; //$NON-NLS-1$ - /** - * Name of the show pseudo conflicts property (value <code>"SHOW_PSEUDO_CONFLICTS"</code>). - */ - public static final String SHOW_PSEUDO_CONFLICTS= "SHOW_PSEUDO_CONFLICTS"; //$NON-NLS-1$ - - - private static final int WIDTH= 22; - - private static ImageDescriptor[] fgImages= new ImageDescriptor[16]; - private static Object fgDummy= new Object(); - private static HashMap fgMap= new HashMap(20); - private static boolean fLeftIsLocal= true; - - static { - if (fLeftIsLocal) { - fgImages[Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.LEFT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/r_inadd_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/r_outadd_ov.gif"); //$NON-NLS-1$ - - fgImages[Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.LEFT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/r_indel_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/r_outdel_ov.gif"); //$NON-NLS-1$ - - fgImages[Differencer.LEFT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/r_inchg_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/r_outchg_ov.gif"); //$NON-NLS-1$ - } else { - fgImages[Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.LEFT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/inadd_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/outadd_ov.gif"); //$NON-NLS-1$ - - fgImages[Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.LEFT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/indel_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/outdel_ov.gif"); //$NON-NLS-1$ - - fgImages[Differencer.LEFT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/inchg_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.RIGHT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/outchg_ov.gif"); //$NON-NLS-1$ - } - - fgImages[Differencer.CONFLICTING + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/confadd_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.CONFLICTING + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/confdel_ov.gif"); //$NON-NLS-1$ - fgImages[Differencer.CONFLICTING + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/confchg_ov.gif"); //$NON-NLS-1$ - } - - private IPreferenceStore fPreferenceStore; - private ListenerList fListeners= new ListenerList(); - private HashMap fProperties= new HashMap(); - private boolean fLeftEditable= true; - private boolean fRightEditable= true; - private String fAncestorLabel; - private String fLeftLabel; - private String fRightLabel; - private Image fAncestorImage; - private Image fRightImage; - private Image fLeftImage; - private Image[] fImages= new Image[16]; - - /** - * Creates a new configuration with editable left and right sides, - * suitable default labels, and no images. - * The given preference store is used to connect this configuration - * with the Compare preference page properties <code>ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE</code>, - * and <code>CompareConfiguration.IGNORE_WHITESPACE</code>. - * - * @param prefStore the preference store which this configuration holds onto. - * @since 2.0 - */ - public CompareConfiguration(IPreferenceStore prefStore) { - - setProperty("LEFT_IS_LOCAL", new Boolean(fLeftIsLocal)); //$NON-NLS-1$ - - fPreferenceStore= prefStore; - if (fPreferenceStore != null) { - boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE); - setProperty(ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE, new Boolean(b)); - - b= fPreferenceStore.getBoolean(ComparePreferencePage.IGNORE_WHITESPACE); - setProperty(CompareConfiguration.IGNORE_WHITESPACE, new Boolean(b)); - } - } - - /** - * Creates a new configuration with editable left and right sides, - * suitable default labels, and no images. - * This configuration uses the preference store of the Compare plugin - * (<code>CompareUIPlugin.getDefault().getPreferenceStore()</code>). - */ - public CompareConfiguration() { - this(CompareUIPlugin.getDefault().getPreferenceStore()); - } - - /** - * Returns the preference store of this configuration. - * @return the preference store of this configuration. - * @since 2.0 - */ - public IPreferenceStore getPreferenceStore() { - return fPreferenceStore; - } - - /** - * Returns an image showing the specified change kind. - * The different kind of changes are defined in the <code>Differencer</code>. - * Newly created images are remembered by this class and - * disposed when the <code>dispose</code> method is called. - * - * @param kind the kind of change as defined in <code>Differencer</code>. - * @return an modification of the base image reflecting the kind of change. - * @see org.eclipse.compare.structuremergeviewer.Differencer - * @since 2.0 - */ - public Image getImage(int kind) { - Image image= fImages[kind & 15]; - if (image == null) { - ImageDescriptor id= fgImages[kind & 15]; - if (id != null) - image= id.createImage(); - fImages[kind & 15]= image; - } - return image; - } - - /** - * Returns an image showing the specified change kind applied to a - * given base image. The different kind of changes are defined in the <code>Differencer</code>. - * Typically an implementation would build a composite image - * from the given base image and an image representing the change kind. - * Newly created images are remembered by this class and - * disposed when the <code>dispose</code> method is called. - * - * @param base the image which is modified to reflect the kind of change - * @param kind the kind of change as defined in <code>Differencer</code>. - * @return an modification of the base image reflecting the kind of change. - * @see org.eclipse.compare.structuremergeviewer.Differencer - */ - public Image getImage(Image base, int kind) { - - Object key= base; - if (key == null) - key= fgDummy; - - kind &= 15; - - Image[] a= (Image[]) fgMap.get(key); - if (a == null) { - a= new Image[16]; - fgMap.put(key, a); - } - Image b= a[kind]; - if (b == null) { - b= new DiffImage(base, fgImages[kind], WIDTH, !fLeftIsLocal).createImage(); - CompareUI.disposeOnShutdown(b); - a[kind]= b; - } - return b; - } - - /** - * Dispose of this compare configuration. - * This method is called if the compare configuration is no longer used. - * An implementation must dispose of all resources. - */ - public void dispose() { - if (fImages != null) { - for (int i= 0; i < fImages.length; i++){ - Image image= fImages[i]; - if (image != null && !image.isDisposed()) - image.dispose(); - } - } - fImages= null; - } - - /** - * Fires a <code>PropertyChangeEvent</code> to registered listeners. - * - * @param propertyName the name of the property that has changed - * @param oldValue the property's old value - * @param newValue the property's new value - */ - private void fireChange(String propertyName, Object oldValue, Object newValue) { - PropertyChangeEvent event= null; - Object[] listeners= fListeners.getListeners(); - if (listeners != null) { - for (int i= 0; i < listeners.length; i++) { - IPropertyChangeListener l= (IPropertyChangeListener) listeners[i]; - if (event == null) - event= new PropertyChangeEvent(this, propertyName, oldValue, newValue); - l.propertyChange(event); - } - } - } - - /* (non javadoc) - * see IPropertyChangeNotifier.addListener - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - fListeners.add(listener); - } - - /* (non javadoc) - * see IPropertyChangeNotifier.removeListener - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - fListeners.remove(listener); - } - - /** - * Sets the property with the given name. - * If the new value differs from the old a <code>PropertyChangeEvent</code> - * is sent to registered listeners. - * - * @param propertyName the name of the property to set - * @param value the new value of the property - */ - public void setProperty(String key, Object newValue) { - Object oldValue= fProperties.get(key); - fProperties.put(key, newValue); - if (oldValue == null || !oldValue.equals(newValue)) - fireChange(key, oldValue, newValue); - } - - /** - * Returns the property with the given name, or <code>null</code> - * if no such property exists. - * - * @param propertyName the name of the property to retrieve - * @return the property with the given name, or <code>null</code> if not found - */ - public Object getProperty(String key) { - return fProperties.get(key); - } - - //---- ancestor - - /** - * Sets the label to use for the ancestor of compare/merge viewers. - * - * @param label the new label for the ancestor of compare/merge viewers - */ - public void setAncestorLabel(String label) { - fAncestorLabel= label; - } - - /** - * Returns the label for the ancestor side of compare/merge viewers. - * This label is typically shown in the title of the ancestor area in a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the label for the ancestor side or <code>null</code> - */ - public String getAncestorLabel(Object element) { - return fAncestorLabel; - } - - /** - * Sets the image to use for the ancestor of compare/merge viewers. - * The CompareConfiguration does not automatically dispose the old image. - * - * @param image the new image for the ancestor of compare/merge viewers - */ - public void setAncestorImage(Image image) { - fAncestorImage= image; - } - - /** - * Returns the image for the ancestor side of compare/merge viewers. - * This image is typically shown in the title of the ancestor area in a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the image for the ancestor side or <code>null</code> - */ - public Image getAncestorImage(Object element) { - return fAncestorImage; - } - - //---- left side - - /** - * Controls whether the left side of a merge viewer is editable. - * - * @param editable if the value is <code>true</code> left side is editable - */ - public void setLeftEditable(boolean editable) { - fLeftEditable= editable; - } - - /** - * Returns whether the left hand side of a merge viewer is editable. - * - * @return <code>true</code> if the left hand side is editable - */ - public boolean isLeftEditable() { - return fLeftEditable; - } - - /** - * Sets the label to use for the left side of compare/merge viewers. - * - * @param label the new label for the left side of compare/merge viewers - */ - public void setLeftLabel(String label) { - fLeftLabel= label; - } - - /** - * Returns the label for the left hand side of compare/merge viewers. - * This label is typically shown in the title of the left side of a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the label for the left hand side or <code>null</code> - */ - public String getLeftLabel(Object element) { - return fLeftLabel; - } - - /** - * Sets the image to use for the left side of compare/merge viewers. - * The compare configuration does not automatically dispose the old image. - * - * @param image the new image for the left side of compare/merge viewers - */ - public void setLeftImage(Image image) { - fLeftImage= image; - } - - /** - * Returns the image for the left hand side of compare/merge viewers. - * This image is typically shown in the title of the left side of a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the image for the left hand side or <code>null</code> - */ - public Image getLeftImage(Object element) { - return fLeftImage; - } - - //---- right side - - /** - * Controls whether the right side of a merge viewer is editable. - * - * @param editable if the value is <code>true</code> right side is editable - */ - public void setRightEditable(boolean editable) { - fRightEditable= editable; - } - - /** - * Returns whether the right hand side of a merge viewer is editable. - * - * @return <code>true</code> if the right hand side is editable - */ - public boolean isRightEditable() { - return fRightEditable; - } - - /** - * Sets the label to use for the right side of compare/merge viewers. - * - * @param label the new label for the right side of compare/merge viewers - */ - public void setRightLabel(String label) { - fRightLabel= label; - } - - /** - * Returns the label for the right hand side of compare/merge viewers. - * This label is typically shown in the title of the right side of a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the label for the right hand side or <code>null</code> - */ - public String getRightLabel(Object element) { - return fRightLabel; - } - - /** - * Sets the image to use for the right side of compare/merge viewers. - * The compare configuration does not automatically dispose the old image. - * - * @param image the new image for the right side of compare/merge viewers - */ - public void setRightImage(Image image) { - fRightImage= image; - } - - /** - * Returns the image for the right hand side of compare/merge viewers. - * This image is typically shown in the title of the right side of a compare viewer. - * - * @param element the input object of a compare/merge viewer or <code>null</code> - * @return the image for the right hand side or <code>null</code> - */ - public Image getRightImage(Object element) { - return fRightImage; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java deleted file mode 100644 index 76724e721..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java +++ /dev/null @@ -1,749 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.lang.reflect.InvocationTargetException; - -import java.util.ArrayList; -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.custom.BusyIndicator; - -import org.eclipse.core.runtime.*; -import org.eclipse.ui.IPersistableElement; -import org.eclipse.ui.IEditorInput; - -import org.eclipse.jface.util.*; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.action.ToolBarManager; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.resource.ImageDescriptor; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * A compare operation which can present its results in a special editor. - * Running the compare operation and presentating the results in a compare editor - * are combined in one interface because it allows a client to keep the implementation - * all in one place while separating it from the innards of a specific UI implementation of compare/merge. - * <p> - * A <code>CompareEditorInput</code> defines methods for the following sequence steps: - * <UL> - * <LI>running a lengthy compare operation under progress monitor control, - * <LI>creating a UI for displaying the model and initializing the some widgets with the compare result, - * <LI>tracking the dirty state of the model in case of merge, - * <LI>saving the model. - * </UL> - * The Compare plug-in's <code>openCompareEditor</code> method takes an <code>ICompareEditorInput</code> - * and starts sequencing through the above steps. If the compare result is not empty a new compare editor - * is opened and takes over the sequence until eventually closed. - * <p> - * The <code>prepareInput</code> method should contain the - * code of the compare operation. It is executed under control of a progress monitor - * and can be canceled. If the result of the compare is not empty, that is if there are differences - * that needs to be presented, the <code>ICompareEditorInput</code> should hold onto them and return them with - * the <code>getCompareResult</code> method. - * If the value returned from <code>getCompareResult</code> is not <code>null</code> - * a compare editor is opened on the <code>ICompareEditorInput</code> with title and title image initialized by the - * corresponding methods of the <code>ICompareEditorInput</code>. - * <p> - * Creation of the editor's SWT controls is delegated to the <code>createContents</code> method. - * Here the SWT controls must be created and initialized with the result of the compare operation. - * <p> - * If merging is allowed, the modification state of the compared constituents must be tracked and the dirty - * state returned from method <code>isSaveNeeded</code>. The value <code>true</code> triggers a subsequent call - * to <code>save</code> where the modified resources can be saved. - * <p> - * The most important part of this implementation is the setup of the compare/merge UI. - * The UI uses a simple browser metaphor to present compare results. - * The top half of the layout shows the structural compare results (e.g. added, deleted, and changed files), - * the bottom half the content compare results (e.g. textual differences between two files). - * A selection in the top pane is fed to the bottom pane. If a content viewer is registered - * for the type of the selected object, this viewer is installed in the pane. - * In addition if a structure viewer is registered for the selection type the top pane - * is split horizontally to make room for another pane and the structure viewer is installed - * in it. When comparing Java files this second structure viewer would show the structural - * differences within a Java file, e.g. added, deleted or changed methods and fields. - * <p> - * Subclasses provide custom setups, e.g. for a Catchup/Release operation - * by passing a subclass of <code>CompareConfiguration</code> and by implementing the <code>prepareInput</code> method. - * If a subclass cannot use the <code>DiffTreeViewer</code> which is installed by default in the - * top left pane, method <code>createDiffViewer</code> can be overridden. - * - * @see CompareUI - * @see CompareEditorInput - */ -public abstract class CompareEditorInput implements IEditorInput, IPropertyChangeNotifier, IRunnableWithProgress { - - private static final boolean DEBUG= false; - - /** - * The name of the "dirty" property (value <code>"DIRTY_STATE"</code>). - */ - public static final String DIRTY_STATE= "DIRTY_STATE"; //$NON-NLS-1$ - - private static final String COMPARE_EDITOR_IMAGE_NAME= "cview16/compare_view.gif"; //$NON-NLS-1$ - private static Image fgTitleImage; - - private Splitter fComposite; - private CompareConfiguration fCompareConfiguration; - private CompareViewerSwitchingPane fStructureInputPane; - private CompareViewerSwitchingPane fStructurePane1; - private CompareViewerSwitchingPane fStructurePane2; - private CompareViewerSwitchingPane fContentInputPane; - private CompareViewerSwitchingPane fFocusPane; - private String fMessage; - private Object fInput; - private String fTitle; - private ListenerList fListenerList= new ListenerList(); - private CompareNavigator fNavigator; - private boolean fDirty= false; - private ArrayList fDirtyViewers= new ArrayList(); - private IPropertyChangeListener fDirtyStateListener; - - private IgnoreWhiteSpaceAction fIgnoreWhitespace; - private ShowPseudoConflicts fShowPseudoConflicts; - - boolean fStructureCompareOnSingleClick= true; - - /** - * Creates a <code>CompareEditorInput</code> which is initialized with the given - * compare configuration. - * The compare configuration is passed to subsequently created viewers. - * - * @param configuration the compare configuration - */ - public CompareEditorInput(CompareConfiguration configuration) { - fCompareConfiguration= configuration; - Assert.isNotNull(configuration); - - ResourceBundle bundle= CompareUIPlugin.getResourceBundle(); - fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, configuration); - fShowPseudoConflicts= new ShowPseudoConflicts(bundle, configuration); - - fDirtyStateListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent e) { - String propertyName= e.getProperty(); - if (CompareEditorInput.DIRTY_STATE.equals(propertyName)) { - boolean changed= false; - Object newValue= e.getNewValue(); - if (newValue instanceof Boolean) - changed= ((Boolean)newValue).booleanValue(); - setDirty(e.getSource(), changed); - } - } - }; - - IPreferenceStore ps= configuration.getPreferenceStore(); - if (ps != null) - fStructureCompareOnSingleClick= ps.getBoolean(ComparePreferencePage.OPEN_STRUCTURE_COMPARE); - } - - private boolean structureCompareOnSingleClick() { - return fStructureCompareOnSingleClick; - } - - /* (non Javadoc) - * see IAdaptable.getAdapter - */ - public Object getAdapter(Class adapter) { - if (CompareNavigator.class.equals(adapter)) { - if (fNavigator == null) - fNavigator= new CompareNavigator( - new CompareViewerSwitchingPane[] { - fStructureInputPane, - fStructurePane1, - fStructurePane2, - fContentInputPane - } - ); - return fNavigator; - } - return null; - } - - /* (non Javadoc) - * see IEditorInput.getImageDescriptor - */ - public ImageDescriptor getImageDescriptor() { - return null; - } - - /* (non Javadoc) - * see IEditorInput.getToolTipText - */ - public String getToolTipText() { - return getTitle(); - } - - /* (non Javadoc) - * see IEditorInput.getName - */ - public String getName() { - return getTitle(); - } - - /** - * Returns <code>null</code> since this editor cannot be persisted. - * - * @return <code>null</code> because this editor cannot be persisted - */ - public IPersistableElement getPersistable() { - return null; - } - - /** - * Returns <code>false</code> to indicate that this input - * should not appear in the "File Most Recently Used" menu. - * - * @return <code>false</code> - */ - public boolean exists() { - return false; - } - - /* - * FIXME! - */ - protected void setMessage(String message) { - fMessage= message; - } - - /* - * FIXME! - */ - public String getMessage() { - return fMessage; - } - - /** - * Returns the title which will be used in the compare editor's title bar. - * It can be set with <code>setTitle</code>. - * - * @return the title - */ - public String getTitle() { - if (fTitle == null) - return Utilities.getString("CompareEditorInput.defaultTitle"); //$NON-NLS-1$ - return fTitle; - } - - /** - * Sets the title which will be used when presenting the compare result. - * This method must be called before the editor is opened. - * - * @param title the title to use for the CompareEditor - */ - public void setTitle(String title) { - fTitle= title; - } - - /** - * Returns the title image which will be used in the compare editor's title bar. - * Returns the title image which will be used when presenting the compare result. - * This implementation returns a generic compare icon. - * Subclasses can override. - * - * @return the title image, or <code>null</code> if none - */ - public Image getTitleImage() { - if (fgTitleImage == null) { - fgTitleImage= CompareUIPlugin.getImageDescriptor(COMPARE_EDITOR_IMAGE_NAME).createImage(); - CompareUI.disposeOnShutdown(fgTitleImage); - } - return fgTitleImage; - } - - /** - * Returns the configuration object for the viewers within the compare editor. - * Returns the configuration which was passed to the constructor. - * - * @return the compare configuration - */ - public CompareConfiguration getCompareConfiguration() { - return fCompareConfiguration; - } - - /** - * Adds standard actions to the given <code>ToolBarManager</code>. - * <p> - * Subclasses may override to add their own actions. - * </p> - * - * @param toolBarManager the <code>ToolBarManager</code> to which to contribute - */ - public void contributeToToolBar(ToolBarManager toolBarManager) { - - toolBarManager.add(new Separator()); - toolBarManager.add(fIgnoreWhitespace); - toolBarManager.add(fShowPseudoConflicts); - } - - /** - * Runs the compare operation and stores the compare result. - * - * @param monitor the progress monitor to use to display progress and receive - * requests for cancelation - * @exception InvocationTargetException if the <code>prepareInput</code> method must propagate a checked exception, - * it should wrap it inside an <code>InvocationTargetException</code>; runtime exceptions are automatically - * wrapped in an <code>InvocationTargetException</code> by the calling context - * @exception InterruptedException if the operation detects a request to cancel, - * using <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing - * <code>InterruptedException</code> - */ - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - fInput= prepareInput(monitor); - } - - /** - * Runs the compare operation and returns the compare result. - * If <code>null</code> is returned no differences were found and no compare editor needs to be opened. - * Progress should be reported to the given progress monitor. - * A request to cancel the operation should be honored and acknowledged - * by throwing <code>InterruptedException</code>. - * <p> - * Note: this method is typically called in a modal context thread which doesn't have a Display assigned. - * Implementors of this method shouldn't therefore allocated any SWT resources in this method. - * </p> - * - * @param monitor the progress monitor to use to display progress and receive - * requests for cancelation - * @return the result of the compare operation, or <code>null</code> if there are no differences - * @exception InvocationTargetException if the <code>prepareInput</code> method must propagate a checked exception, - * it should wrap it inside an <code>InvocationTargetException</code>; runtime exceptions are automatically - * wrapped in an <code>InvocationTargetException</code> by the calling context - * @exception InterruptedException if the operation detects a request to cancel, - * using <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing - * <code>InterruptedException</code> - */ - protected abstract Object prepareInput(IProgressMonitor monitor) - throws InvocationTargetException, InterruptedException; - - /** - * Returns the compare result computed by the most recent call to the - * <code>run</code> method. Returns <code>null</code> if no - * differences were found. - * - * @return the compare result prepared in method <code>prepareInput</code> - * or <code>null</code> if there were no differences - */ - public Object getCompareResult() { - return fInput; - } - - /** - * Create the SWT controls that are used to display the result of the compare operation. - * Creates the SWT Controls and sets up the wiring between the individual panes. - * This implementation creates all four panes but makes only the necessary ones visible. - * Finally it feeds the compare result into the top left structure viewer - * and the content viewer. - * <p> - * Subclasses may override if they need to change the layout or wiring between panes. - * - * @param parent the parent control under which the control must be created - * @return the SWT control hierarchy for the compare editor - */ - public Control createContents(Composite parent) { - - fComposite= new Splitter(parent, SWT.VERTICAL); - fComposite.setData(this); - - final Splitter h= new Splitter(fComposite, SWT.HORIZONTAL); - - fStructureInputPane= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof DiffNode) { - DiffNode dn= (DiffNode) input; - if (dn.hasChildren()) - return createDiffViewer(this); - } - if (input instanceof ICompareInput) - return findStructureViewer(oldViewer, (ICompareInput)input, this); - return null; - } - }; - fFocusPane= fStructureInputPane; - - fStructurePane1= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof ICompareInput) - return findStructureViewer(oldViewer, (ICompareInput)input, this); - return null; - } - }; - h.setVisible(fStructurePane1, false); - - fStructurePane2= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof ICompareInput) - return findStructureViewer(oldViewer, (ICompareInput)input, this); - return null; - } - }; - h.setVisible(fStructurePane2, false); - - fContentInputPane= new CompareViewerSwitchingPane(fComposite, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof ICompareInput) - return findContentViewer(oldViewer, (ICompareInput)input, this); - return null; - } - }; - fComposite.setVisible(h, false); - fComposite.setVisible(fContentInputPane, true); - - fComposite.setWeights(new int[] { 30, 70 }); - - fComposite.layout(); - - // setup the wiring for top left pane - fStructureInputPane.addOpenListener( - new IOpenListener() { - public void open(OpenEvent oe) { - feed1(oe.getSelection()); - } - } - ); - fStructureInputPane.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - ISelection s= e.getSelection(); - if (s == null || s.isEmpty()) - feed1(s); - } - } - ); - fStructureInputPane.addDoubleClickListener( - new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - feedDefault1(event.getSelection()); - } - } - ); - - fStructurePane1.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - feed2(e.getSelection()); - } - } - ); - - fStructurePane2.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - feed3(e.getSelection()); - } - } - ); - - if (fInput instanceof ICompareInput) { - fStructureInputPane.setInput((ICompareInput) fInput); - ISelection sel= fStructureInputPane.getSelection(); - if (sel == null || sel.isEmpty()) - feed1(sel); // we only feed downstream viewers if the top left pane is empty - } - - fComposite.setData("Nav", //$NON-NLS-1$ - new CompareViewerSwitchingPane[] { - fStructureInputPane, - fStructurePane1, - fStructurePane2, - fContentInputPane - } - ); - - return fComposite; - } - - private void feed1(final ISelection selection) { - BusyIndicator.showWhile(fComposite.getDisplay(), - new Runnable() { - public void run() { - if (selection == null || selection.isEmpty()) { - Object input= fStructureInputPane.getInput(); - fContentInputPane.setInput(input); - fStructurePane2.setInput(null); // clear downstream pane - fStructurePane1.setInput(null); - } else { - Object input= getElement(selection); - fContentInputPane.setInput(input); - if (structureCompareOnSingleClick()) - fStructurePane1.setInput(input); - fStructurePane2.setInput(null); // clear downstream pane - if (fStructurePane1.getInput() != input) - fStructurePane1.setInput(null); - } - } - } - ); - } - - private void feedDefault1(final ISelection selection) { - BusyIndicator.showWhile(fComposite.getDisplay(), - new Runnable() { - public void run() { - if (!selection.isEmpty()) - fStructurePane1.setInput(getElement(selection)); - } - } - ); - } - - private void feed2(final ISelection selection) { - BusyIndicator.showWhile(fComposite.getDisplay(), - new Runnable() { - public void run() { - if (selection.isEmpty()) { - Object input= fStructurePane1.getInput(); - fContentInputPane.setInput(input); - fStructurePane2.setInput(null); - } else { - Object input= getElement(selection); - fContentInputPane.setInput(input); - fStructurePane2.setInput(input); - } - } - } - ); - } - - private void feed3(final ISelection selection) { - BusyIndicator.showWhile(fComposite.getDisplay(), - new Runnable() { - public void run() { - if (selection.isEmpty()) - fContentInputPane.setInput(fStructurePane2.getInput()); - else - fContentInputPane.setInput(getElement(selection)); - } - } - ); - - } - - /** - * Returns the first element of the given selection if the selection - * is a <code>IStructuredSelection</code> with exactly one element. Returns - * <code>null</code> otherwise. - * - * @param selection the selection - * @return the first element of the selection, or <code>null</code> - */ - private static Object getElement(ISelection selection) { - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection) selection; - if (ss.size() == 1) - return ss.getFirstElement(); - } - return null; - } - - /** - * Asks this input to take focus within its container (editor). - * <p> - * Clients should not call this method but they may - * override if they implement a different layout with different visual - * components. Clients are free to call the inherited method. - * </p> - */ - public void setFocus() { - if (fFocusPane != null) { - Viewer v= fFocusPane.getViewer(); - if (v != null) { - Control c= v.getControl(); - if (c != null) - c.setFocus(); - } - } else if (fComposite != null) - fComposite.setFocus(); - } - - /** - * Factory method for creating a differences viewer for the top left pane. - * It is called from <code>createContents</code> and returns a <code>DiffTreeViewer</code>. - * <p> - * Subclasses may override if they need a different viewer. - * </p> - * - * @param parent the SWT parent control under which to create the viewer's SWT controls - * @return a compare viewer for the top left pane - */ - public Viewer createDiffViewer(Composite parent) { - return new DiffTreeViewer(parent, fCompareConfiguration); - } - - /** - * Implements the dynamic viewer switching for structure viewers. - * The method must return a compare viewer based on the old (or current) viewer - * and a new input object. If the old viewer is suitable for showing the new input the old viewer - * can be returned. Otherwise a new viewer must be created under the given parent composite or - * <code>null</code> can be returned to indicate that no viewer could be found. - * <p> - * This implementation forwards the request to <code>CompareUI.findStructureViewer</code>. - * <p> - * Subclasses may override to implement a different strategy. - * </p> - * - * @return a compare viewer which is suitable for the given input object or <code>null</code> - */ - public Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent) { - return CompareUIPlugin.findStructureViewer(oldViewer, input, parent, fCompareConfiguration); - } - - /** - * Implements the dynamic viewer switching for content viewers. - * The method must return a compare viewer based on the old (or current) viewer - * and a new input object. If the old viewer is suitable for showing the new input the old viewer - * can be returned. Otherwise a new viewer must be created under the given parent composite or - * <code>null</code> can be returned to indicate that no viewer could be found. - * <p> - * This implementation forwards the request to <code>CompareUI.findContentViewer</code>. - * <p> - * Subclasses may override to implement a different strategy. - * </p> - * - * @return a compare viewer which is suitable for the given input object or <code>null</code> - */ - public Viewer findContentViewer(Viewer oldViewer, ICompareInput input, Composite parent) { - - Viewer newViewer= CompareUIPlugin.findContentViewer(oldViewer, input, parent, fCompareConfiguration); - - boolean isNewViewer= newViewer != oldViewer; - if (DEBUG) System.out.println("CompareEditorInput.findContentViewer: " + isNewViewer); //$NON-NLS-1$ - - if (isNewViewer && newViewer instanceof IPropertyChangeNotifier) { - final IPropertyChangeNotifier dsp= (IPropertyChangeNotifier) newViewer; - dsp.addPropertyChangeListener(fDirtyStateListener); - - Control c= newViewer.getControl(); - c.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - dsp.removePropertyChangeListener(fDirtyStateListener); - } - } - ); - } - - return newViewer; - } - - /** - * Returns <code>true</code> if there are unsaved changes. - * The value returned is the value of the <code>DIRTY_STATE</code> property of this input object. - - * Returns <code>true</code> if this input has unsaved changes, - * that is if <code>setDirty(true)</code> has been called. - * Subclasses don't have to override if the functionality provided by <doce>setDirty</code> - * is sufficient. - * - * @return <code>true</code> if there are changes that need to be saved - */ - public boolean isSaveNeeded() { - return fDirty || fDirtyViewers.size() > 0; - } - - /** - * Sets the dirty state of this input to the given - * value and sends out a <code>PropertyChangeEvent</code> if the new value differs from the old value. - * - * @param dirty the dirty state for this compare input - */ - public void setDirty(boolean dirty) { - - boolean confirmSave= true; - Object o= fCompareConfiguration.getProperty(CompareEditor.CONFIRM_SAVE_PROPERTY); - if (o instanceof Boolean) - confirmSave= ((Boolean)o).booleanValue(); - - if (!confirmSave) { - fDirty= dirty; - if (!fDirty) - fDirtyViewers.clear(); - } - } - - private void setDirty(Object source, boolean dirty) { - Assert.isNotNull(source); - boolean oldDirty= fDirtyViewers.size() > 0; - if (dirty) - fDirtyViewers.add(source); - else - fDirtyViewers.remove(source); - boolean newDirty= fDirtyViewers.size() > 0; - if (DEBUG) System.out.println("setDirty("+source+", "+dirty+"): " + newDirty); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - if (oldDirty != newDirty) - Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, new Boolean(oldDirty), new Boolean(newDirty)); - } - - /* (non Javadoc) - * see IPropertyChangeNotifier.addListener - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - fListenerList.add(listener); - } - - /* (non Javadoc) - * see IPropertyChangeNotifier.removeListener - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - fListenerList.remove(listener); - } - - /** - * Save any unsaved changes. - * Empty implementation. - * Subclasses must override to save any changes. - * - * @param progressMonitor an <code>IProgressMonitor</code> that the implementation of save may use to show progress - * @deprecated Override method saveChanges instead. - */ - public void save(IProgressMonitor pm) { - } - - /** - * Save any unsaved changes. - * Subclasses must override to save any changes. - * This implementation tries to flush changes in all viewers by - * calling <code>ISavable.save</code> on them. - * - * @param progressMonitor an <code>IProgressMonitor</code> that the implementation of save may use to show progress - * @since 2.0 - */ - public void saveChanges(IProgressMonitor pm) throws CoreException { - - // flush changes in any dirty viewer - flushViewer(fStructureInputPane, pm); - flushViewer(fStructurePane1, pm); - flushViewer(fStructurePane2, pm); - flushViewer(fContentInputPane, pm); - - save(pm); - } - - private static void flushViewer(CompareViewerSwitchingPane pane, IProgressMonitor pm) throws CoreException { - if (pane != null) { - Viewer v= pane.getViewer(); - if (v instanceof ISavable) - ((ISavable)v).save(pm); - } - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java deleted file mode 100644 index 0c150c1b4..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java +++ /dev/null @@ -1,281 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.util.ResourceBundle; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.core.runtime.IAdaptable; - -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.plugin.AbstractUIPlugin; - -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - - -/** - * The class <code>CompareUI</code> defines the entry point to initiate a configurable - * compare operation on arbitrary resources. The result of the compare - * is opened into a compare editor where the details can be browsed and - * edited in dynamically selected structure and content viewers. - * <p> - * The Compare UI provides a registry for content and structure compare viewers, - * which is initialized from extensions contributed to extension points - * declared by this plug-in. - */ -public final class CompareUI { - - /** - * Compare Plug-in ID (value <code>"org.eclipse.compare"</code>). - * @since 2.0 - */ - public static final String PLUGIN_ID= "org.eclipse.compare"; //$NON-NLS-1$ - - /** - * Image descriptor for the disabled icon of the 'Next' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_DTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_NEXT); - /** - * Image descriptor for the normal icon of the 'Next' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_CTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_NEXT); - /** - * Image descriptor for the roll-over icon of the 'Next' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_ETOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.ETOOL_NEXT); - - /** - * Image descriptor for the disabled icon of the 'Previous' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_DTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_PREV); - /** - * Image descriptor for the normal icon of the 'Previous' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_CTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_PREV); - /** - * Image descriptor for the roll-over icon of the 'Previous' tool bar button. - * @since 2.0 - */ - public static final ImageDescriptor DESC_ETOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.ETOOL_PREV); - - /** - * Name of the title property of a compare viewer. - * If a property with this name is set - * on the top level SWT control of a viewer, it is used as a title in the pane's - * title bar. - */ - public static final String COMPARE_VIEWER_TITLE= "org.eclipse.compare.CompareUI.CompareViewerTitle"; //$NON-NLS-1$ - - private CompareUI() { - } - - public static AbstractUIPlugin getPlugin() { - return CompareUIPlugin.getDefault(); - } - - /** - * Returns this plug-in's resource bundle. - * - * @return the plugin's resource bundle - */ - public static ResourceBundle getResourceBundle() { - return CompareUIPlugin.getResourceBundle(); - } - - /** - * Performs the comparison described by the given input and opens a - * compare editor on the result in the currently active workbench page. - * - * @param input the input on which to open the compare editor - */ - public static void openCompareEditor(CompareEditorInput input) { - openCompareEditorOnPage(input, null); - } - - /** - * Performs the comparison described by the given input and opens a - * compare editor on the result in the given workbench page. - * - * @param input the input on which to open the compare editor - * @param page the workbench page in which to open the compare editor - * @since 2.1 - */ - public static void openCompareEditorOnPage(CompareEditorInput input, IWorkbenchPage page) { - CompareUIPlugin plugin= CompareUIPlugin.getDefault(); - if (plugin != null) - plugin.openCompareEditor(input, page); - } - - /** - * Performs the comparison described by the given input and opens a - * modal compare dialog on the result. - * - * @param input the input on which to open the compare dialog - */ - public static void openCompareDialog(CompareEditorInput input) { - CompareUIPlugin plugin= CompareUIPlugin.getDefault(); - if (plugin != null) - plugin.openCompareDialog(input); - } - - /** - * Registers an image descriptor for the given type. - * - * @param type the type - * @param descriptor the image descriptor - */ - public static void registerImageDescriptor(String type, ImageDescriptor descriptor) { - CompareUIPlugin.registerImageDescriptor(type, descriptor); - } - - /** - * Returns a shared image for the given type, or a generic image if none - * has been registered for the given type. - * <p> - * Note: Images returned from this method will be automatically disposed - * of when this plug-in shuts down. Callers must not dispose of these - * images themselves. - * </p> - * - * @param type the type - * @return the image - */ - public static Image getImage(String type) { - return CompareUIPlugin.getImage(type); - } - - /** - * Registers the given image for being disposed when this plug-in is shutdown. - * - * @param image the image to register for disposal - */ - public static void disposeOnShutdown(Image image) { - CompareUIPlugin.disposeOnShutdown(image); - } - - /** - * Returns a shared image for the given adaptable. - * This convenience method queries the given adaptable - * for its <code>IWorkbenchAdapter.getImageDescriptor</code>, which it - * uses to create an image if it does not already have one. - * <p> - * Note: Images returned from this method will be automatically disposed - * of when this plug-in shuts down. Callers must not dispose of these - * images themselves. - * </p> - * - * @param adaptable the adaptable for which to find an image - * @return an image - */ - public static Image getImage(IAdaptable adaptable) { - return CompareUIPlugin.getImage(adaptable); - } - - /** - * Returns a structure compare viewer based on an old viewer and an input object. - * If the old viewer is suitable for showing the input, the old viewer - * is returned. Otherwise, the input's type is used to find a viewer descriptor in the registry - * which in turn is used to create a structure compare viewer under the given parent composite. - * If no viewer descriptor can be found <code>null</code> is returned. - * - * @param oldViewer a new viewer is only created if this old viewer cannot show the given input - * @param input the input object for which to find a structure viewer - * @param parent the SWT parent composite under which the new viewer is created - * @param configuration a configuration which is passed to a newly created viewer - * @return the compare viewer which is suitable for the given input object or <code>null</code> - */ - public static Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent, - CompareConfiguration configuration) { - - return CompareUIPlugin.findStructureViewer(oldViewer, input, parent, configuration); - } - - /** - * Returns a content compare viewer based on an old viewer and an input object. - * If the old viewer is suitable for showing the input the old viewer - * is returned. Otherwise the input's type is used to find a viewer descriptor in the registry - * which in turn is used to create a content compare viewer under the given parent composite. - * If no viewer descriptor can be found <code>null</code> is returned. - * - * @param oldViewer a new viewer is only created if this old viewer cannot show the given input - * @param input the input object for which to find a content viewer - * @param parent the SWT parent composite under which the new viewer is created - * @param configuration a configuration which is passed to a newly created viewer - * @return the compare viewer which is suitable for the given input object or <code>null</code> - */ - public static Viewer findContentViewer(Viewer oldViewer, ICompareInput input, Composite parent, - CompareConfiguration configuration) { - return CompareUIPlugin.findContentViewer(oldViewer, input, parent, configuration); - } - - /** - * Returns a content compare viewer based on an old viewer and an input - * object. If the old viewer is suitable for showing the input the old - * viewer is returned. Otherwise the input's type is used to find a viewer - * descriptor in the registry which in turn is used to create a content - * compare viewer under the given parent composite. In order to determine - * the input's type, the input must either implement IStreamContentAccessor - * and ITypedElement or ICompareInput. If no viewer descriptor can be found - * <code>null</code> is returned. - * - * @param oldViewer a new viewer is only created if this old viewer cannot show the given input - * @param input the input object for which to find a content viewer. Must - * implement either <code>IStreamContentAccessor</code> and<code> - * ITypedElement</code> or <code>ICompareInput</code>. - * @param parent the SWT parent composite under which the new viewer is created - * @param configuration a configuration which is passed to a newly created viewer - * @return the compare viewer which is suitable for the given input object or <code>null</code> - */ - public static Viewer findContentViewer(Viewer oldViewer, Object input, Composite parent, - CompareConfiguration configuration) { - - return CompareUIPlugin.findContentViewer(oldViewer, input, parent, configuration); - } - - /** - * Adds an alias for the given type. - * Subsequent calls to <code>findStructureViewer</code> - * treat alias as a synonym for type and return the same viewer. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - * @param type a type name for which a viewer has been registered - * @param alias a type name which should be treated as a synonym of type - * @since 2.0 - */ - public static void addStructureViewerAlias(String type, String alias) { - CompareUIPlugin.addStructureViewerAlias(type, alias); - } - - /** - * Remove all aliases for the given type. This method does not affect - * the initial binding between type and viewer. If no aliases exist for the - * given type this method does nothing. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - * @param type the type name for which all synonymes are removed. - * @since 2.0 - */ - public static void removeAllStructureViewerAliases(String type) { - CompareUIPlugin.removeAllStructureViewerAliases(type); - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java deleted file mode 100644 index a7d4797fb..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.action.ToolBarManager; - -/** - * A <code>CompareViewerPane</code> is a convenience class which installs a - * <code>CLabel</code> and a <code>Toolbar</code> in a <code>ViewForm</code>. - * <P> - * Double clicking onto the <code>CompareViewerPane</code>'s title bar maximizes - * the <code>CompareViewerPane</code> to the size of an enclosing <code>Splitter</code> - * (if there is one). - * If more <code>Splitters</code> are nested maximizing walks up and - * maximizes to the outermost <code>Splitter</code>. - * - * @since 2.0 - */ -public class CompareViewerPane extends ViewForm { - - private ToolBarManager fToolBarManager; - - /** - * Constructs a new instance of this class given its parent - * and a style value describing its behavior and appearance. - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - */ - public CompareViewerPane(Composite parent, int style) { - super(parent, style); - - marginWidth= 0; - marginHeight= 0; - - CLabel label= new CLabel(this, SWT.NONE) { - public Point computeSize(int wHint, int hHint, boolean changed) { - return super.computeSize(wHint, Math.max(24, hHint), changed); - } - }; - setTopLeft(label); - - MouseAdapter ml= new MouseAdapter() { - public void mouseDoubleClick(MouseEvent e) { - Control content= getContent(); - if (content != null && content.getBounds().contains(e.x, e.y)) - return; - Control parent= getParent(); - if (parent instanceof Splitter) - ((Splitter)parent).setMaximizedControl(CompareViewerPane.this); - } - }; - - addMouseListener(ml); - label.addMouseListener(ml); - } - - /** - * Sets the receiver's title text. - * The value <code>null</code> clears it. - * - * @param text the text to be displayed in the CompareViewerPane's title or null - * - * @exception SWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - */ - public void setText(String label) { - CLabel cl= (CLabel) getTopLeft(); - cl.setText(label); - } - - /** - * Return the receiver's title text. - * - * @return the text of the CompareViewerPane's title or null - */ - public void setImage(Image image) { - CLabel cl= (CLabel) getTopLeft(); - cl.setImage(image); - } - - /** - * Returns a <code>ToolBarManager</code> if the given parent is a - * <code>CompareViewerPane</code> or <code>null</code> otherwise. - * - * @param parent a <code>Composite</code> or <code>null</code> - * @return a <code>ToolBarManager</code> if the given parent is a <code>CompareViewerPane</code> otherwise <code>null</code> - */ - public static ToolBarManager getToolBarManager(Composite parent) { - if (parent instanceof CompareViewerPane) { - CompareViewerPane pane= (CompareViewerPane) parent; - return pane.getToolBarManager(); - } - return null; - } - - /** - * Clears tool items in the <code>CompareViewerPane</code>'s control bar. - * - * @param parent a <code>Composite</code> or <code>null</code> - */ - public static void clearToolBar(Composite parent) { - ToolBarManager tbm= getToolBarManager(parent); - if (tbm != null) { - tbm.removeAll(); - tbm.update(true); - } - } - - //---- private stuff - - private ToolBarManager getToolBarManager() { - if (fToolBarManager == null) { - ToolBar tb= new ToolBar(this, SWT.FLAT); - setTopCenter(tb); - fToolBarManager= new ToolBarManager(tb); - } - return fToolBarManager; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java deleted file mode 100644 index 55682519a..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java +++ /dev/null @@ -1,371 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.text.MessageFormat; - -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.util.ListenerList; -import org.eclipse.jface.viewers.*; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - - -/** - * A custom <code>CompareViewerPane</code> that supports dynamic viewer switching. - * - * <p> - * Clients must implement the viewer switching strategy by implementing - * the <code>getViewer(Viewer, Object)</code> method. - * <p> - * If a property with the name <code>CompareUI.COMPARE_VIEWER_TITLE</code> is set - * on the top level SWT control of a viewer, it is used as a title in the <code>CompareViewerPane</code>'s - * title bar. - * - * @since 2.0 - */ -public abstract class CompareViewerSwitchingPane extends CompareViewerPane - implements ISelectionChangedListener, ISelectionProvider, IDoubleClickListener { - - private Viewer fViewer; - private Object fInput; - private ListenerList fSelectionListeners= new ListenerList(); - private ListenerList fDoubleClickListener= new ListenerList(); - private ListenerList fOpenListener= new ListenerList(); - private boolean fControlVisibility= false; - private String fTitle; - private String fTitleArgument; - - private IOpenListener fOpenHandler= new IOpenListener() { - public void open(OpenEvent event) { - Object[] listeners= fOpenListener.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((IOpenListener) listeners[i]).open(event); - } - }; - - /** - * Creates a <code>CompareViewerSwitchingPane</code> as a child of the given parent and with the - * specified SWT style bits. - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - */ - public CompareViewerSwitchingPane(Composite parent, int style) { - this(parent, style, false); - } - - /** - * Creates a <code>CompareViewerSwitchingPane</code> as a child of the given parent and with the - * specified SWT style bits. - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * @param visibility the initial visibility of the CompareViewerSwitchingPane - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - */ - public CompareViewerSwitchingPane(Composite parent, int style, boolean visibility) { - super(parent, style); - - fControlVisibility= visibility; - - setViewer(new NullViewer(this)); - - addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fViewer instanceof ISelectionProvider) - ((ISelectionProvider) fViewer).removeSelectionChangedListener(CompareViewerSwitchingPane.this); - if (fViewer instanceof StructuredViewer) { - StructuredViewer sv= (StructuredViewer) fViewer; - sv.removeDoubleClickListener(CompareViewerSwitchingPane.this); - sv.removeOpenListener(fOpenHandler); - } - fViewer= null; - fInput= null; - fSelectionListeners= null; - } - } - ); - } - - /** - * Returns the current viewer. - * - * @return the current viewer - */ - public Viewer getViewer() { - return fViewer; - } - - private void setViewer(Viewer newViewer) { - - if (newViewer == fViewer) - return; - - boolean oldEmpty= isEmpty(); - - if (fViewer != null) { - - if (fViewer instanceof ISelectionProvider) - ((ISelectionProvider) fViewer).removeSelectionChangedListener(this); - - if (fViewer instanceof StructuredViewer) { - StructuredViewer sv= (StructuredViewer) fViewer; - sv.removeDoubleClickListener(this); - sv.removeOpenListener(fOpenHandler); - } - - Control content= getContent(); - setContent(null); - - fViewer.setInput(null); - - if (content != null && !content.isDisposed()) - content.dispose(); - - } else - oldEmpty= false; - setContent(null); - - fViewer= newViewer; - - if (fViewer != null) { - // we have to remember and restore the old visibility of the CustomPane - // since setContent changes the visibility - boolean old= getVisible(); - setContent(fViewer.getControl()); - setVisible(old); // restore old visibility - - boolean newEmpty= isEmpty(); - - if (fViewer instanceof ISelectionProvider) - ((ISelectionProvider) fViewer).addSelectionChangedListener(this); - - if (fViewer instanceof StructuredViewer) { - StructuredViewer sv= (StructuredViewer) fViewer; - sv.addDoubleClickListener(this); - sv.addOpenListener(fOpenHandler); - } - - if (oldEmpty != newEmpty) { // relayout my container - Composite parent= getParent(); - if (parent instanceof Splitter) - ((Splitter)parent).setVisible(this, fControlVisibility ? !newEmpty : true); - } - - layout(true); - } - } - - /** - * Returns the optional title argument that has been set with <code>setTitelArgument</code> - * or <code>null</code> if no optional title argument has been set. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - * - * @return the optional title argument or <code>null</code> - */ - public String getTitleArgument() { - return fTitleArgument; - } - - /** - * Returns <code>true</code> if no viewer is installed or if the current viewer - * is a <code>NullViewer</code>. - * - * @return <code>true</code> if no viewer is installed or if the current viewer is a <code>NullViewer</code> - */ - public boolean isEmpty() { - return fViewer == null || fViewer instanceof NullViewer; - } - - public void addSelectionChangedListener(ISelectionChangedListener l) { - fSelectionListeners.add(l); - } - - public void removeSelectionChangedListener(ISelectionChangedListener l) { - fSelectionListeners.remove(l); - } - - public void addDoubleClickListener(IDoubleClickListener l) { - fDoubleClickListener.add(l); - } - - public void removeDoubleClickListener(IDoubleClickListener l) { - fDoubleClickListener.remove(l); - } - - public void addOpenListener(IOpenListener l) { - fOpenListener.add(l); - } - - public void removeOpenListener(IOpenListener l) { - fOpenListener.remove(l); - } - - public void doubleClick(DoubleClickEvent event) { - Object[] listeners= fDoubleClickListener.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((IDoubleClickListener) listeners[i]).doubleClick(event); - } - - public ISelection getSelection() { - if (fViewer instanceof ISelectionProvider) - return ((ISelectionProvider) fViewer).getSelection(); - return null; - } - - public void setSelection(ISelection s) { - if (fViewer instanceof ISelectionProvider) - ((ISelectionProvider) fViewer).setSelection(s); - } - - public void selectionChanged(SelectionChangedEvent ev) { - Object[] listeners= fSelectionListeners.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((ISelectionChangedListener) listeners[i]).selectionChanged(ev); - } - - private boolean hasFocus2() { - // do we have focus? - Display display= getDisplay(); - if (display != null) - for (Control focus= display.getFocusControl(); focus != null; focus= focus.getParent()) - if (focus == this) - return true; - return false; - } - - /** - * Sets the input object of this pane. - * For this input object a suitable viewer is determined by calling the abstract - * method <code>getViewer(Viewer, Object)</code>. - * If the returned viewer differs from the current one, the old viewer - * is disposed and the new one installed. Then the input object is fed - * into the newly installed viewer by calling its <code>setInput(Object)</code> method. - * If new and old viewer don't differ no new viewer is installed but just - * <code>setInput(Object)</code> is called. - * If the input is <code>null</code> the pane is cleared, - * that is the current viewer is disposed. - * - * @param input the new input object or <code>null</code> - */ - public void setInput(Object input) { - - if (fInput == input) - return; - - boolean hadFocus= hasFocus2(); - - fInput= input; - - // viewer switching - Viewer newViewer= null; - if (input != null) - newViewer= getViewer(fViewer, input); - - if (newViewer == null) { - if (fViewer instanceof NullViewer) - return; - newViewer= new NullViewer(this); - } - - setViewer(newViewer); - - // set input - fViewer.setInput(input); - - Image image= null; - if (!(fViewer instanceof NullViewer) && input instanceof ICompareInput) - image= ((ICompareInput)input).getImage(); - setImage(image); - - String title= null; - if (fViewer != null) { - Control c= fViewer.getControl(); - if (c != null) { - Object data= c.getData(CompareUI.COMPARE_VIEWER_TITLE); - if (data instanceof String) - title= (String) data; - if (hadFocus) - c.setFocus(); - } - } - - fTitle= title; - updateTitle(); - } - - /** - * Sets an additional and optional argument for the pane's title. - * Note: this method is for internal use only. Clients should not call this method. - * - * @param argument an optional argument for the pane's title - */ - public void setTitleArgument(String argument) { - fTitleArgument= argument; - updateTitle(); - } - - private void updateTitle() { - if (fTitle != null) { - if (fTitleArgument != null) { - String format= CompareMessages.getString("CompareViewerSwitchingPane.Titleformat"); //$NON-NLS-1$ - String t= MessageFormat.format(format, new String[] { fTitle, fTitleArgument } ); - setText(t); - } else - setText(fTitle); - } else { - setText(""); //$NON-NLS-1$ - } - } - - /** - * Returns the current input of this pane or null if the pane has no input. - * - * @return an <code>Object</code> that is the input to this pane or null if the pane has no input. - */ - public Object getInput() { - return fInput; - } - - /** - * Returns a viewer which is able to display the given input. - * If no viewer can be found, <code>null</code> is returned. - * The additional argument oldViewer represents the viewer currently installed - * in the pane (or <code>null</code> if no viewer is installed). - * It can be returned from this method if the current viewer can deal with the - * input (and no new viewer must be created). - * - * @param oldViewer the currently installed viewer or <code>null</code> - * @param input the input object for which a viewer must be determined or <code>null</code> - * @return a viewer for the given input, or <code>null</code> if no viewer can be determined - */ - abstract protected Viewer getViewer(Viewer oldViewer, Object input); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java deleted file mode 100644 index 5969b20da..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java +++ /dev/null @@ -1,1126 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.util.HashMap; -import java.util.ResourceBundle; -import java.util.Date; -import java.util.List; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.HashSet; -import java.util.Calendar; -import java.io.InputStream; -import java.text.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Widget; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableItem; -import org.eclipse.swt.widgets.Item; -import org.eclipse.swt.widgets.Button; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.dialogs.*; - -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * A dialog where one input element can be compared against - * a list of historic variants (editions) of the same input element. - * The dialog can be used to implement functions like "Compare/Replace with Version" or - * "Compare/Replace from Local History" on workspace resources. - * <p> - * In addition it is possible to specify a subsection of the input element - * (e.g. a method in a Java source file) by means of a "path". - * In this case the dialog compares only the subsection (as specified by the path) - * with the corresponding subsection in the list of editions. - * Only those editions are shown where the subsection differs from the same subsection in - * another edition thereby minimizing the number of presented variants. - * This functionality can be used to implement "Replace from Local History" - * for the Java language. - * <p> - * Subsections of an input element are determined by first finding an - * <code>IStructureCreator</code> for the input's type. - * Then the method <code>locate</code> is used to extract the subsection. - * <p> - * Each edition (variant in the list of variants) must implement the <code>IModificationDate</code> interface - * so that the dialog can sort the editions and present them in a tree structure where every - * node corresponds one day. - * <p> - * The functionality is surfaced in a single function <code>selectEdition</code>. - * <p> - * Clients may instantiate this class; it is not intended to be subclassed. - * </p> - * - * @see IModificationDate - * @see ITypedElement - */ -public class EditionSelectionDialog extends ResizableDialog { - - /** - * An item in an underlying edition. - */ - private static class Pair { - - private ITypedElement fEdition; - private ITypedElement fItem; - private String fContent; - private IStructureCreator fStructureCreator; - private boolean fHasError= false; - - Pair(IStructureCreator structureCreator, ITypedElement edition, ITypedElement item) { - fStructureCreator= structureCreator; - fEdition= edition; - fItem= item; - } - - Pair(IStructureCreator structureCreator, ITypedElement edition) { - this(structureCreator, edition, edition); - } - - ITypedElement getEdition() { - return fEdition; - } - - ITypedElement getItem() { - return fItem; - } - - /** - * The content is lazily loaded - */ - private String getContent() { - if (fContent == null) { - if (fStructureCreator != null) - fContent= fStructureCreator.getContents(fItem, false); - else { - if (fItem instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) fItem; - try { - InputStream is= sca.getContents(); - if (is != null) - fContent= Utilities.readString(is); - } catch (CoreException ex) { - } - } - } - if (fContent == null) - fContent= ""; //$NON-NLS-1$ - } - return fContent; - } - - /** - * Compares content of item. - */ - public boolean equals(Object other) { - if (other != null && other.getClass() == getClass()) { - if (getContent().equals(((Pair)other).getContent())) - return true; - } - return super.equals(other); - } - } - - // Configuration options - private CompareConfiguration fCompareConfiguration; - private ArrayList fArrayList= new ArrayList(); - /** use a side-by-side compare viewer */ - private boolean fCompare= true; - /** show target on right hand side */ - private boolean fTargetIsRight= false; - /** hide entries which have identical content */ - private boolean fHideIdentical= true; - /** add mode if true, otherwise replace mode */ - private boolean fAddMode= false; - /** compare mode if true, otherwise replace/add mode */ - private boolean fCompareMode= false; - /** perform structure compare on editions */ - private boolean fStructureCompare= false; - /** allow for multiple selection */ - private boolean fMultiSelect= false; - - /** - * Maps from members to their corresponding editions. - * Has only a single entry if dialog is used in "Replace" (and not "Add") mode. - */ - private HashMap fMemberEditions; - /** - * Maps from members to their corresponding selected edition. - */ - private HashMap fMemberSelection; - /** The editions of the current selected member */ - private List fCurrentEditions; - private Thread fThread; - private Pair fTargetPair; - /** The selected edition in the edition viewer */ - private ITypedElement fSelectedItem; - private String fTitleArg; - private Image fTitleImage; - - // SWT controls - private CompareViewerSwitchingPane fContentPane; - private Button fCommitButton; - private Table fMemberTable; - private CompareViewerPane fMemberPane; - private Tree fEditionTree; - private CompareViewerPane fEditionPane; - private Image fDateImage; - private Image fTimeImage; - private CompareViewerSwitchingPane fStructuredComparePane; - - /** - * Creates a new modal, resizable dialog. - * Various titles, icons, and labels are configured from the given resource bundle. - * The following resource keys are used: - * <pre> - * key type description - * title String dialog title - * width Integer initial width of dialog - * height Integer initial height of dialog - * treeTitleFormat MessageFormat pane title for edition tree; arg 0 is the target - * dateIcon String icon for node in edition tree; path relative to plugin - * timeIcon String icon for leaf in edition tree; path relative to plugin - * todayFormat MessageFormat format string if date is todays date; arg 0 is date - * yesterdayFormat MessageFormat format string if date is yesterdays date; arg 0 is date - * dayFormat MessageFormat format string if date is any other date; arg 0 is date - * editionLabel String label for editions side of compare viewer; arg 0 is the date - * targetLabel String label for target side of compare viewer - * buttonLabel String label for OK button; default is IDialogConstants.OK_LABEL - * </pre> - * - * @param parent if not <code>null</code> the new dialog stays on top of this parent shell - * @param bundle <code>ResourceBundle</code> to configure the dialog - */ - public EditionSelectionDialog(Shell parent, ResourceBundle bundle) { - super(parent, bundle); - - fCompareConfiguration= new CompareConfiguration(); - fCompareConfiguration.setLeftEditable(false); - fCompareConfiguration.setRightEditable(false); - - String iconName= Utilities.getString(fBundle, "dateIcon", "obj16/day_obj.gif"); //$NON-NLS-2$ //$NON-NLS-1$ - ImageDescriptor id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fDateImage= id.createImage(); - iconName= Utilities.getString(fBundle, "timeIcon", "obj16/resource_obj.gif"); //$NON-NLS-1$ //$NON-NLS-2$ - id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fTimeImage= id.createImage(); - } - - /** - * Sets an additional and optional argument for the edition pane's title. - * - * @param titleArgument an optional argument for the edition pane's title - * @since 2.0 - */ - public void setEditionTitleArgument(String titleArgument) { - fTitleArg= titleArgument; - } - - /** - * Sets an optional image for the edition pane's title. - * - * @param titleImage an optional image for the edition pane's title - * @since 2.0 - */ - public void setEditionTitleImage(Image titleImage) { - fTitleImage= titleImage; - } - - /** - * Select the previous edition (presenting a UI). - * - * @param target the input object against which the editions are compared; must not be <code>null</code> - * @param editions the list of editions (element type: <code>ITypedElement</code>s) - * @param path If <code>null</code> dialog shows full input; if non <code>null</code> it extracts a subsection - * @return returns the selected edition or <code>null</code> if error occurred. - * The returned <code>ITypedElement</code> is one of the original editions - * if <code>path</code> was <code>null</code>; otherwise - * it is an <code>ITypedElement</code> returned from <code>IStructureCreator.locate(path, item)</code> - * @since 2.0 - */ - public ITypedElement selectPreviousEdition(final ITypedElement target, ITypedElement[] inputEditions, Object ppath) { - Assert.isNotNull(target); - fTargetPair= new Pair(null, target); - - // sort input editions - final int count= inputEditions.length; - final IModificationDate[] editions= new IModificationDate[count]; - for (int i= 0; i < count; i++) - editions[i]= (IModificationDate) inputEditions[i]; - if (count > 1) - internalSort(editions, 0, count-1); - - // find StructureCreator if ppath is not null - IStructureCreator structureCreator= null; - if (ppath != null) { - String type= target.getType(); - IStructureCreatorDescriptor scd= CompareUIPlugin.getStructureCreator(type); - if (scd != null) - structureCreator= scd.createStructureCreator(); - } - - if (fAddMode) { - // does not work in add mode - return null; - } - - if (structureCreator != null) { - Pair pair= createPair(structureCreator, ppath, target); - if (pair != null) - fTargetPair= pair; - else - ppath= null; // couldn't extract item because of error - } - - // from front (newest) to back (oldest) - for (int i= 0; i < count; i++) { - - ITypedElement edition= (ITypedElement) editions[i]; - Pair pair= null; - - if (structureCreator != null && ppath != null) { - // extract sub element from edition - pair= createPair(structureCreator, ppath, edition); - } else { - pair= new Pair(null, edition); - } - - if (pair != null && pair.fHasError) - return null; - - if (pair != null && !fTargetPair.equals(pair)) { - return pair.fItem; - } - } - - // nothing found - return null; - } - - /** - * Presents this modal dialog with the functionality described in the class comment above. - * - * @param target the input object against which the editions are compared; must not be <code>null</code> - * @param editions the list of editions (element type: <code>ITypedElement</code>s) - * @param path If <code>null</code> dialog shows full input; if non <code>null</code> it extracts a subsection - * @return returns the selected edition or <code>null</code> if dialog was cancelled. - * The returned <code>ITypedElement</code> is one of the original editions - * if <code>path</code> was <code>null</code>; otherwise - * it is an <code>ITypedElement</code> returned from <code>IStructureCreator.locate(path, item)</code> - */ - public ITypedElement selectEdition(final ITypedElement target, ITypedElement[] inputEditions, Object ppath) { - - Assert.isNotNull(target); - fTargetPair= new Pair(null, target); - - // sort input editions - final int count= inputEditions.length; - final IModificationDate[] editions= new IModificationDate[count]; - for (int i= 0; i < count; i++) - editions[i]= (IModificationDate) inputEditions[i]; - if (count > 1) - internalSort(editions, 0, count-1); - - // find StructureCreator if ppath is not null - IStructureCreator structureCreator= null; - if (ppath != null) { - String type= target.getType(); - IStructureCreatorDescriptor scd= CompareUIPlugin.getStructureCreator(type); - if (scd != null) - structureCreator= scd.createStructureCreator(); - } - - if (!fAddMode) { - // replace mode - - if (structureCreator != null) { - Pair pair= createPair(structureCreator, ppath, target); - if (pair != null) - fTargetPair= pair; - else - ppath= null; // couldn't extract item because of error - } - - // set the left and right labels for the compare viewer - String targetLabel= getTargetLabel(target, fTargetPair.getItem()); - if (fTargetIsRight) - fCompareConfiguration.setRightLabel(targetLabel); - else - fCompareConfiguration.setLeftLabel(targetLabel); - - if (structureCreator != null && ppath != null) { // extract sub element - - final IStructureCreator sc= structureCreator; - final Object path= ppath; - - // construct the comparer thread - // and perform the background extract - fThread= new Thread() { - public void run() { - - // from front (newest) to back (oldest) - for (int i= 0; i < count; i++) { - - if (fEditionTree == null || fEditionTree.isDisposed()) - break; - ITypedElement edition= (ITypedElement) editions[i]; - - // extract sub element from edition - Pair pair= createPair(sc, path, edition); - if (pair != null) - sendPair(pair); - } - sendPair(null); - } - }; - } else { - // create tree widget - create(); - - // from front (newest) to back (oldest) - for (int i= 0; i < count; i++) - addMemberEdition(new Pair(null, (ITypedElement) editions[i])); - } - - } else { - // add mode - final Object container= ppath; - Assert.isNotNull(container); - - if (structureCreator == null) - return null; // error - - // extract all elements of container - final HashSet current= new HashSet(); - IStructureComparator sco= structureCreator.locate(container, target); - if (sco != null) { - Object[] children= sco.getChildren(); - if (children != null) - for (int i= 0; i < children.length; i++) - current.add(children[i]); - } - - final IStructureCreator sc= structureCreator; - - // construct the comparer thread - // and perform the background extract - fThread= new Thread() { - public void run() { - - // from front (newest) to back (oldest) - for (int i= 0; i < count; i++) { - - if (fEditionTree == null || fEditionTree.isDisposed()) - break; - ITypedElement edition= (ITypedElement) editions[i]; - - IStructureComparator sco2= sc.locate(container, edition); - if (sco2 != null) { - Object[] children= sco2.getChildren(); - if (children != null) { - for (int i2= 0; i2 < children.length; i2++) { - ITypedElement child= (ITypedElement) children[i2]; - if (!current.contains(child)) - sendPair(new Pair(sc, edition, child)); - } - } - } - } - sendPair(null); - } - }; - } - - open(); - - if (getReturnCode() == OK) - return fSelectedItem; - return null; - } - - private Pair createPair(IStructureCreator sc, Object path, ITypedElement input) { - IStructureComparator scmp= sc.locate(path, input); - if (scmp == null && sc.getStructure(input) == null) { // parse error - Pair p= new Pair(sc, input); - p.fHasError= true; - return p; - } - if (scmp instanceof ITypedElement) - return new Pair(sc, input, (ITypedElement) scmp); - return null; - } - - /** - * Controls whether identical entries are shown or not (default). - * This method must be called before <code>selectEdition</code>. - * - * @param hide if true identical entries are hidden; otherwise they are shown. - * @since 2.0 - */ - public void setHideIdenticalEntries(boolean hide) { - fHideIdentical= hide; - } - - /** - * Controls whether workspace target is on the left (the default) or right hand side. - * - * @param isRight if true target is shown on right hand side. - * @since 2.0 - */ - public void setTargetIsRight(boolean isRight) { - fTargetIsRight= isRight; - } - - /** - * Controls whether the <code>EditionSelectionDialog</code> is in 'add' mode - * or 'replace' mode (the default). - * - * @param addMode if true dialog is in 'add' mode. - * @since 2.0 - */ - public void setAddMode(boolean addMode) { - fAddMode= addMode; - fMultiSelect= addMode; - } - - /** - * Controls whether the <code>EditionSelectionDialog</code> is in 'compare' mode - * or 'add/replace' (the default) mode. - * - * @param addMode if true dialog is in 'add' mode. - * @since 2.0 - */ - public void setCompareMode(boolean compareMode) { - fCompareMode= compareMode; - fStructureCompare= fCompareMode && !fAddMode; - } - - /** - * Returns the input target that has been specified with the most recent call - * to <code>selectEdition</code>. If a not <code>null</code> path was specified this method - * returns a subsection of this target (<code>IStructureCreator.locate(path, target)</code>) - * instead of the input target. - * <p> - * For example if the <code>target</code> is a Java compilation unit and <code>path</code> specifies - * a method, the value returned from <code>getTarget</code> will be the method not the compilation unit. - * - * @return the last specified target or a subsection thereof. - */ - public ITypedElement getTarget() { - return fTargetPair.getItem(); - } - - /** - * Returns the editions that have been selected with the most - * recent call to <code>selectEdition</code>. - * - * @return the selected editions as an array. - * @since 2.1 - */ - public ITypedElement[] getSelection() { - ArrayList result= new ArrayList(); - if (fMemberSelection != null) { - Iterator iter= fArrayList.iterator(); - for (int i= 0; iter.hasNext(); i++) { - Object edition= iter.next(); - Object item= fMemberSelection.get(edition); - if (item != null) - result.add(item); - } - } else if (fSelectedItem != null) - result.add(fSelectedItem); - return (ITypedElement[]) result.toArray(new ITypedElement[result.size()]); - } - - /** - * Returns a label for identifying the target side of a compare viewer. - * This implementation extracts the value for the key "targetLabel" from the resource bundle - * and passes it as the format argument to <code>MessageFormat.format</code>. - * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string) - * is the name of the given input element. - * <p> - * Subclasses may override to create their own label. - * </p> - * - * @param target the target element for which a label must be returned - * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given target; otherwise the same as target - * @return a label the target side of a compare viewer - */ - protected String getTargetLabel(ITypedElement target, ITypedElement item) { - String format= null; - if (target instanceof ResourceNode) - format= Utilities.getString(fBundle, "workspaceTargetLabel", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "targetLabel"); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - return MessageFormat.format(format, new Object[] { target.getName() }); - } - - /** - * Returns a label for identifying the edition side of a compare viewer. - * This implementation extracts the value for the key "editionLabel" from the resource bundle - * and passes it as the format argument to <code>MessageFormat.format</code>. - * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string) - * is the formatted modification date of the given input element. - * <p> - * Subclasses may override to create their own label. - * </p> - * - * @param selectedEdition the selected edition for which a label must be returned - * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given selectedEdition; otherwise the same as selectedEdition - * @return a label for the edition side of a compare viewer - */ - protected String getEditionLabel(ITypedElement selectedEdition, ITypedElement item) { - String format= null; - if (selectedEdition instanceof ResourceNode) - format= Utilities.getString(fBundle, "workspaceEditionLabel", null); //$NON-NLS-1$ - else if (selectedEdition instanceof HistoryItem) - format= Utilities.getString(fBundle, "historyEditionLabel", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "editionLabel"); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - - String date= ""; //$NON-NLS-1$ - if (selectedEdition instanceof IModificationDate) { - long modDate= ((IModificationDate)selectedEdition).getModificationDate(); - date= DateFormat.getDateTimeInstance().format(new Date(modDate)); - } - - return MessageFormat.format(format, new Object[] { date }); - } - - /** - * Returns a label for identifying a node in the edition tree viewer. - * This implementation extracts the value for the key "workspaceTreeFormat" or - * "treeFormat" (in that order) from the resource bundle - * and passes it as the format argument to <code>MessageFormat.format</code>. - * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string) - * is the formatted modification date of the given input element. - * <p> - * Subclasses may override to create their own label. - * </p> - * - * @param edition the edition for which a label must be returned - * @param item if a path has been specified in <code>edition</code> a sub element of the given edition; otherwise the same as edition - * @return a label of a node in the edition tree viewer - * @since 2.0 - */ - protected String getShortEditionLabel(ITypedElement edition, ITypedElement item, Date date) { - String format= null; - if (edition instanceof ResourceNode) - format= Utilities.getString(fBundle, "workspaceTreeFormat", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "treeFormat", null); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - String ds= DateFormat.getTimeInstance().format(date); - return MessageFormat.format(format, new Object[] { ds }); - } - - /** - * Returns an image for identifying the edition side of a compare viewer. - * This implementation extracts the value for the key "editionLabel" from the resource bundle - * and passes it as the format argument to <code>MessageFormat.format</code>. - * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string) - * is the formatted modification date of the given input element. - * <p> - * Subclasses may override to create their own label. - * </p> - * - * @param selectedEdition the selected edition for which a label must be returned - * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given selectedEdition; otherwise the same as selectedEdition - * @return a label the edition side of a compare viewer - * @since 2.0 - */ - protected Image getEditionImage(ITypedElement selectedEdition, ITypedElement item) { - if (selectedEdition instanceof ResourceNode) - return selectedEdition.getImage(); - if (selectedEdition instanceof HistoryItem) - return fTimeImage; - return null; - } - - /* (non Javadoc) - * Creates SWT control tree. - */ - protected synchronized Control createDialogArea(Composite parent2) { - - Composite parent= (Composite) super.createDialogArea(parent2); - - getShell().setText(Utilities.getString(fBundle, "title")); //$NON-NLS-1$ - - Splitter vsplitter= new Splitter(parent, SWT.VERTICAL); - vsplitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL - | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); - - vsplitter.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fDateImage != null) - fDateImage.dispose(); - if (fTimeImage != null) - fTimeImage.dispose(); - } - } - ); - - if (fAddMode) { - // we need two panes: the left for the elements, the right one for the editions - Splitter hsplitter= new Splitter(vsplitter, SWT.HORIZONTAL); - - fMemberPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT); - fMemberPane.setText(Utilities.getString(fBundle, "memberPaneTitle")); //$NON-NLS-1$ - - int flags= SWT.H_SCROLL + SWT.V_SCROLL; - if (fMultiSelect) - flags|= SWT.CHECK; - fMemberTable= new Table(fMemberPane, flags); - fMemberTable.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (e.detail == SWT.CHECK) { - if (e.item instanceof TableItem) { - TableItem ti= (TableItem) e.item; - Object data= ti.getData(); - if (ti.getChecked()) - fArrayList.add(data); - else - fArrayList.remove(data); - - if (fCommitButton != null) - fCommitButton.setEnabled(fArrayList.size() > 0); - - fMemberTable.setSelection(new TableItem[] { ti }); - } - } - handleMemberSelect(e.item); - } - } - ); - fMemberPane.setContent(fMemberTable); - fMemberTable.setFocus(); - - fEditionPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT); - } else { - if (fStructureCompare) { - // we need two panes: the left for the elements, the right one for the structured diff - Splitter hsplitter= new Splitter(vsplitter, SWT.HORIZONTAL); - - fEditionPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT); - fStructuredComparePane= new CompareViewerSwitchingPane(hsplitter, SWT.BORDER | SWT.FLAT, true) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - if (input instanceof ICompareInput) - return CompareUIPlugin.findStructureViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration); - return null; - } - }; - fStructuredComparePane.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - feedInput2(e.getSelection()); - } - } - ); - } else { - // only a single pane showing the editions - fEditionPane= new CompareViewerPane(vsplitter, SWT.BORDER | SWT.FLAT); - } - if (fTitleArg == null) - fTitleArg= fTargetPair.getItem().getName(); - String titleFormat= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$ - String title= MessageFormat.format(titleFormat, new String[] { fTitleArg }); - fEditionPane.setText(title); - if (fTitleImage != null) - fEditionPane.setImage(fTitleImage); - } - - fEditionTree= new Tree(fEditionPane, SWT.H_SCROLL + SWT.V_SCROLL); - fEditionTree.addSelectionListener( - new SelectionAdapter() { -// public void widgetDefaultSelected(SelectionEvent e) { -// handleDefaultSelected(); -// } - public void widgetSelected(SelectionEvent e) { - feedInput(e.item); - } - } - ); - fEditionPane.setContent(fEditionTree); - - // now start the thread (and forget about it) - if (fThread != null) { - fThread.start(); - fThread= null; - } - - fContentPane= new CompareViewerSwitchingPane(vsplitter, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - return CompareUIPlugin.findContentViewer(oldViewer, input, this, fCompareConfiguration); - } - }; - vsplitter.setWeights(new int[] { 30, 70 }); - - applyDialogFont(parent); - return parent; - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - String buttonLabel= Utilities.getString(fBundle, "buttonLabel", IDialogConstants.OK_LABEL); //$NON-NLS-1$ - if (fCompareMode) { - // only a 'Done' button - createButton(parent, IDialogConstants.CANCEL_ID, buttonLabel, false); - } else { - // a 'Cancel' and a 'Add/Replace' button - fCommitButton= createButton(parent, IDialogConstants.OK_ID, buttonLabel, true); - fCommitButton.setEnabled(false); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - } - - /** - * Overidden to disable dismiss on double click in compare mode. - * @since 2.0 - */ - protected void okPressed() { - if (fCompareMode) - ; // don't dismiss dialog - else - super.okPressed(); - } - - //---- private stuff ---------------------------------------------------------------------------------------- - - /** - * Asynchroneously sends a Pair (or null) to the UI thread. - */ - private void sendPair(final Pair pair) { - if (fEditionTree != null && !fEditionTree.isDisposed()) { - Display display= fEditionTree.getDisplay(); - display.asyncExec( - new Runnable() { - public void run() { - addMemberEdition(pair); - } - } - ); - } - } - - private static void internalSort(IModificationDate[] keys, int left, int right) { - - int original_left= left; - int original_right= right; - - IModificationDate mid= keys[(left + right) / 2]; - do { - while (keys[left].getModificationDate() > mid.getModificationDate()) - left++; - - while (mid.getModificationDate() > keys[right].getModificationDate()) - right--; - - if (left <= right) { - IModificationDate tmp= keys[left]; - keys[left]= keys[right]; - keys[right]= tmp; - left++; - right--; - } - } while (left <= right); - - if (original_left < right) - internalSort(keys, original_left, right); - - if (left < original_right) - internalSort(keys, left, original_right); - } - - /** - * Adds the given Pair to the member editions. - * If HIDE_IDENTICAL is true the new Pair is only added if its contents - * is different from the preceeding Pair. - * If the argument is <code>null</code> the message "No Editions found" is shown - * in the member or edition viewer. - */ - private void addMemberEdition(Pair pair) { - - if (pair == null) { // end of list of pairs - if (fMemberTable != null) { - if (!fMemberTable.isDisposed() && fMemberTable.getItemCount() == 0) { - if (fMultiSelect) { - fMemberTable.dispose(); - fMemberTable= new Table(fMemberPane, SWT.NONE); - fMemberPane.setContent(fMemberTable); - } - TableItem ti= new TableItem(fMemberTable, SWT.NONE); - ti.setText(Utilities.getString(fBundle, "noAdditionalMembersMessage")); //$NON-NLS-1$ - } - return; - } - if (fEditionTree != null && !fEditionTree.isDisposed() && fEditionTree.getItemCount() == 0) { - TreeItem ti= new TreeItem(fEditionTree, SWT.NONE); - ti.setText(Utilities.getString(fBundle, "notFoundInLocalHistoryMessage")); //$NON-NLS-1$ - } - return; - } - - if (fMemberEditions == null) - fMemberEditions= new HashMap(); - if (fMultiSelect && fMemberSelection == null) - fMemberSelection= new HashMap(); - - ITypedElement item= pair.getItem(); - List editions= (List) fMemberEditions.get(item); - if (editions == null) { - editions= new ArrayList(); - fMemberEditions.put(item, editions); - if (fMemberTable != null && !fMemberTable.isDisposed()) { - ITypedElement te= (ITypedElement)item; - String name= te.getName(); - - // find position - TableItem[] items= fMemberTable.getItems(); - int where= items.length; - for (int i= 0; i < where; i++) { - String n= items[i].getText(); - if (n.compareTo(name) > 0) { - where= i; - break; - } - } - - TableItem ti= new TableItem(fMemberTable, where, SWT.NULL); - ti.setImage(te.getImage()); - ti.setText(name); - ti.setData(editions); - } - } - if (fHideIdentical) { - Pair last= fTargetPair; - int size= editions.size(); - if (size > 0) - last= (Pair) editions.get(size-1); - if (last != null && last.equals(pair)) - return; // don't add since the new one is equal to old - } - editions.add(pair); - - if (!fAddMode || editions == fCurrentEditions) - addEdition(pair); - } - - /** - * Returns the number of s since Jan 1st, 1970. - * The given date is converted to GMT and daylight saving is taken into account too. - */ - private long dayNumber(long date) { - int ONE_DAY_MS= 24*60*60 * 1000; // one day in milli seconds - - Calendar calendar= Calendar.getInstance(); - long localTimeOffset= calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET); - - return (date + localTimeOffset) / ONE_DAY_MS; - } - - /** - * Adds the given Pair to the edition tree. - * It takes care of creating tree nodes for different dates. - */ - private void addEdition(Pair pair) { - if (fEditionTree == null || fEditionTree.isDisposed()) - return; - - // find last day - TreeItem[] days= fEditionTree.getItems(); - TreeItem lastDay= null; - if (days.length > 0) - lastDay= days[days.length-1]; - - boolean first= lastDay == null; - - ITypedElement edition= pair.getEdition(); - ITypedElement item= pair.getItem(); - - long ldate= ((IModificationDate)edition).getModificationDate(); - long day= dayNumber(ldate); - Date date= new Date(ldate); - if (lastDay == null || day != dayNumber(((Date)lastDay.getData()).getTime())) { - lastDay= new TreeItem(fEditionTree, SWT.NONE); - lastDay.setImage(fDateImage); - String df= DateFormat.getDateInstance().format(date); - long today= dayNumber(System.currentTimeMillis()); - - String formatKey; - if (day == today) - formatKey= "todayFormat"; //$NON-NLS-1$ - else if (day == today-1) - formatKey= "yesterdayFormat"; //$NON-NLS-1$ - else - formatKey= "dayFormat"; //$NON-NLS-1$ - String pattern= Utilities.getString(fBundle, formatKey); - if (pattern != null) - df= MessageFormat.format(pattern, new String[] { df }); - lastDay.setText(df); - lastDay.setData(date); - } - TreeItem ti= new TreeItem(lastDay, SWT.NONE); - ti.setImage(getEditionImage(edition, item)); - - String s= getShortEditionLabel(edition, item, date); - if (pair.fHasError) { - String pattern= Utilities.getString(fBundle, "parseErrorFormat"); //$NON-NLS-1$ - s= MessageFormat.format(pattern, new String[] { s } ); - } - ti.setText(s); - - ti.setData(pair); - - // determine selected TreeItem - TreeItem selection= first ? ti : null; - if (fMemberSelection != null) { - Object selected= fMemberSelection.get(fCurrentEditions); - if (selected != null) { - if (selected == pair.getItem()) - selection= ti; - else - selection= null; - } - } - if (selection != null) { - fEditionTree.setSelection(new TreeItem[] { selection }); - if (!fAddMode) - fEditionTree.setFocus(); - feedInput(selection); - } - - if (first) // expand first node - lastDay.setExpanded(true); - } - - /** - * Feeds selection from member viewer to edition viewer. - */ - private void handleMemberSelect(Widget w) { - Object data= w.getData(); - if (data instanceof List) { - List editions= (List) data; - if (editions != fCurrentEditions) { - fCurrentEditions= editions; - fEditionTree.removeAll(); - - String pattern= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$ - String title= MessageFormat.format(pattern, new Object[] { ((Item)w).getText() }); - fEditionPane.setText(title); - - Iterator iter= editions.iterator(); - while (iter.hasNext()) { - Object item= iter.next(); - if (item instanceof Pair) - addEdition((Pair) item); - } - } - } - } - - private void setInput(Object input) { - if (!fCompare && input instanceof ICompareInput) { - ICompareInput ci= (ICompareInput) input; - if (fTargetIsRight) - input= ci.getLeft(); - else - input= ci.getRight(); - } - fContentPane.setInput(input); - if (fStructuredComparePane != null) - fStructuredComparePane.setInput(input); - } - - /* - * Feeds selection from edition viewer to content (and structure) viewer. - */ - private void feedInput(Widget w) { - Object input= w.getData(); - boolean isOK= false; - if (input instanceof Pair) { - Pair pair= (Pair) input; - fSelectedItem= pair.getItem(); - isOK= !pair.fHasError; - - ITypedElement edition= pair.getEdition(); - String editionLabel= getEditionLabel(edition, fSelectedItem); - Image editionImage= getEditionImage(edition, fSelectedItem); - - if (fAddMode) { - if (fMemberSelection != null) - fMemberSelection.put(fCurrentEditions, fSelectedItem); - setInput(fSelectedItem); - fContentPane.setText(editionLabel); - fContentPane.setImage(editionImage); - } else { - if (fTargetIsRight) { - fCompareConfiguration.setLeftLabel(editionLabel); - fCompareConfiguration.setLeftImage(editionImage); - setInput(new DiffNode(fSelectedItem, fTargetPair.getItem())); - } else { - fCompareConfiguration.setRightLabel(editionLabel); - fCompareConfiguration.setRightImage(editionImage); - setInput(new DiffNode(fTargetPair.getItem(), fSelectedItem)); - } - } - } else { - fSelectedItem= null; - setInput(null); - } - if (fCommitButton != null) { - if (fMultiSelect) - fCommitButton.setEnabled(isOK && fSelectedItem != null && fArrayList.size() > 0); - else - fCommitButton.setEnabled(isOK && fSelectedItem != null && fTargetPair.getItem() != fSelectedItem); - } - } - - /* - * Feeds selection from structure viewer to content viewer. - */ - private void feedInput2(ISelection sel) { - if (sel instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection) sel; - if (ss.size() == 1) - fContentPane.setInput(ss.getFirstElement()); - } - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java deleted file mode 100644 index cc521e14e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.InputStream; -import java.io.BufferedInputStream; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.core.resources.IFileState; -import org.eclipse.core.runtime.CoreException; - -/** - * A combination <code>IFileState</code> and <code>ITypedElement</code> that can be used as - * an input to a compare viewer or other places where an <code>IStreamContentAccessor</code> - * is needed. - * <p> - * <p> - * Clients may instantiate this class; it is not intended to be subclassed. - * </p> - */ -public class HistoryItem implements IStreamContentAccessor, ITypedElement, IModificationDate { - - private ITypedElement fBase; - private IFileState fFileState; - - /** - * Creates a <code>HistoryItem</code> object which combines the given <code>IFileState</code> - * and <code>ITypedElement</code> into an object - * which is suitable as input for a compare viewer or <code>ReplaceWithEditionDialog</code>. - * - * @param base the implementation of the <code>ITypedElement</code> interface delegates to this base <code>ITypedElement</code> - * @param fileState the <code>IFileState</code> from which the streamable contents and the modification time is derived from - */ - public HistoryItem(ITypedElement base, IFileState fileState) { - fBase= base; - fFileState= fileState; - } - - /* (non-Javadoc) - * see ITypedElement.getName - */ - public String getName() { - return fBase.getName(); - } - - /* (non-Javadoc) - * see ITypedElement.getImage - */ - public Image getImage() { - return fBase.getImage(); - } - - /* (non-Javadoc) - * see ITypedElement.getType - */ - public String getType() { - return fBase.getType(); - } - - /* (non-Javadoc) - * see IModificationDate.getModificationDate - */ - public long getModificationDate() { - return fFileState.getModificationTime(); - } - - /* (non-Javadoc) - * see IStreamContentAccessor.getContents - */ - public InputStream getContents() throws CoreException { - return new BufferedInputStream(fFileState.getContents()); - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java deleted file mode 100644 index 9aab4f126..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -/** - * An <code>IContentChangeListener</code> is informed about content changes of a - * <code>IContentChangeNotifier</code>. - * <p> - * Clients may implement this interface. - * </p> - * - * @see IContentChangeNotifier - */ -public interface IContentChangeListener { - - /** - * Called whenever the content of the given source has changed. - * - * @param source the source whose contents has changed - */ - void contentChanged(IContentChangeNotifier source); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java deleted file mode 100644 index fba34d2e6..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -/** - * Interface common to all objects that provide a means for registering - * for content change notification. - * <p> - * Clients may implement this interface. - * </p> - * - * @see IContentChangeListener - */ -public interface IContentChangeNotifier { - - /** - * Adds a content change listener to this notifier. - * Has no effect if an identical listener is already registered. - * - * @param listener a content changed listener - */ - void addContentChangeListener(IContentChangeListener listener); - - /** - * Removes the given content changed listener from this notifier. - * Has no effect if the listener is not registered. - * - * @param listener a content changed listener - */ - void removeContentChangeListener(IContentChangeListener listener); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java deleted file mode 100644 index 44fdc1c7f..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -/** - * Common interface for objects with editable contents. - * Typically it is implemented by objects that also implement - * the <code>IStreamContentAccessor</code> interface. - * <p> - * Clients may implement this interface. - * <p> - * Note that implementing <code>IEditableContent</code> does not - * automatically mean that it is editable. An object is only editable if - * it implements <code>IEditableContent</code> and the <code>isEditable</code> method returns <code>true</code>. - * - * @see IStreamContentAccessor - */ -public interface IEditableContent { - - /** - * Returns <code>true</code> if this object can be modified. - * If it returns <code>false</code> the other methods of this API must not be called. - * - * @return <code>true</code> if this object can be modified - */ - boolean isEditable(); - - /** - * Replaces the current content with the given new bytes. - * - * @param newContent this new contents replaces the old contents - */ - void setContent(byte[] newContent); - - /** - * This method is called on a parent to add or remove a child, - * or to copy the contents of a child. - * - * What to do is encoded in the two arguments as follows: - * <TABLE> - * <TR> - * <TD>add:</TD> - * <TD>child == null</TD> - * <TD>other != null</TD> - * </TR> - * <TR> - * <TD>remove:</TD> - * <TD>child != null</TD> - * <TD>other == null</TD> - * </TR> - * <TR> - * <TD>copy:</TD> - * <TD>child != null</TD> - * <TD>other != null</TD> - * </TR> - * </TABLE> - */ - ITypedElement replace(ITypedElement child, ITypedElement other); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java deleted file mode 100644 index 5e8def836..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -/** - * Common interface for objects with a modification date. The modification date - * can be used in the UI to give the user a general idea of how old an object is. - * <p> - * Clients may implement this interface. - * </p> - */ -public interface IModificationDate { - - /** - * Returns the modification time of this object. - * <p> - * Note that this value should only be used to give the user a general idea of how - * old the object is. - * - * @return the time of last modification, in milliseconds since January 1, 1970, 00:00:00 GMT - */ - long getModificationDate(); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java deleted file mode 100644 index 85f4f3485..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.jface.util.IPropertyChangeListener; - -/** - * Interface common to all objects that provide a means for registering - * for property change notification. - * <p> - * Clients may implement this interface. - * </p> - * - * @see org.eclipse.jface.util.IPropertyChangeListener - */ -public interface IPropertyChangeNotifier { - - /** - * Adds a listener for property changes to this notifier. - * Has no effect if an identical listener is already registered. - * - * @param listener a property change listener - */ - void addPropertyChangeListener(IPropertyChangeListener listener); - - /** - * Removes the given content change listener from this notifier. - * Has no effect if the identical listener is not registered. - * - * @param listener a property change listener - */ - void removePropertyChangeListener(IPropertyChangeListener listener); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java deleted file mode 100644 index f17b3184d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.InputStream; - -import org.eclipse.core.runtime.CoreException; - -/** - * An <code>IStreamContentAccessor</code> object represents a set of bytes which can be - * accessed by means of a stream. - * <p> - * Clients may implement this interface, or use the standard implementation, - * <code>BufferedContent</code>. - * - * @see BufferedContent - */ -public interface IStreamContentAccessor { - /** - * Returns an open <code>InputStream</code> for this object which can be used to retrieve the object's content. - * The client is responsible for closing the stream when finished. - * Returns <code>null</code> if this object has no streamable contents. - * - * @return an input stream containing the contents of this object - * @exception CoreException if the contents of this object could not be accessed - */ - InputStream getContents() throws CoreException; -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java deleted file mode 100644 index 15dd45c50..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.swt.graphics.Image; - -/** - * Interface for getting the name, image, and type for an object. - * <p> - * These methods are typically used to present an input object in the compare UI - * (<code>getName</code> and <code>getImage</code>) - * and for finding a viewer for a given input type (<code>getType</code>). - * <p> - * Clients may implement this interface. - */ -public interface ITypedElement { - - /** - * Type for a folder input (value <code>"FOLDER"</code>). - * Folders are comparison elements that have no contents, only a name and children. - */ - public static final String FOLDER_TYPE= "FOLDER"; //$NON-NLS-1$ - - /** - * Type for an element whose actual type is text (value <code>"txt"</code>). - */ - public static final String TEXT_TYPE= "txt"; //$NON-NLS-1$ - - /** - * Type for an element whose actual type could not - * be determined. (value <code>"???"</code>). - */ - public static final String UNKNOWN_TYPE= "???"; //$NON-NLS-1$ - - /** - * Returns the name of this object. - * The name is used when displaying this object in the UI. - * - * @return the name of this object - */ - String getName(); - - /** - * Returns an image for this object. - * This image is used when displaying this object in the UI. - * - * @return the image of this object or <code>null</code> if this type of input has no image - */ - Image getImage(); - - /** - * Returns the type of this object. For objects with a file name - * this is typically the file extension. For folders its the constant - * <code>FOLDER_TYPE</code>. - * The type is used for determining a suitable viewer for this object. - * - * @return the type of this object - */ - String getType(); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java deleted file mode 100644 index 918ed6bb4..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -/** - * A factory object for <code>Viewer</code>. - * <p> - * This interface is only required when creating a <code>Viewer</code> from a plugin.xml file. - * Since <code>Viewer</code>s have no default constructor they cannot be - * instantiated directly with <code>Class.forName</code>. - */ -public interface IViewerCreator { - - /** - * Creates a new viewer under the given SWT parent control. - * - * @param parent the SWT parent control under which to create the viewer's SWT control - * @param config a compare configuration the newly created viewer might want to use - * @return a new viewer - */ - Viewer createViewer(Composite parent, CompareConfiguration config); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java deleted file mode 100644 index b0fac3450..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.util.ResourceBundle; -import org.eclipse.jface.action.Action; - -import org.eclipse.compare.internal.CompareNavigator; -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.internal.Utilities; - -/** - * A <code>NavigationAction</code> is used to navigate through the individual - * differences of a <code>CompareEditorInput</code>. - * <p> - * Clients may instantiate this class; it is not intended to be subclassed. - * </p> - * @since 2.0 - */ -public class NavigationAction extends Action { - - private boolean fNext; - private CompareEditorInput fCompareEditorInput; - - - /** - * Creates a <code>NavigationAction</code>. - * - * @param next if <code>true</code> action goes to the next difference; otherwise to the previous difference. - */ - public NavigationAction(boolean next) { - this(CompareUIPlugin.getResourceBundle(), next); - } - - /** - * Creates a <code>NavigationAction</code> that initializes its attributes - * from the given <code>ResourceBundle</code>. - * - * @param bundle is used to initialize the action - * @param next if <code>true</code> action goes to the next difference; otherwise to the previous difference. - */ - public NavigationAction(ResourceBundle bundle, boolean next) { - Utilities.initAction(this, bundle, next ? "action.Next." : "action.Previous."); //$NON-NLS-2$ //$NON-NLS-1$ - fNext= next; - } - - public void run() { - if (fCompareEditorInput != null) { - Object adapter= fCompareEditorInput.getAdapter(CompareNavigator.class); - if (adapter instanceof CompareNavigator) - ((CompareNavigator)adapter).selectChange(fNext); - } - } - - /** - * Sets the <code>CompareEditorInput</code> on which this action operates. - * - * @param input the <code>CompareEditorInput</code> on which this action operates; if <code>null</code> action does nothing - */ - public void setCompareEditorInput(CompareEditorInput input) { - fCompareEditorInput= input; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java deleted file mode 100644 index 31c367b19..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java +++ /dev/null @@ -1,196 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.*; -import java.util.ArrayList; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.compare.structuremergeviewer.IStructureComparator; - -/** - * A <code>ResourceNode</code> wrappers an <code>IResources</code> so that it can be used - * as input for the differencing engine (interfaces <code>IStructureComparator</code> and <code>ITypedElement</code>) - * and the <code>ReplaceWithEditionDialog</code> (interfaces <code>ITypedElement</code> and <code>IModificationDate</code>). - * <p> - * Clients may instantiate this class; it is not intended to be subclassed. - * </p> - * - * @see EditionSelectionDialog - */ -public class ResourceNode extends BufferedContent - implements IStructureComparator, ITypedElement, IEditableContent, IModificationDate { - - private IResource fResource; - private ArrayList fChildren; - - - /** - * Creates a <code>ResourceNode</code> for the given resource. - * - * @param resource the resource - */ - public ResourceNode(IResource resource) { - fResource= resource; - Assert.isNotNull(resource); - } - - /** - * Returns the corresponding resource for this object. - * - * @return the corresponding resource - */ - public IResource getResource() { - return fResource; - } - - /* (non Javadoc) - * see IStreamContentAccessor.getContents - */ - public InputStream getContents() throws CoreException { - if (fResource instanceof IStorage) - return super.getContents(); - return null; - } - - /* (non Javadoc) - * see IModificationDate.getModificationDate - */ - public long getModificationDate() { - IPath path= fResource.getLocation(); - File file= path.toFile(); - return file.lastModified(); - } - - /* (non Javadoc) - * see ITypedElement.getName - */ - public String getName() { - if (fResource != null) - return fResource.getName(); - return null; - } - - /* (non Javadoc) - * see ITypedElement.getType - */ - public String getType() { - if (fResource instanceof IContainer) - return ITypedElement.FOLDER_TYPE; - if (fResource != null) { - String s= fResource.getFileExtension(); - if (s != null) - return s; - } - return ITypedElement.UNKNOWN_TYPE; - } - - /* (non Javadoc) - * see ITypedElement.getImage - */ - public Image getImage() { - return CompareUI.getImage(fResource); - } - - /** - * Returns <code>true</code> if the other object is of type <code>ITypedElement</code> - * and their names are identical. The content is not considered. - */ - /* (non Javadoc) - * see IStructureComparator.equals - */ - public boolean equals(Object other) { - if (other instanceof ITypedElement) { - String otherName= ((ITypedElement)other).getName(); - return getName().equals(otherName); - } - return super.equals(other); - } - - /** - * Returns the hash code of the name. - */ - /* (non Javadoc) - * see IStructureComparator.hashCode - */ - public int hashCode() { - return getName().hashCode(); - } - - /* (non Javadoc) - * see IStructureComparator.getChildren - */ - public Object[] getChildren() { - if (fChildren == null) { - fChildren= new ArrayList(); - if (fResource instanceof IContainer) { - try { - IResource members[]= ((IContainer)fResource).members(); - for (int i= 0; i < members.length; i++) { - IStructureComparator child= createChild(members[i]); - if (child != null) - fChildren.add(child); - } - } catch (CoreException ex) { - } - } - } - return fChildren.toArray(); - } - - /** - * This hook method is called from <code>getChildren</code> once for every - * member of a container resource. This implementation - * creates a new <code>ResourceNode</code> for the given child resource. - * Clients may override this method to create a different type of - * <code>IStructureComparator</code> or to filter children by returning <code>null</code>. - * - * @param child the child resource for which a <code>IStructureComparator</code> must be returned - * @return a <code>ResourceNode</code> for the given child or <code>null</code> - */ - protected IStructureComparator createChild(IResource child) { - return new ResourceNode(child); - } - - /** - * Returns an open stream if the corresponding resource implements the - * <code>IStorage</code> interface. Otherwise the value <code>null</code> is returned. - * - * @return a buffered input stream containing the contents of this storage - * @exception CoreException if the contents of this storage could not be accessed - */ - protected InputStream createStream() throws CoreException { - if (fResource instanceof IStorage) - return new BufferedInputStream(((IStorage)fResource).getContents()); - return null; - } - - /* (non Javadoc) - * see IEditableContent.isEditable - */ - public boolean isEditable() { - return true; - } - - /* (non Javadoc) - * see IEditableContent.replace - */ - public ITypedElement replace(ITypedElement child, ITypedElement other) { - return child; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java deleted file mode 100644 index 7e63053ab..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.custom.SashForm; - -/** - * The Splitter adds support for nesting to a SashForm. - * <P> - * If Splitters are nested directly: - * <UL> - * <LI>changing the visibility of a child may propagate upward to the parent Splitter if the child - * is the last child to become invisible or the first to become visible.</LI> - * <LI>maximizing a child makes it as large as the topmost enclosing Splitter</LI> - * </UL> - * - * @since 2.1 - */ -public class Splitter extends SashForm { - - private static final String VISIBILITY= "org.eclipse.compare.internal.visibility"; //$NON-NLS-1$ - - /** - * Constructs a new instance of this class given its parent - * and a style value describing its behavior and appearance. - * <p> - * The style value is either one of the style constants defined in - * class <code>SWT</code> which is applicable to instances of this - * class, or must be built by <em>bitwise OR</em>'ing together - * (that is, using the <code>int</code> "|" operator) two or more - * of those <code>SWT</code> style constants. The class description - * lists the style constants that are applicable to the class. - * Style bits are also inherited from superclasses. - * </p> - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - */ - public Splitter(Composite parent, int style) { - super(parent, style); - } - - /** - * Sets the visibility of the given child in this Splitter. If this change - * affects the visibility state of the whole Splitter, and if the Splitter - * is directly nested in one or more Splitters, this method recursively - * propagates the new state upward. - * - * @param child the child control for which the visibility is changed - * @param visible the new visibility state - */ - public void setVisible(Control child, boolean visible) { - - boolean wasEmpty= isEmpty(); - - child.setVisible(visible); - child.setData(VISIBILITY, new Boolean(visible)); - - if (wasEmpty != isEmpty()) { - // recursively walk up - Composite parent= getParent(); - if (parent instanceof Splitter) { - Splitter sp= (Splitter) parent; - sp.setVisible(this, visible); - sp.layout(); - } - } else { - layout(); - } - } - - /* (non-Javadoc) - * Recursively calls setMaximizedControl for all direct parents that are - * itself Splitters. - */ - public void setMaximizedControl(Control control) { - if (control == null || control == getMaximizedControl()) - super.setMaximizedControl(null); - else - super.setMaximizedControl(control); - - // recursively walk upward - Composite parent= getParent(); - if (parent instanceof Splitter) - ((Splitter) parent).setMaximizedControl(this); - else - layout(true); - } - - /* (non-Javadoc) - * Returns true if Splitter has no children or if all children are invisible. - */ - private boolean isEmpty() { - Control[] controls= getChildren(); - for (int i= 0; i < controls.length; i++) - if (isVisible(controls[i])) - return false; - return true; - } - - /* (non-Javadoc) - * Returns the visibility state of the given child control. If the - * control is a Sash, this method always returns false. - */ - private boolean isVisible(Control child) { - if (child instanceof Sash) - return false; - Object data= child.getData(VISIBILITY); - if (data instanceof Boolean) - return ((Boolean)data).booleanValue(); - return true; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java deleted file mode 100644 index f497f18c4..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java +++ /dev/null @@ -1,314 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare; - -import java.io.*; -import java.util.Iterator; -import java.util.HashMap; -import java.util.zip.*; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.compare.internal.Utilities; - - -/** - * This implementation of the <code>IStructureCreator</code> interface - * makes the contents of a zip archive available as a - * hierarchical structure of <code>IStructureComparator</code>s. - * <p> - * It is used when comparing the internal structure of a zip archive. - * - * @since 2.0 - */ -public class ZipFileStructureCreator implements IStructureCreator { - - /** - * Common base class for ZipFolder and ZipFile - */ - static abstract class ZipResource implements IStructureComparator, ITypedElement { - - private String fName; - - ZipResource(String name) { - fName= name; - } - - public String getName() { - return fName; - } - - public Image getImage() { - return CompareUI.getImage(getType()); - } - - /** - * Returns true if other is ITypedElement and names are equal. - * @see IComparator#equals - */ - public boolean equals(Object other) { - if (other instanceof ITypedElement) - return fName.equals(((ITypedElement) other).getName()); - return super.equals(other); - } - - public int hashCode() { - return fName.hashCode(); - } - } - - static class ZipFolder extends ZipResource { - - private HashMap fChildren= new HashMap(10); - - ZipFolder(String name) { - super(name); - } - - public String getType() { - return ITypedElement.FOLDER_TYPE; - } - - public Object[] getChildren() { - Object[] children= new Object[fChildren.size()]; - Iterator iter= fChildren.values().iterator(); - for (int i= 0; iter.hasNext(); i++) - children[i]= iter.next(); - return children; - } - - ZipFile createContainer(String path) { - String entry= path; - int pos= path.indexOf('/'); - if (pos < 0) - pos= path.indexOf('\\'); - if (pos >= 0) { - entry= path.substring(0, pos); - path= path.substring(pos + 1); - } else if (entry.length() > 0) { - ZipFile ze= new ZipFile(entry); - fChildren.put(entry, ze); - return ze; - } else - return null; - - ZipFolder folder= null; - if (fChildren != null) { - Object o= fChildren.get(entry); - if (o instanceof ZipFolder) - folder= (ZipFolder) o; - } - - if (folder == null) { - folder= new ZipFolder(entry); - fChildren.put(entry, folder); - } - - return folder.createContainer(path); - } - } - - static class ZipFile extends ZipResource implements IStreamContentAccessor { - - private byte[] fContents; - - ZipFile(String name) { - super(name); - } - - public String getType() { - String s= this.getName(); - int pos= s.lastIndexOf('.'); - if (pos >= 0) - return s.substring(pos + 1); - return ITypedElement.UNKNOWN_TYPE; - } - - public Object[] getChildren() { - return null; - } - - public InputStream getContents() { - if (fContents == null) - fContents= new byte[0]; - return new ByteArrayInputStream(fContents); - } - - byte[] getBytes() { - return fContents; - } - - void setBytes(byte[] buffer) { - fContents= buffer; - } - - void appendBytes(byte[] buffer, int length) { - if (length > 0) { - int oldLen= 0; - if (fContents != null) - oldLen= fContents.length; - byte[] newBuf= new byte[oldLen + length]; - if (oldLen > 0) - System.arraycopy(fContents, 0, newBuf, 0, oldLen); - System.arraycopy(buffer, 0, newBuf, oldLen, length); - fContents= newBuf; - } - } - } - - private String fTitle; - - /** - * Create a new ZipFileStructureCreator. - */ - public ZipFileStructureCreator() { - this(Utilities.getString("ZipStructureCreator.name")); //$NON-NLS-1$ - } - - /** - * Create a new ZipFileStructureCreator with the given title. - * The title is returned by the method <code>getName()</code>. - * @param title the title of this strcuture creator - */ - public ZipFileStructureCreator(String title) { - fTitle= title; - } - - public String getName() { - return fTitle; - } - - public IStructureComparator getStructure(Object input) { - - InputStream is= null; - - if (input instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) input; - try { - is= sca.getContents(); - } catch (CoreException ex) { - } - } - - if (is == null) - return null; - - ZipInputStream zip= new ZipInputStream(is); - ZipFolder root= new ZipFolder(""); //$NON-NLS-1$ - try { - for (;;) { - ZipEntry entry= zip.getNextEntry(); - if (entry == null) - break; - - ZipFile ze= root.createContainer(entry.getName()); - if (ze != null) { - int length= (int) entry.getSize(); - if (length >= 0) { - byte[] buffer= new byte[length]; - int offset= 0; - - do { - int n= zip.read(buffer, offset, length); - offset += n; - length -= n; - } while (length > 0); - - ze.setBytes(buffer); - } else { - byte[] buffer= new byte[1024]; - int n; - do { - n= zip.read(buffer, 0, 1024); - ze.appendBytes(buffer, n); - } while (n >= 0); - } - } - zip.closeEntry(); - } - } catch (IOException ex) { - return null; - } finally { - try { - zip.close(); - } catch (IOException ex) { - } - } - - if (root.fChildren.size() == 1) { - Iterator iter= root.fChildren.values().iterator(); - return (IStructureComparator) iter.next(); - } - return root; - } - - public String getContents(Object o, boolean ignoreWhitespace) { - if (o instanceof ZipFile) { - byte[] bytes= ((ZipFile)o).getBytes(); - if (bytes != null) - return new String(bytes); - return ""; //$NON-NLS-1$ - } - return null; - } - - /** - * Returns <code>false</code> since we cannot update a zip archive. - * @return <code>false</code> - */ - public boolean canSave() { - return false; - } - - /** - * Called whenever a copy operation has been performed on a tree node. - * This implementation throws an <code>AssertionFailedException</code> - * since we cannot update a zip archive. - * - * @param structure the node for which to save the new content - * @param input the object from which the structure tree was created in <code>getStructure</code> - */ - public void save(IStructureComparator structure, Object input) { - Assert.isTrue(false); // Cannot update zip archive - } - - public IStructureComparator locate(Object path, Object source) { - return null; - } - - /** - * Returns <code>false</code> since this <code>IStructureCreator</code> - * cannot rewrite the diff tree in order to fold certain combinations of - * additons and deletions. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - * @return <code>false</code> - */ - public boolean canRewriteTree() { - return false; - } - - /** - * Empty implementation since this <code>IStructureCreator</code> - * cannot rewrite the diff tree in order to fold certain combinations of - * additons and deletions. - * <p> - * Note: this method is for internal use only. Clients should not call this method. - */ - public void rewriteTree(Differencer diff, IDiffContainer root) { - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java deleted file mode 100644 index e6e83c4db..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java +++ /dev/null @@ -1,978 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.compare.contentmergeviewer; - -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.ui.IKeyBindingService; -import org.eclipse.ui.IWorkbenchPartSite; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.jface.util.*; -import org.eclipse.jface.action.*; -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.viewers.ContentViewer; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ISelection; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.compare.internal.*; - -/** - * An abstract compare and merge viewer with two side-by-side content areas - * and an optional content area for the ancestor. The implementation makes no - * assumptions about the content type. - * <p> - * <code>ContentMergeViewer</code> - * <ul> - * <li>implements the overall layout and defines hooks so that subclasses - * can easily provide an implementation for a specific content type, - * <li>implements the UI for making the areas resizable, - * <li>has an action for controlling whether the ancestor area is visible or not, - * <li>has actions for copying one side of the input to the other side, - * <li>tracks the dirty state of the left and right sides and send out notification - * on state changes. - * </ul> - * A <code>ContentMergeViewer</code> accesses its - * model by means of a content provider which must implement the - * <code>IMergeViewerContentProvider</code> interface. - * </p> - * <p> - * Clients may wish to use the standard concrete subclass <code>TextMergeViewer</code>, - * or define their own subclass. - * - * @see IMergeViewerContentProvider - * @see TextMergeViewer - */ -public abstract class ContentMergeViewer extends ContentViewer - implements IPropertyChangeNotifier, ISavable { - - class SaveAction extends MergeViewerAction { - - SaveAction(boolean left) { - super(true, false, false); - Utilities.initAction(this, getResourceBundle(), "action.save."); //$NON-NLS-1$ - } - - public void run() { - saveContent(getInput()); - } - }; - - /** - * Property names. - */ - private static final String ANCESTOR_ENABLED= ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE; - - /* package */ static final int HORIZONTAL= 1; - /* package */ static final int VERTICAL= 2; - - static final double HSPLIT= 0.5; - static final double VSPLIT= 0.3; - - private class ContentMergeViewerLayout extends Layout { - - public Point computeSize(Composite c, int w, int h, boolean force) { - return new Point(100, 100); - } - - public void layout(Composite composite, boolean force) { - - // determine some derived sizes - int headerHeight= fLeftLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y; - Rectangle r= composite.getClientArea(); - - int centerWidth= getCenterWidth(); - int width1= (int)((r.width-centerWidth)*fHSplit); - int width2= r.width-width1-centerWidth; - - int height1= 0; - int height2= 0; - if (fAncestorEnabled && fShowAncestor) { - height1= (int)((r.height-(2*headerHeight))*fVSplit); - height2= r.height-(2*headerHeight)-height1; - } else { - height1= 0; - height2= r.height-headerHeight; - } - - int y= 0; - - if (fAncestorEnabled && fShowAncestor) { - fAncestorLabel.setBounds(0, y, r.width, headerHeight); - fAncestorLabel.setVisible(true); - y+= headerHeight; - handleResizeAncestor(0, y, r.width, height1); - y+= height1; - } else { - fAncestorLabel.setVisible(false); - handleResizeAncestor(0, 0, 0, 0); - } - - fLeftLabel.getSize(); // without this resizing would not always work - - if (centerWidth > 3) { - fLeftLabel.setBounds(0, y, width1+1, headerHeight); - fDirectionLabel.setVisible(true); - fDirectionLabel.setBounds(width1+1, y, centerWidth-1, headerHeight); - fRightLabel.setBounds(width1+centerWidth, y, width2, headerHeight); - } else { - fLeftLabel.setBounds(0, y, width1, headerHeight); - fDirectionLabel.setVisible(false); - fRightLabel.setBounds(width1, y, r.width-width1, headerHeight); - } - - y+= headerHeight; - - if (fCenter != null && !fCenter.isDisposed()) - fCenter.setBounds(width1, y, centerWidth, height2); - - handleResizeLeftRight(0, y, width1, centerWidth, width2, height2); - } - } - - class Resizer extends MouseAdapter implements MouseMoveListener { - - Control fControl; - int fX, fY; - int fWidth1, fWidth2; - int fHeight1, fHeight2; - int fDirection; - boolean fLiveResize; - boolean fIsDown; - - public Resizer(Control c, int dir) { - fDirection= dir; - fControl= c; - fLiveResize= !(fControl instanceof Sash); - fControl.addMouseListener(this); - fControl.addMouseMoveListener(this); - fControl.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - fControl= null; - } - } - ); - } - - public void mouseDoubleClick(MouseEvent e) { - if ((fDirection & HORIZONTAL) != 0) - fHSplit= HSPLIT; - if ((fDirection & VERTICAL) != 0) - fVSplit= VSPLIT; - fComposite.layout(true); - } - - public void mouseDown(MouseEvent e) { - Composite parent= fControl.getParent(); - - Point s= parent.getSize(); - Point as= fAncestorLabel.getSize(); - Point ys= fLeftLabel.getSize(); - Point ms= fRightLabel.getSize(); - - fWidth1= ys.x; - fWidth2= ms.x; - fHeight1= fLeftLabel.getLocation().y-as.y; - fHeight2= s.y-(fLeftLabel.getLocation().y+ys.y); - - fX= e.x; - fY= e.y; - fIsDown= true; - } - - public void mouseUp(MouseEvent e) { - fIsDown= false; - if (!fLiveResize) - resize(e); - } - - public void mouseMove(MouseEvent e) { - if (fIsDown && fLiveResize) - resize(e); - } - - private void resize(MouseEvent e) { - int dx= e.x-fX; - int dy= e.y-fY; - - int centerWidth= fCenter.getSize().x; - - if (fWidth1 + dx > centerWidth && fWidth2 - dx > centerWidth) { - fWidth1+= dx; - fWidth2-= dx; - if ((fDirection & HORIZONTAL) != 0) - fHSplit= (double)fWidth1/(double)(fWidth1+fWidth2); - } - if (fHeight1 + dy > centerWidth && fHeight2 - dy > centerWidth) { - fHeight1+= dy; - fHeight2-= dy; - if ((fDirection & VERTICAL) != 0) - fVSplit= (double)fHeight1/(double)(fHeight1+fHeight2); - } - - fComposite.layout(true); - fControl.getDisplay().update(); - } - }; - - /** Style bits for top level composite */ - private int fStyles; - private ResourceBundle fBundle; - private CompareConfiguration fCompareConfiguration; - private IPropertyChangeListener fPropertyChangeListener; - private ICompareInputChangeListener fCompareInputChangeListener; - private ListenerList fListenerList; - boolean fConfirmSave= true; - - private double fHSplit= HSPLIT; // width ratio of left and right panes - private double fVSplit= VSPLIT; // height ratio of ancestor and bottom panes - - private boolean fAncestorEnabled= true; // show ancestor in case of conflicts - /* package */ boolean fShowAncestor= false; // if current input has conflicts - private boolean fIsThreeWay= false; - private ActionContributionItem fAncestorItem; - - private Action fCopyLeftToRightAction; // copy from left to right - private Action fCopyRightToLeftAction; // copy from right to left - - MergeViewerAction fLeftSaveAction; - MergeViewerAction fRightSaveAction; - - private IKeyBindingService fKeyBindingService; - - // SWT widgets - /* package */ Composite fComposite; - private CLabel fAncestorLabel; - private CLabel fLeftLabel; - private CLabel fRightLabel; - /* package */ CLabel fDirectionLabel; - /* package */ Control fCenter; - - //---- SWT resources to be disposed - private Image fRightArrow; - private Image fLeftArrow; - private Image fBothArrow; - //---- end - - /** - * Creates a new content merge viewer and initializes with a resource bundle and a - * configuration. - * - * @param bundle the resource bundle - * @param cc the configuration object - */ - protected ContentMergeViewer(int style, ResourceBundle bundle, CompareConfiguration cc) { - fStyles= style; - fBundle= bundle; - - fAncestorEnabled= Utilities.getBoolean(cc, ANCESTOR_ENABLED, fAncestorEnabled); - fConfirmSave= Utilities.getBoolean(cc, CompareEditor.CONFIRM_SAVE_PROPERTY, fConfirmSave); - - setContentProvider(new MergeViewerContentProvider(cc)); - - fCompareInputChangeListener= new ICompareInputChangeListener() { - public void compareInputChanged(ICompareInput input) { - ContentMergeViewer.this.internalRefresh(input); - } - }; - - fCompareConfiguration= cc; - if (fCompareConfiguration != null) { - fPropertyChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - ContentMergeViewer.this.propertyChange(event); - } - }; - fCompareConfiguration.addPropertyChangeListener(fPropertyChangeListener); - } - - fLeftSaveAction= new SaveAction(true); - fLeftSaveAction.setEnabled(false); - fRightSaveAction= new SaveAction(false); - fRightSaveAction.setEnabled(false); - } - - //---- hooks --------------------- - - /** - * Returns the viewer's name. - * - * @return the viewer's name - */ - public String getTitle() { - return Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$ - } - - /** - * Creates the SWT controls for the ancestor, left, and right - * content areas of this compare viewer. - * Implementations typically hold onto the controls - * so that they can be initialized with the input objects in method - * <code>updateContent</code>. - * - * @param composite the container for the three areas - */ - abstract protected void createControls(Composite composite); - - /** - * Lays out the ancestor area of the compare viewer. - * It is called whenever the viewer is resized or when the sashes between - * the areas are moved to adjust the size of the areas. - * - * @param x the horizontal position of the ancestor area within its container - * @param y the vertical position of the ancestor area within its container - * @param width the width of the ancestor area - * @param height the height of the ancestor area - */ - abstract protected void handleResizeAncestor(int x, int y, int width, int height); - - /** - * Lays out the left and right areas of the compare viewer. - * It is called whenever the viewer is resized or when the sashes between - * the areas are moved to adjust the size of the areas. - * - * @param x the horizontal position of the left area within its container - * @param y the vertical position of the left and right area within its container - * @param leftWidth the width of the left area - * @param centerWidth the width of the gap between the left and right areas - * @param rightWidth the width of the right area - * @param height the height of the left and right areas - */ - abstract protected void handleResizeLeftRight(int x, int y, int leftWidth, int centerWidth, - int rightWidth, int height); - - /** - * Contributes items to the given <code>ToolBarManager</code>. - * It is called when this viewer is installed in its container and if the container - * has a <code>ToolBarManager</code>. - * The <code>ContentMergeViewer</code> implementation of this method does nothing. - * Subclasses may reimplement. - * - * @param toolBarManager the toolbar manager to contribute to - */ - protected void createToolItems(ToolBarManager toolBarManager) { - } - - /** - * Initializes the controls of the three content areas with the given input objects. - * - * @param ancestor the input for the ancestor area - * @param left the input for the left area - * @param right the input for the right area - */ - abstract protected void updateContent(Object ancestor, Object left, Object right); - - /** - * Copies the content of one side to the other side. - * Called from the (internal) actions for copying the sides of the viewer's input object. - * - * @param leftToRight if <code>true</code>, the left side is copied to the right side; - * if <code>false</code>, the right side is copied to the left side - */ - abstract protected void copy(boolean leftToRight); - - /** - * Returns the byte contents of the left or right side. If the viewer - * has no editable content <code>null</code> can be returned. - * - * @param left if <code>true</code>, the byte contents of the left area is returned; - * if <code>false</code>, the byte contents of the right area - * @return the content as an array of bytes, or <code>null</code> - */ - abstract protected byte[] getContents(boolean left); - - //---------------------------- - - /** - * Returns the resource bundle of this viewer. - * - * @return the resource bundle - */ - protected ResourceBundle getResourceBundle() { - return fBundle; - } - - /** - * Returns the compare configuration of this viewer, - * or <code>null</code> if this viewer does not yet have a configuration. - * - * @return the compare configuration, or <code>null</code> if none - */ - protected CompareConfiguration getCompareConfiguration() { - return fCompareConfiguration; - } - - /** - * The <code>ContentMergeViewer</code> implementation of this - * <code>ContentViewer</code> method - * checks to ensure that the content provider is an <code>IMergeViewerContentProvider</code>. - */ - public void setContentProvider(IContentProvider contentProvider) { - Assert.isTrue(contentProvider instanceof IMergeViewerContentProvider); - super.setContentProvider(contentProvider); - } - - /* package */ IMergeViewerContentProvider getMergeContentProvider() { - return (IMergeViewerContentProvider) getContentProvider(); - } - - /** - * The <code>ContentMergeViewer</code> implementation of this - * <code>Viewer</code> method returns the empty selection. Subclasses may override. - */ - public ISelection getSelection() { - return new ISelection() { - public boolean isEmpty() { - return true; - } - }; - } - - /** - * The <code>ContentMergeViewer</code> implementation of this - * <code>Viewer</code> method does nothing. Subclasses may reimplement. - */ - public void setSelection(ISelection s, boolean reveal) { - } - - /* package */ void propertyChange(PropertyChangeEvent event) { - - String key= event.getProperty(); - - if (key.equals(ANCESTOR_ENABLED)) { - fAncestorEnabled= Utilities.getBoolean(getCompareConfiguration(), ANCESTOR_ENABLED, fAncestorEnabled); - fComposite.layout(true); - return; - } - } - - void setAncestorVisibility(boolean visible, boolean enabled) { - if (fAncestorItem != null) { - Action action= (Action) fAncestorItem.getAction(); - if (action != null) { - action.setChecked(visible); - action.setEnabled(enabled); - } - } - if (fCompareConfiguration != null) - fCompareConfiguration.setProperty(ANCESTOR_ENABLED, new Boolean(visible)); - } - - //---- input - - /* package */ boolean isThreeWay() { - return fIsThreeWay; - } - - /** - * Internal hook method called when the input to this viewer is - * initially set or subsequently changed. - * <p> - * The <code>ContentMergeViewer</code> implementation of this <code>Viewer</code> - * method tries to save the old input by calling <code>doSave(...)</code> and - * then calls <code>internalRefresh(...)</code>. - * - * @param input the new input of this viewer, or <code>null</code> if there is no new input - * @param oldInput the old input element, or <code>null</code> if there was previously no input - */ - protected final void inputChanged(Object input, Object oldInput) { - - if (input != oldInput) - if (oldInput instanceof ICompareInput) - ((ICompareInput)oldInput).removeCompareInputChangeListener(fCompareInputChangeListener); - - boolean success= doSave(input, oldInput); - - if (input != oldInput) - if (input instanceof ICompareInput) - ((ICompareInput)input).addCompareInputChangeListener(fCompareInputChangeListener); - - if (success) { - setLeftDirty(false); - setRightDirty(false); - } - - if (input != oldInput) - internalRefresh(input); - } - - /** - * This method is called from the <code>Viewer</code> method <code>inputChanged</code> - * to save any unsaved changes of the old input. - * <p> - * The <code>ContentMergeViewer</code> implementation of this - * method calls <code>saveContent(...)</code>. If confirmation has been turned on - * with <code>setConfirmSave(true)</code>, a confirmation alert is posted before saving. - * </p> - * Clients can override this method and are free to decide whether - * they want to call the inherited method. - * @param newInput the new input of this viewer, or <code>null</code> if there is no new input - * @param oldInput the old input element, or <code>null</code> if there was previously no input - * @return <code>true</code> if saving was successful, or if the user didn't want to save (by pressing 'NO' in the confirmation dialog). - * @since 2.0 - */ - protected boolean doSave(Object newInput, Object oldInput) { - - // before setting the new input we have to save the old - if (fLeftSaveAction.isEnabled() || fRightSaveAction.isEnabled()) { - - // post alert - if (fConfirmSave) { - Shell shell= fComposite.getShell(); - - MessageDialog dialog= new MessageDialog(shell, - Utilities.getString(getResourceBundle(), "saveDialog.title"), //$NON-NLS-1$ - null, // accept the default window icon - Utilities.getString(getResourceBundle(), "saveDialog.message"), //$NON-NLS-1$ - MessageDialog.QUESTION, - new String[] { - IDialogConstants.YES_LABEL, - IDialogConstants.NO_LABEL, - }, - 0); // default button index - - switch (dialog.open()) { // open returns index of pressed button - case 0: - saveContent(oldInput); - break; - case 1: - setLeftDirty(false); - setRightDirty(false); - break; - case 2: - throw new ViewerSwitchingCancelled(); - } - } else - saveContent(oldInput); - return true; - } - return false; - } - - /** - * Controls whether <code>doSave(Object, Object)</code> asks for confirmation before saving - * the old input with <code>saveContent(Object)</code>. - * @param enable a value of <code>true</code> enables confirmation - * @since 2.0 - */ - public void setConfirmSave(boolean enable) { - fConfirmSave= enable; - } - - /* (non Javadoc) - * see Viewer.refresh - */ - public void refresh() { - internalRefresh(getInput()); - } - - private void internalRefresh(Object input) { - - IMergeViewerContentProvider content= getMergeContentProvider(); - if (content != null) { - Object ancestor= content.getAncestorContent(input); - if (input instanceof ICompareInput) - fIsThreeWay= (((ICompareInput)input).getKind() & Differencer.DIRECTION_MASK) != 0; - else - fIsThreeWay= ancestor != null; - - if (fAncestorItem != null) - fAncestorItem.setVisible(fIsThreeWay); - - boolean oldFlag= fShowAncestor; - fShowAncestor= fIsThreeWay && content.showAncestor(input); - - if (fAncestorEnabled && oldFlag != fShowAncestor) - fComposite.layout(true); - - ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(fComposite.getParent()); - if (tbm != null) { - updateToolItems(); - tbm.update(true); - tbm.getControl().getParent().layout(true); - } - - updateHeader(); - - Object left= content.getLeftContent(input); - Object right= content.getRightContent(input); - updateContent(ancestor, left, right); - } - } - - //---- layout & SWT control creation - - /** - * Builds the SWT controls for the three areas of a compare/merge viewer. - * <p> - * Calls the hooks <code>createControls</code> and <code>createToolItems</code> - * to let subclasses build the specific content areas and to add items to - * an enclosing toolbar. - * <p> - * This method must only be called in the constructor of subclasses. - * - * @param parent the parent control - * @return the new control - */ - protected final Control buildControl(Composite parent) { - - fComposite= new Composite(parent, fStyles) { - public boolean setFocus() { - return internalSetFocus(); - } - }; - fComposite.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle()); - - hookControl(fComposite); // hook help & dispose listener - - fComposite.setLayout(new ContentMergeViewerLayout()); - - int style= SWT.SHADOW_OUT; - fAncestorLabel= new CLabel(fComposite, style); - - fLeftLabel= new CLabel(fComposite, style); - new Resizer(fLeftLabel, VERTICAL); - - fDirectionLabel= new CLabel(fComposite, style); - fDirectionLabel.setAlignment(SWT.CENTER); - new Resizer(fDirectionLabel, HORIZONTAL | VERTICAL); - - fRightLabel= new CLabel(fComposite, style); - new Resizer(fRightLabel, VERTICAL); - - if (fCenter == null || fCenter.isDisposed()) - fCenter= createCenter(fComposite); - - createControls(fComposite); - - IWorkbenchPartSite ps= Utilities.findSite(fComposite); - fKeyBindingService= ps != null ? ps.getKeyBindingService() : null; - - ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(parent); - if (tbm != null) { - tbm.removeAll(); - - // define groups - tbm.add(new Separator("modes")); //$NON-NLS-1$ - tbm.add(new Separator("merge")); //$NON-NLS-1$ - tbm.add(new Separator("navigation")); //$NON-NLS-1$ - - CompareConfiguration cc= getCompareConfiguration(); - - if (cc.isRightEditable()) { - fCopyLeftToRightAction= - new Action() { - public void run() { - copy(true); - } - }; - Utilities.initAction(fCopyLeftToRightAction, getResourceBundle(), "action.CopyLeftToRight."); //$NON-NLS-1$ - tbm.appendToGroup("merge", fCopyLeftToRightAction); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, fCopyLeftToRightAction, "org.eclipse.compare.copyAllLeftToRight"); //$NON-NLS-1$ - } - - if (cc.isLeftEditable()) { - fCopyRightToLeftAction= - new Action() { - public void run() { - copy(false); - } - }; - Utilities.initAction(fCopyRightToLeftAction, getResourceBundle(), "action.CopyRightToLeft."); //$NON-NLS-1$ - tbm.appendToGroup("merge", fCopyRightToLeftAction); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, fCopyRightToLeftAction, "org.eclipse.compare.copyAllRightToLeft"); //$NON-NLS-1$ - } - - Action a= new ChangePropertyAction(fBundle, fCompareConfiguration, "action.EnableAncestor.", ANCESTOR_ENABLED); //$NON-NLS-1$ - a.setChecked(fAncestorEnabled); - fAncestorItem= new ActionContributionItem(a); - fAncestorItem.setVisible(false); - tbm.appendToGroup("modes", fAncestorItem); //$NON-NLS-1$ - - createToolItems(tbm); - updateToolItems(); - - tbm.update(true); - } - - return fComposite; - } - - /* package */ boolean internalSetFocus() { - return false; - } - - /* package */ int getCenterWidth() { - return 3; - } - - /* package */ boolean getAncestorEnabled() { - return fAncestorEnabled; - } - - /* package */ Control createCenter(Composite parent) { - Sash sash= new Sash(parent, SWT.VERTICAL); - new Resizer(sash, HORIZONTAL); - return sash; - } - - /* package */ Control getCenter() { - return fCenter; - } - - /* - * @see Viewer.getControl() - */ - public Control getControl() { - return fComposite; - } - - /** - * Called on the viewer disposal. - * Unregisters from the compare configuration. - * Clients may extend if they have to do additional cleanup. - */ - protected void handleDispose(DisposeEvent event) { - - if (fKeyBindingService != null) { - if (fCopyLeftToRightAction != null) - fKeyBindingService.unregisterAction(fCopyLeftToRightAction); - if (fCopyRightToLeftAction != null) - fKeyBindingService.unregisterAction(fCopyRightToLeftAction); - fKeyBindingService= null; - } - - Object input= getInput(); - if (input instanceof ICompareInput) - ((ICompareInput)input).removeCompareInputChangeListener(fCompareInputChangeListener); - - if (fCompareConfiguration != null && fPropertyChangeListener != null) { - fCompareConfiguration.removePropertyChangeListener(fPropertyChangeListener); - fPropertyChangeListener= null; - } - - fAncestorLabel= null; - fLeftLabel= null; - fDirectionLabel= null; - fRightLabel= null; - fCenter= null; - - if (fRightArrow != null) { - fRightArrow.dispose(); - fRightArrow= null; - } - if (fLeftArrow != null) { - fLeftArrow.dispose(); - fLeftArrow= null; - } - if (fBothArrow != null) { - fBothArrow.dispose(); - fBothArrow= null; - } - - super.handleDispose(event); - } - - /** - * Updates the enabled state of the toolbar items. - * <p> - * This method is called whenever the state of the items needs updating. - * <p> - * Subclasses may extend this method, although this is generally not required. - */ - protected void updateToolItems() { - - IMergeViewerContentProvider content= getMergeContentProvider(); - - Object input= getInput(); - - if (fCopyLeftToRightAction != null) { - boolean enable= content.isRightEditable(input); -// if (enable && input instanceof ICompareInput) { -// ITypedElement e= ((ICompareInput) input).getLeft(); -// if (e == null) -// enable= false; -// } - fCopyLeftToRightAction.setEnabled(enable); - } - - if (fCopyRightToLeftAction != null) { - boolean enable= content.isLeftEditable(input); -// if (enable && input instanceof ICompareInput) { -// ITypedElement e= ((ICompareInput) input).getRight(); -// if (e == null) -// enable= false; -// } - fCopyRightToLeftAction.setEnabled(enable); - } - } - - /** - * Updates the headers of the three areas - * by querying the content provider for a name and image for - * the three sides of the input object. - * <p> - * This method is called whenever the header must be updated. - * <p> - * Subclasses may extend this method, although this is generally not required. - */ - protected void updateHeader() { - - IMergeViewerContentProvider content= getMergeContentProvider(); - Object input= getInput(); - - if (fAncestorLabel != null) { - fAncestorLabel.setImage(content.getAncestorImage(input)); - fAncestorLabel.setText(content.getAncestorLabel(input)); - } - if (fLeftLabel != null) { - fLeftLabel.setImage(content.getLeftImage(input)); - fLeftLabel.setText(content.getLeftLabel(input)); - } - if (fRightLabel != null) { - fRightLabel.setImage(content.getRightImage(input)); - fRightLabel.setText(content.getRightLabel(input)); - } - } - -// private Image loadImage(String name) { -// ImageDescriptor id= ImageDescriptor.createFromFile(ContentMergeViewer.class, name); -// if (id != null) -// return id.createImage(); -// return null; -// } - - /** - * Calculates the height of the header. - */ - /* package */ int getHeaderHeight() { - int headerHeight= fLeftLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y; - headerHeight= Math.max(headerHeight, fDirectionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y); - return headerHeight; - } - - //---- merge direction - - /** - * Returns true if both sides are editable. - */ - /* package */ boolean canToggleMergeDirection() { - IMergeViewerContentProvider content= getMergeContentProvider(); - Object input= getInput(); - return content.isLeftEditable(input) && content.isRightEditable(input); - } - - //---- dirty state & saving state - - /* (non Javadoc) - * see IPropertyChangeNotifier.addPropertyChangeListener - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - if (fListenerList == null) - fListenerList= new ListenerList(); - fListenerList.add(listener); - } - - /* (non Javadoc) - * see IPropertyChangeNotifier.removePropertyChangeListener - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - if (fListenerList != null) { - fListenerList.remove(listener); - if (fListenerList.isEmpty()) - fListenerList= null; - } - } - - /* package */ void fireDirtyState(boolean state) { - Utilities.firePropertyChange(fListenerList, this, CompareEditorInput.DIRTY_STATE, null, new Boolean(state)); - } - - /** - * Sets the dirty state of the left side of this viewer. - * If the new value differs from the old - * all registered listener are notified with - * a <code>PropertyChangeEvent</code> with the - * property name <code>CompareEditorInput.DIRTY_STATE</code>. - * - * @param dirty the state of the left side dirty flag - */ - protected void setLeftDirty(boolean dirty) { - if (fLeftSaveAction.isEnabled() != dirty) { - fLeftSaveAction.setEnabled(dirty); - fireDirtyState(dirty); - } - } - - /** - * Sets the dirty state of the right side of this viewer. - * If the new value differs from the old - * all registered listener are notified with - * a <code>PropertyChangeEvent</code> with the - * property name <code>CompareEditorInput.DIRTY_STATE</code>. - * - * @param dirty the state of the right side dirty flag - */ - protected void setRightDirty(boolean dirty) { - if (fRightSaveAction.isEnabled() != dirty) { - fRightSaveAction.setEnabled(dirty); - fireDirtyState(dirty); - } - } - - /** - * Save the viewers's content. - * Note: this method is for internal use only. Clients should not call this method. - * @since 2.0 - */ - public void save(IProgressMonitor pm) throws CoreException { - saveContent(getInput()); - } - - /** - * Save modified content back to input elements via the content provider. - */ - /* package */ void saveContent(Object oldInput) { - - // write back modified contents - IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider(); - - boolean leftEmpty= content.getLeftContent(oldInput) == null; - boolean rightEmpty= content.getRightContent(oldInput) == null; - - if (fCompareConfiguration.isLeftEditable() && fLeftSaveAction.isEnabled()) { - byte[] bytes= getContents(true); - if (leftEmpty && bytes != null && bytes.length == 0) - bytes= null; - setLeftDirty(false); - content.saveLeftContent(oldInput, bytes); - } - - if (fCompareConfiguration.isRightEditable() && fRightSaveAction.isEnabled()) { - byte[] bytes= getContents(false); - if (rightEmpty && bytes != null && bytes.length == 0) - bytes= null; - setRightDirty(false); - content.saveRightContent(oldInput, bytes); - } - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java deleted file mode 100644 index 45d4482ef..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.swt.widgets.Shell; -import org.eclipse.core.runtime.IProgressMonitor; -import java.lang.reflect.InvocationTargetException; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.operation.ModalContext; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; - - -class DelayedProgressMonitor implements IProgressMonitor { - - ProgressMonitorDialog fProgressDialog; - IProgressMonitor fRealProgressMonitor; - String fTaskName; - String fSubTaskName; - int fTotalWork; - int fWorked; - boolean fCancelable; - Shell fShell; - int fTime; - - - DelayedProgressMonitor(Shell shell) { - fShell= shell; - } - - /* - * @see IProgressMonitor#beginTask(String, int) - */ - public void beginTask(String name, int totalWork) { - fTaskName= name; - fTotalWork= totalWork; - fTime= 0; - } - - /* - * @see IProgressMonitor#done() - */ - public void done() { - if (fRealProgressMonitor != null) - fRealProgressMonitor.done(); - } - - /* - * @see IProgressMonitor#internalWorked(double) - */ - public void internalWorked(double work) { - if (fRealProgressMonitor != null) { - fRealProgressMonitor.internalWorked(work); - } - } - - private void checkTimeout() { - if (fRealProgressMonitor == null) { - - //if (fTime++ < 100) - // return; - - fProgressDialog= new ProgressMonitorDialog(fShell); - fProgressDialog.setCancelable(true); - fProgressDialog.open(); - fRealProgressMonitor= fProgressDialog.getProgressMonitor(); - fRealProgressMonitor.beginTask(fTaskName, fTotalWork); - if (fSubTaskName != null) - fRealProgressMonitor.subTask(fSubTaskName); - fRealProgressMonitor.worked(fWorked); - } - } - - /* - * @see IProgressMonitor#isCanceled() - */ - public boolean isCanceled() { - checkTimeout(); - if (fRealProgressMonitor != null) - return fRealProgressMonitor.isCanceled(); - return false; - } - - /* - * @see IProgressMonitor#setCanceled(boolean) - */ - public void setCanceled(boolean value) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.setCanceled(value); - else - fCancelable= value; - } - - /* - * @see IProgressMonitor#setTaskName(String) - */ - public void setTaskName(String name) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.setTaskName(name); - else - fTaskName= name; - } - - /* - * @see IProgressMonitor#subTask(String) - */ - public void subTask(String name) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.subTask(name); - else - fSubTaskName= name; - } - - /* - * @see IProgressMonitor#worked(int) - */ - public void worked(int work) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.internalWorked(work); - else { - fWorked+= work; - checkTimeout(); - } - } - - public static void run(Shell shell, boolean fork, boolean cancelable, IRunnableWithProgress runnable) - throws InvocationTargetException, InterruptedException { - - DelayedProgressMonitor pm= new DelayedProgressMonitor(shell); - pm.checkTimeout(); - try { - ModalContext.run(runnable, fork, pm, shell.getDisplay()); - } finally { - if (pm.fProgressDialog != null) - pm.fProgressDialog.close(); - } - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java deleted file mode 100644 index 851749d79..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.IDocument; - - -/** - * Defines a subrange in a document. - * <p> - * It is used by text viewers that can work on a subrange of a document. For example, - * a text viewer for Java compilation units might use this to restrict the view - * to a single method. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * - * @see TextMergeViewer - * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode - */ -public interface IDocumentRange { - - /** - * The position category typically used for an <code>IDocumentRange</code> position - * (value <code>"DocumentRangeCategory"</code>). - * @since 2.0 - */ - public static final String RANGE_CATEGORY= "DocumentRangeCategory"; //$NON-NLS-1$ - - /** - * Returns the underlying document. - * - * @return the underlying document - */ - IDocument getDocument(); - - /** - * Returns a position that specifies a subrange in the underlying document, - * or <code>null</code> if this document range spans the whole underlying document. - * - * @return a position that specifies a subrange in the underlying document, or <code>null</code> - */ - Position getRange(); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java deleted file mode 100644 index d4a206666..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.jface.viewers.IContentProvider; - - -/** - * A content provider that mediates between a <code>ContentMergeViewer</code>'s model - * and the viewer itself. - * <p> - * Clients may implement this interface. - * </p> - * - * @see ContentMergeViewer - */ -public interface IMergeViewerContentProvider extends IContentProvider { - - //---- ancestor side - - /** - * Returns the label for the ancestor side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the label for the ancestor side of a <code>ContentMergeViewer</code> - */ - String getAncestorLabel(Object input); - - /** - * Returns an optional image for the ancestor side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the image for the ancestor side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Image getAncestorImage(Object input); - - /** - * Returns the contents for the ancestor side of a <code>ContentMergeViewer</code>. - * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the content for the ancestor side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Object getAncestorContent(Object input); - - /** - * Returns whether the ancestor side of the given input element should be shown. - * - * @return <code>true</code> if the ancestor side of the given input element should be shown - */ - boolean showAncestor(Object input); - - //---- left side - - /** - * Returns the label for the left side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the label for the left side of a <code>ContentMergeViewer</code> - */ - String getLeftLabel(Object input); - - /** - * Returns an optional image for the left side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the image for the left side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Image getLeftImage(Object input); - - /** - * Returns the contents for the left side of a <code>ContentMergeViewer</code>. - * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the content for the left side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Object getLeftContent(Object input); - - /** - * Returns whether the left side is editable. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return <code>true</code> if the left side of a <code>ContentMergeViewer</code> is editable - */ - boolean isLeftEditable(Object input); - - /** - * Saves new contents for the left side of the <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @param bytes the new contents to save for the left side - */ - void saveLeftContent(Object input, byte[] bytes); - - //---- right side - - /** - * Returns the label for the right side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the label for the right side of a <code>ContentMergeViewer</code> - */ - String getRightLabel(Object input); - - /** - * Returns an optional image for the right side of a <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the image for the right side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Image getRightImage(Object input); - - /** - * Returns the contents for the right side of a <code>ContentMergeViewer</code>. - * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return the content for the right side of a <code>ContentMergeViewer</code>, - * or <code>null</code> if none - */ - Object getRightContent(Object input); - - /** - * Returns whether the right side is editable. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @return <code>true</code> if the right side of a <code>ContentMergeViewer</code> is editable - */ - boolean isRightEditable(Object input); - - /** - * Saves new contents for the right side of the <code>ContentMergeViewer</code>. - * - * @param input the input object of the <code>ContentMergeViewer</code> - * @param bytes the new contents to save for the right side - */ - void saveRightContent(Object input, byte[] bytes); -} - - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java deleted file mode 100644 index 27354bf82..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.compare.rangedifferencer.IRangeComparator; - - -/** - * For performing a so-called "token compare" on a line of text. - * This interface extends the <code>IRangeComparator</code> interface - * so that it can be used by the <code>TextMergeViewer</code>. - * <p> - * <code>TextMergeViewer</code> activates the token compare when navigating into - * a range of differing lines. At first the lines are selected as a block. - * When navigating into this block the token compare shows for every line - * the differing token by selecting them. - * <p> - * <code>TextMergeViewer</code>'s default token comparator works on characters separated - * by whitespace. If a different strategy is needed (for example, to use Java tokens in - * a Java-aware merge viewer), clients may create their own token - * comparators by implementing this interface (and overriding the - * <code>TextMergeViewer.createTokenComparator</code> factory method). - * </p> - * - * @see TextMergeViewer - */ -public interface ITokenComparator extends IRangeComparator { - - /** - * Returns the start character position of the token with the given index. - * If the index is out of range (but not negative) the character position - * behind the last character (the length of the input string) is returned. - * - * @param index index of the token for which to return the start position - * @return the start position of the token with the given index - * @throws java.lang.IndexOutOfBoundsException if index is negative - */ - int getTokenStart(int index); - - /** - * Returns the character length of the token with the given index. - * If the index is out of range (but not negative) the value 0 is returned. - * - * @param index index of the token for which to return the start position - * @return the character length of the token with the given index - * @throws java.lang.IndexOutOfBoundsException if index is negative - */ - int getTokenLength(int index); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java deleted file mode 100644 index fea9dc5b1..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java +++ /dev/null @@ -1,4143 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * channingwalton@mac.com - curved line code - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import java.util.List; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Map; -import java.util.HashMap; -import java.util.ResourceBundle; -import java.io.UnsupportedEncodingException; -import java.text.MessageFormat; - -import java.lang.reflect.InvocationTargetException; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Cursor; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.custom.*; - -import org.eclipse.jface.action.*; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.*; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; - -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IKeyBindingService; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPartSite; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.compare.internal.MergeSourceViewer; -import org.eclipse.compare.internal.BufferedCanvas; -import org.eclipse.compare.internal.Utilities; -import org.eclipse.compare.internal.TokenComparator; -import org.eclipse.compare.internal.DocLineComparator; -import org.eclipse.compare.internal.ComparePreferencePage; -import org.eclipse.compare.internal.INavigatable; -import org.eclipse.compare.internal.CompareNavigator; -import org.eclipse.compare.internal.TimeoutContext; -import org.eclipse.compare.internal.DocumentManager; -import org.eclipse.compare.internal.CompareMessages; -import org.eclipse.compare.rangedifferencer.*; -import org.eclipse.compare.structuremergeviewer.*; - -/** - * A text merge viewer uses the <code>RangeDifferencer</code> to perform a - * textual, line-by-line comparison of two (or three) input documents. - * It is based on the <code>ContentMergeViewer</code> and uses <code>TextViewer</code>s - * to implement the ancestor, left, and right content areas. - * <p> - * In the three-way compare case ranges of differing lines are highlighted and framed - * with different colors to show whether the difference is an incoming, outgoing, or conflicting change. - * The <code>TextMergeViewer</code> supports the notion of a current "differing range" - * and provides toolbar buttons to navigate from one range to the next (or previous). - * <p> - * If there is a current "differing range" and the underlying document is editable - * the <code>TextMergeViewer</code> enables actions in context menu and toolbar to - * copy a range from one side to the other side, thereby performing a merge operation. - * <p> - * In addition to a line-by-line comparison the <code>TextMergeViewer</code> - * uses a token based compare on differing lines. - * The token compare is activated when navigating into - * a range of differing lines. At first the lines are selected as a block. - * When navigating into this block the token compare shows for every line - * the differing token by selecting them. - * <p> - * The <code>TextMergeViewer</code>'s default token compare works on characters separated - * by whitespace. If a different strategy is needed (for example, Java tokens in - * a Java-aware merge viewer), clients can create their own token - * comparators by implementing the <code>ITokenComparator</code> interface and overriding the - * <code>TextMergeViewer.createTokenComparator</code> factory method). - * <p> - * Access to the <code>TextMergeViewer</code>'s model is by means of an - * <code>IMergeViewerContentProvider</code>. Its <code>get<it>X</it></code>Content</code> methods must return - * either an <code>IDocument</code>, an <code>IDocumentRange</code>, or an <code>IStreamContentAccessor</code>. - * In the <code>IDocumentRange</code> case the <code>TextMergeViewer</code> - * works on a subrange of a document. In the <code>IStreamContentAccessor</code> case - * a document is created internally and initialized from the stream. - * <p> - * A <code>TextMergeViewer</code> can be used as is. However clients may subclass - * to customize the behavior. For example a <code>MergeTextViewer</code> for Java would override - * the <code>configureTextViewer</code> method to configure the <code>TextViewer</code> for Java source code, - * the <code>createTokenComparator</code> method to create a Java specific tokenizer. - * - * @see org.eclipse.compare.rangedifferencer.RangeDifferencer - * @see org.eclipse.jface.text.TextViewer - * @see ITokenComparator - * @see IDocumentRange - * @see org.eclipse.compare.IStreamContentAccessor - */ -public class TextMergeViewer extends ContentMergeViewer { - - private static final boolean DEBUG= false; - - private static final String[] GLOBAL_ACTIONS= { - IWorkbenchActionConstants.UNDO, - IWorkbenchActionConstants.REDO, - IWorkbenchActionConstants.CUT, - IWorkbenchActionConstants.COPY, - IWorkbenchActionConstants.PASTE, - IWorkbenchActionConstants.DELETE, - IWorkbenchActionConstants.SELECT_ALL, - IWorkbenchActionConstants.SAVE - }; - private static final String[] TEXT_ACTIONS= { - MergeSourceViewer.UNDO_ID, - MergeSourceViewer.REDO_ID, - MergeSourceViewer.CUT_ID, - MergeSourceViewer.COPY_ID, - MergeSourceViewer.PASTE_ID, - MergeSourceViewer.DELETE_ID, - MergeSourceViewer.SELECT_ALL_ID, - MergeSourceViewer.SAVE_ID - }; - - private static final String BUNDLE_NAME= "org.eclipse.compare.contentmergeviewer.TextMergeViewerResources"; //$NON-NLS-1$ - - // constants - /** Width of left and right vertical bar */ - private static final int MARGIN_WIDTH= 6; - /** Width of center bar */ - private static final int CENTER_WIDTH= 34; - /** Width of birds eye view */ - private static final int BIRDS_EYE_VIEW_WIDTH= 12; - /** Width of birds eye view */ - private static final int BIRDS_EYE_VIEW_INSET= 2; - /** */ - private static final int RESOLVE_SIZE= 5; - /** if true copying conflicts from one side to other concatenates both sides */ - private static final boolean APPEND_CONFLICT= true; - - /** line width of change borders */ - private static final int LW= 1; - /** Selects between smartTokenDiff and mergingTokenDiff */ - private static final boolean USE_MERGING_TOKEN_DIFF= false; - /** When calculating differences show Progress after this timeout (in milliseconds) */ - private static final int TIMEOUT= 2000; - - // determines whether a change between left and right is considered incoming or outgoing - private boolean fLeftIsLocal; - private boolean fShowCurrentOnly= false; - private boolean fShowCurrentOnly2= false; - private int fMarginWidth= MARGIN_WIDTH; - private int fTopInset; - - // Colors - private RGB fBackground; - private RGB fForeground; - private boolean fPollSystemForeground= true; - private boolean fPollSystemBackground= true; - - private RGB SELECTED_INCOMING; - private RGB INCOMING; - private RGB INCOMING_FILL; - - private RGB SELECTED_CONFLICT; - private RGB CONFLICT; - private RGB CONFLICT_FILL; - - private RGB SELECTED_OUTGOING; - private RGB OUTGOING; - private RGB OUTGOING_FILL; - - private RGB RESOLVED; - - private boolean fEndOfDocReached; - private IDocumentListener fDocumentListener; - - private IPreferenceStore fPreferenceStore; - private IPropertyChangeListener fPreferenceChangeListener; - - /** All diffs for calculating scrolling position (includes line ranges without changes) */ - private ArrayList fAllDiffs; - /** Subset of above: just real differences. */ - private ArrayList fChangeDiffs; - /** The current diff */ - private Diff fCurrentDiff; - - private HashMap fNewAncestorRanges= new HashMap(); - private HashMap fNewLeftRanges= new HashMap(); - private HashMap fNewRightRanges= new HashMap(); - - private 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 boolean fUseSplines= true; - private boolean fUseSingleLine= true; - private boolean fUseResolveUI= fUseSingleLine; // resolve UI only for single lines private boolean fShowSummeryIcon; - - private String fSymbolicFontName; - - private ActionContributionItem fNextItem; // goto next difference - private ActionContributionItem fPreviousItem; // goto previous difference - private ActionContributionItem fCopyDiffLeftToRightItem; - private ActionContributionItem fCopyDiffRightToLeftItem; - - private IKeyBindingService fKeyBindingService; - - private boolean fSynchronizedScrolling= true; - private boolean fShowMoreInfo= false; - - private MergeSourceViewer fFocusPart; - - private boolean fSubDoc= true; - private IPositionUpdater fPositionUpdater; - private boolean fIsMotif; - private boolean fIsCarbon; - - - // SWT widgets - private BufferedCanvas fAncestorCanvas; - private BufferedCanvas fLeftCanvas; - private BufferedCanvas fRightCanvas; - private Canvas fScrollCanvas; - private ScrollBar fVScrollBar; - private Canvas fBirdsEyeCanvas; - private Canvas fSummaryHeader; - private HeaderPainter fHeaderPainter; - - // SWT resources to be disposed - private Map fColors; - private Cursor fBirdsEyeCursor; - - // points for center curves - private double[] fBasicCenterCurve; - - private Button fCenterButton; - private Diff fButtonDiff; - - class HeaderPainter implements PaintListener { - - private static final int INSET= BIRDS_EYE_VIEW_INSET; - - private RGB fIndicatorColor; - private Color fSeparatorColor; - - public HeaderPainter() { - fSeparatorColor= getColor(fSummaryHeader.getDisplay(), ViewForm.borderInsideRGB); - } - - /** - * Returns true on color change - */ - public boolean setColor(RGB color) { - RGB oldColor= fIndicatorColor; - fIndicatorColor= color; - if (color == null) - return oldColor != null; - if (oldColor != null) - return !color.equals(oldColor); - return true; - } - - private void drawBevelRect(GC gc, int x, int y, int w, int h, Color topLeft, Color bottomRight) { - gc.setForeground(topLeft); - gc.drawLine(x, y, x + w -1, y); - gc.drawLine(x, y, x, y + h -1); - - gc.setForeground(bottomRight); - gc.drawLine(x + w, y, x + w, y + h); - gc.drawLine(x, y + h, x + w, y + h); - } - - public void paintControl(PaintEvent e) { - - Point s= fSummaryHeader.getSize(); - - if (fIndicatorColor != null) { - Display d= fSummaryHeader.getDisplay(); - e.gc.setBackground(getColor(d, fIndicatorColor)); - int min= Math.min(s.x, s.y)-2*INSET; - Rectangle r= new Rectangle((s.x-min)/2, (s.y-min)/2, min, min); - e.gc.fillRectangle(r); - if (d != null) - drawBevelRect(e.gc, r.x, r.y, r.width -1, r.height -1, d.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW), d.getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW)); - - e.gc.setForeground(fSeparatorColor); - e.gc.setLineWidth(1); - e.gc.drawLine(0+1, s.y-1, s.x-1-1, s.y-1); - } - } - }; - - /** - * The position updater used to adapt the positions representing - * the child document ranges to changes of the parent document. - */ - class ChildPositionUpdater extends DefaultPositionUpdater { - - /** - * Creates the position updated. - */ - protected ChildPositionUpdater(String category) { - super(category); - } - - /** - * Child document ranges cannot be deleted other then by calling - * freeChildDocument. - */ - protected boolean notDeleted() { - return true; - } - - /** - * If an insertion happens at a child document's start offset, the - * position is extended rather than shifted. Also, if something is added - * right behind the end of the position, the position is extended rather - * than kept stable. - */ - protected void adaptToInsert() { - - if (fPosition == fLeft.getRegion() || fPosition == fRight.getRegion()) { - int myStart= fPosition.offset; - int myEnd= fPosition.offset + fPosition.length; - myEnd= Math.max(myStart, myEnd); - - int yoursStart= fOffset; - int yoursEnd= fOffset + fReplaceLength -1; - yoursEnd= Math.max(yoursStart, yoursEnd); - - if (myEnd < yoursStart) - return; - - if (myStart <= yoursStart) - fPosition.length += fReplaceLength; - else - fPosition.offset += fReplaceLength; - } else { - super.adaptToInsert(); - } - } - } - - /** - * A Diff represents synchronized character ranges in two or three Documents. - * The MergeTextViewer uses Diffs to find differences in line and token ranges. - */ - /* package */ class Diff { - /** character range in ancestor document */ - Position fAncestorPos; - /** character range in left document */ - Position fLeftPos; - /** character range in right document */ - Position fRightPos; - /** if this is a TokenDiff fParent points to the enclosing LineDiff */ - Diff fParent; - /** if Diff has been resolved */ - boolean fResolved; - int fDirection; - boolean fIsToken= false; - /** child token diffs */ - ArrayList fDiffs; - boolean fIsWhitespace= false; - - /** - * Create Diff from two ranges and an optional parent diff. - */ - Diff(Diff parent, int dir, IDocument ancestorDoc, Position aRange, int ancestorStart, int ancestorEnd, - IDocument leftDoc, Position lRange, int leftStart, int leftEnd, - IDocument rightDoc, Position rRange, int rightStart, int rightEnd) { - fParent= parent != null ? parent : this; - fDirection= dir; - - fLeftPos= createPosition(leftDoc, lRange, leftStart, leftEnd); - fRightPos= createPosition(rightDoc, rRange, rightStart, rightEnd); - if (ancestorDoc != null) - fAncestorPos= createPosition(ancestorDoc, aRange, ancestorStart, ancestorEnd); - } - - Position getPosition(char type) { - switch (type) { - case 'A': - return fAncestorPos; - case 'L': - return fLeftPos; - case 'R': - return fRightPos; - } - return null; - } - - boolean isInRange(char type, int pos) { - Position p= getPosition(type); - return (pos >= p.offset) && (pos < (p.offset+p.length)); - } - - String changeType() { - boolean leftEmpty= fLeftPos.length == 0; - boolean rightEmpty= fRightPos.length == 0; - - if (fDirection == RangeDifference.LEFT) { - if (!leftEmpty && rightEmpty) - return CompareMessages.getString("TextMergeViewer.changeType.addition"); //$NON-NLS-1$ - if (leftEmpty && !rightEmpty) - return CompareMessages.getString("TextMergeViewer.changeType.deletion"); //$NON-NLS-1$ - } else { - if (leftEmpty && !rightEmpty) - return CompareMessages.getString("TextMergeViewer.changeType.addition"); //$NON-NLS-1$ - if (!leftEmpty && rightEmpty) - return CompareMessages.getString("TextMergeViewer.changeType.deletion"); //$NON-NLS-1$ - } - return CompareMessages.getString("TextMergeViewer.changeType.change"); //$NON-NLS-1$ - } - - Image getImage() { - int code= Differencer.CHANGE; - switch (fDirection) { - case RangeDifference.RIGHT: - code+= Differencer.LEFT; - break; - case RangeDifference.LEFT: - code+= Differencer.RIGHT; - break; - case RangeDifference.ANCESTOR: - case RangeDifference.CONFLICT: - code+= Differencer.CONFLICTING; - break; - } - if (code != 0) - return getCompareConfiguration().getImage(code); - return null; - } - - Position createPosition(IDocument doc, Position range, int start, int end) { - try { - int l= end-start; - if (range != null) { - int dl= range.length; - if (l > dl) - l= dl; - } else { - int dl= doc.getLength(); - if (start+l > dl) - l= dl-start; - } - - Position p= null; - try { - p= new Position(start, l); - } catch (RuntimeException ex) { - //System.out.println("Diff.createPosition: " + start + " " + l); - } - - try { - doc.addPosition(IDocumentRange.RANGE_CATEGORY, p); - } catch (BadPositionCategoryException ex) { - } - return p; - } catch (BadLocationException ee) { - //System.out.println("Diff.createPosition: " + start + " " + end); - } - return null; - } - - void add(Diff d) { - if (fDiffs == null) - fDiffs= new ArrayList(); - fDiffs.add(d); - } - - boolean isDeleted() { - if (fAncestorPos != null && fAncestorPos.isDeleted()) - return true; - return fLeftPos.isDeleted() || fRightPos.isDeleted(); - } - - void setResolved(boolean r) { - fResolved= r; - if (r) - fDiffs= null; - } - - boolean isResolved() { - if (!fResolved && fDiffs != null) { - Iterator e= fDiffs.iterator(); - while (e.hasNext()) { - Diff d= (Diff) e.next(); - if (!d.isResolved()) - return false; - } - return true; - } - return fResolved; - } - -// private boolean isIncoming() { -// switch (fDirection) { -// case RangeDifference.RIGHT: -// if (fLeftIsLocal) -// return true; -// break; -// case RangeDifference.LEFT: -// if (!fLeftIsLocal) -// return true; -// break; -// } -// return false; -// } - - private boolean isIncomingOrConflicting() { - switch (fDirection) { - case RangeDifference.RIGHT: - if (fLeftIsLocal) - return true; - break; - case RangeDifference.LEFT: - if (!fLeftIsLocal) - return true; - break; - case RangeDifference.CONFLICT: - return true; - } - return false; - } - -// private boolean isUnresolvedIncoming() { -// if (fResolved) -// return false; -// return isIncoming(); -// } - - private boolean isUnresolvedIncomingOrConflicting() { - if (fResolved) - return false; - return isIncomingOrConflicting(); - } - - Position getPosition(MergeSourceViewer w) { - if (w == fLeft) - return fLeftPos; - if (w == fRight) - return fRightPos; - if (w == fAncestor) - return fAncestorPos; - return null; - } - - /** - * Returns true if given character range overlaps with this Diff. - */ - boolean contains(MergeSourceViewer w, int start, int end) { - Position h= getPosition(w); - if (h != null) { - int offset= h.getOffset(); - if (start >= offset) { - int endPos= offset+h.getLength(); - if (end < endPos) - return true; - if (endPos == w.getDocument().getLength()) - return true; - } - } - return false; - } - - int getMaxDiffHeight(boolean withAncestor) { - Point region= new Point(0, 0); - int h= fLeft.getLineRange(fLeftPos, region).y; - if (withAncestor) - h= Math.max(h, fAncestor.getLineRange(fAncestorPos, region).y); - return Math.max(h, fRight.getLineRange(fRightPos, region).y); - } - - int getAncestorHeight() { - Point region= new Point(0, 0); - return fAncestor.getLineRange(fAncestorPos, region).y; - } - - int getLeftHeight() { - Point region= new Point(0, 0); - return fLeft.getLineRange(fLeftPos, region).y; - } - - int getRightHeight() { - Point region= new Point(0, 0); - return fRight.getLineRange(fRightPos, region).y; - } - } - - //---- MergeTextViewer - - /** - * Creates a text merge viewer under the given parent control. - * - * @param parent the parent control - * @param configuration the configuration object - */ - public TextMergeViewer(Composite parent, CompareConfiguration configuration) { - this(parent, SWT.NULL, configuration); - } - - /** - * Creates a text merge viewer under the given parent control. - * - * @param parent the parent control - * @param style SWT style bits for top level composite of this viewer - * @param configuration the configuration object - */ - public TextMergeViewer(Composite parent, int style, CompareConfiguration configuration) { - super(style, ResourceBundle.getBundle(BUNDLE_NAME), configuration); - - fSymbolicFontName= getClass().getName(); - - String platform= SWT.getPlatform(); - fIsMotif= "motif".equals(platform); //$NON-NLS-1$ - fIsCarbon= "carbon".equals(platform); //$NON-NLS-1$ - - if (fIsMotif) - fMarginWidth= 0; - - Display display= parent.getDisplay(); - - fPreferenceChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - TextMergeViewer.this.propertyChange(event); - } - }; - - fPreferenceStore= configuration.getPreferenceStore(); - if (fPreferenceStore != null) { - fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener); - - checkForColorUpdate(display); - - fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false); //$NON-NLS-1$ - fSynchronizedScrolling= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING); - fShowMoreInfo= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_MORE_INFO); - fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS); - //fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES); - fUseSingleLine= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SINGLE_LINE); - fUseResolveUI= fUseSingleLine; - //fUseResolveUI= fPreferenceStore.getBoolean(ComparePreferencePage.USE_RESOLVE_UI); - } - - fDocumentListener= new IDocumentListener() { - - public void documentAboutToBeChanged(DocumentEvent e) { - } - - public void documentChanged(DocumentEvent e) { - TextMergeViewer.this.documentChanged(e); - } - }; - - buildControl(parent); - - INavigatable nav= new INavigatable() { - public boolean gotoDifference(boolean next) { - return navigate(next, false, false); - } - }; - fComposite.setData(INavigatable.NAVIGATOR_PROPERTY, nav); - - fBirdsEyeCursor= new Cursor(parent.getDisplay(), SWT.CURSOR_HAND); - - JFaceResources.getFontRegistry().addListener(fPreferenceChangeListener); - updateFont(); - } - - private void updateFont() { - Font f= JFaceResources.getFont(fSymbolicFontName); - if (f != null) { - if (fAncestor != null) - fAncestor.setFont(f); - if (fLeft != null) - fLeft.setFont(f); - if (fRight != null) - fRight.setFont(f); - } - } - - private void checkForColorUpdate(Display display) { - if (fPollSystemForeground) { - RGB fg= display.getSystemColor(SWT.COLOR_LIST_FOREGROUND).getRGB(); - if (fForeground == null || !fg.equals(fForeground)) { - fForeground= fg; - updateColors(display); - } - } - if (fPollSystemBackground) { - RGB bg= display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB(); - if (fBackground == null || !bg.equals(fBackground)) { - fBackground= bg; - updateColors(display); - } - } - } - - /** - * Sets the viewer's background color to the given RGB value. - * If the value is <code>null</code> the system's default background color is used. - * @param background the background color or <code>null</code> to use the system's default background color - * @since 2.0 - */ - public void setBackgroundColor(RGB background) { - fPollSystemBackground= (background == null); - fBackground= background; - updateColors(null); - } - - private RGB getBackground(Display display) { - if (fBackground != null) - return fBackground; - if (display == null) - display= fComposite.getDisplay(); - return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB(); - } - - /** - * Sets the viewer's foreground color to the given RGB value. - * If the value is <code>null</code> the system's default foreground color is used. - * @param foreground the foreground color or <code>null</code> to use the system's default foreground color - * @since 2.0 - */ - public void setForegroundColor(RGB foreground) { - fPollSystemForeground= (foreground == null); - fForeground= foreground; - updateColors(null); - } - - private RGB getForeground(Display display) { - if (fForeground != null) - return fForeground; - if (display == null) - display= fComposite.getDisplay(); - return display.getSystemColor(SWT.COLOR_LIST_FOREGROUND).getRGB(); - } - - private void updateColors(Display display) { - - if (display == null) - display= fComposite.getDisplay(); - - Color color= null; - if (fBackground != null) - color= getColor(display, fBackground); - - if (fAncestor != null) - fAncestor.setBackgroundColor(color); - if (fLeft != null) - fLeft.setBackgroundColor(color); - if (fRight != null) - fRight.setBackgroundColor(color); - - RGB bg= getBackground(display); - SELECTED_INCOMING= new RGB(0, 0, 255); - INCOMING= interpolate(SELECTED_INCOMING, bg, 0.6); - INCOMING_FILL= interpolate(SELECTED_INCOMING, bg, 0.97); - - SELECTED_CONFLICT= new RGB(255, 0, 0); - CONFLICT= interpolate(SELECTED_CONFLICT, bg, 0.6); - CONFLICT_FILL= interpolate(SELECTED_CONFLICT, bg, 0.97); - - SELECTED_OUTGOING= getForeground(display); - OUTGOING= interpolate(SELECTED_OUTGOING, bg, 0.6); - OUTGOING_FILL= interpolate(SELECTED_OUTGOING, bg, 0.97); - - RESOLVED= new RGB(0, 255, 0); - - refreshBirdsEyeView(); - invalidateLines(); - - updateAllDiffBackgrounds(display); - } - - /** - * Invalidates the current presentation by invalidating the three text viewers. - * @since 2.0 - */ - public void invalidateTextPresentation() { - if (fAncestor != null) - fAncestor.invalidateTextPresentation(); - if (fLeft != null) - fLeft.invalidateTextPresentation(); - if (fRight != null) - fRight.invalidateTextPresentation(); - } - - /** - * Configures the passed text viewer. - * This method is called after the three text viewers have been created for the - * content areas. - * The <code>TextMergeViewer</code> implementation of this method does nothing. - * Subclasses may reimplement to provide a specific configuration for the text viewer. - * - * @param textViewer the text viewer to configure - */ - protected void configureTextViewer(TextViewer textViewer) { - } - - /** - * Creates an <code>ITokenComparator</code> which is used to show the - * intra line differences. - * The <code>TextMergeViewer</code> implementation of this method returns a - * tokenizer that breaks a line into words separated by whitespace. - * Subclasses may reimplement to provide a specific tokenizer. - * - * @return a ITokenComparator which is used for a second level token compare. - */ - protected ITokenComparator createTokenComparator(String s) { - return new TokenComparator(s); - } - - /** - * Returns a document partitioner which is suitable for the underlying content type. - * This method is only called if the input provided by the content provider is a - * <code>IStreamContentAccessor</code> and an internal document must be created. This - * document is initialized with the partitioner returned from this method. - * <p> - * The <code>TextMergeViewer</code> implementation of this method returns - * <code>null</code>. Subclasses may reimplement to create a partitioner for a - * specific content type. - * - * @return a document partitioner, or <code>null</code> - */ - protected IDocumentPartitioner getDocumentPartitioner() { - return null; - } - - /** - * Called on the viewer disposal. - * Unregisters from the compare configuration. - * Clients may extend if they have to do additional cleanup. - */ - protected void handleDispose(DisposeEvent event) { - - if (fKeyBindingService != null) { - IAction a; - if (fNextItem != null) { - a= fNextItem.getAction(); - if (a != null) - fKeyBindingService.unregisterAction(a); - } - if (fPreviousItem != null) { - a= fPreviousItem.getAction(); - if (a != null) - fKeyBindingService.unregisterAction(a); - } - if (fCopyDiffLeftToRightItem != null) { - a= fCopyDiffLeftToRightItem.getAction(); - if (a != null) - fKeyBindingService.unregisterAction(a); - } - if (fCopyDiffRightToLeftItem != null) { - a= fCopyDiffRightToLeftItem.getAction(); - if (a != null) - fKeyBindingService.unregisterAction(a); - } - fKeyBindingService= null; - } - - Object input= getInput(); - DocumentManager.remove(getDocument2('A', input)); - DocumentManager.remove(getDocument2('L', input)); - DocumentManager.remove(getDocument2('R', input)); - - if (DEBUG) - DocumentManager.dump(); - - if (fPreferenceChangeListener != null) { - JFaceResources.getFontRegistry().removeListener(fPreferenceChangeListener); - if (fPreferenceStore != null) - fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener); - fPreferenceChangeListener= null; - } - - fLeftCanvas= null; - fRightCanvas= null; - fVScrollBar= null; - fBirdsEyeCanvas= null; - fSummaryHeader= null; - - unsetDocument(fAncestor); - unsetDocument(fLeft); - unsetDocument(fRight); - - if (fColors != null) { - Iterator i= fColors.values().iterator(); - while (i.hasNext()) { - Color color= (Color) i.next(); - if (!color.isDisposed()) - color.dispose(); - } - fColors= null; - } - - if (fBirdsEyeCursor != null) { - fBirdsEyeCursor.dispose(); - fBirdsEyeCursor= null; - } - - super.handleDispose(event); - } - - //------------------------------------------------------------------------------------------------------------- - //--- internal ------------------------------------------------------------------------------------------------ - //------------------------------------------------------------------------------------------------------------- - - /** - * Creates the specific SWT controls for the content areas. - * Clients must not call or override this method. - */ - protected void createControls(Composite composite) { - - WorkbenchHelp.setHelp(composite, ICompareContextIds.TEXT_MERGE_VIEW); - - // 1st row - if (fMarginWidth > 0) { - fAncestorCanvas= new BufferedCanvas(composite, SWT.NONE) { - public void doPaint(GC gc) { - paintSides(gc, fAncestor, fAncestorCanvas, false); - } - }; - fAncestorCanvas.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - setCurrentDiff2(handleMouseInSides(fAncestorCanvas, fAncestor, e.y), false); - } - } - ); - } - - fAncestor= createPart(composite); - fAncestor.setEditable(false); - - fSummaryHeader= new Canvas(composite, SWT.NONE); - fHeaderPainter= new HeaderPainter(); - fSummaryHeader.addPaintListener(fHeaderPainter); - updateResolveStatus(); - - // 2nd row - if (fMarginWidth > 0) { - fLeftCanvas= new BufferedCanvas(composite, SWT.NONE) { - public void doPaint(GC gc) { - paintSides(gc, fLeft, fLeftCanvas, false); - } - }; - fLeftCanvas.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - setCurrentDiff2(handleMouseInSides(fLeftCanvas, fLeft, e.y), false); - } - } - ); - } - - fLeft= createPart(composite); - fLeft.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); - fLeft.addAction(MergeSourceViewer.SAVE_ID, fLeftSaveAction); - - fRight= createPart(composite); - fRight.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); - fRight.addAction(MergeSourceViewer.SAVE_ID, fRightSaveAction); - - if (fMarginWidth > 0) { - fRightCanvas= new BufferedCanvas(composite, SWT.NONE) { - public void doPaint(GC gc) { - paintSides(gc, fRight, fRightCanvas, fSynchronizedScrolling); - } - }; - fRightCanvas.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - setCurrentDiff2(handleMouseInSides(fRightCanvas, fRight, e.y), false); - } - } - ); - } - - fScrollCanvas= new Canvas(composite, SWT.V_SCROLL); - //Rectangle trim= fScrollCanvas.computeTrim(0, 0, 0, 0); - Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0); - fTopInset= trim.y; - - fVScrollBar= fScrollCanvas.getVerticalBar(); - fVScrollBar.setIncrement(1); - fVScrollBar.setVisible(true); - fVScrollBar.addListener(SWT.Selection, - new Listener() { - public void handleEvent(Event e) { - int vpos= ((ScrollBar)e.widget).getSelection(); - scrollVertical(vpos, vpos, vpos, null); - } - } - ); - - fBirdsEyeCanvas= new BufferedCanvas(composite, SWT.NONE) { - public void doPaint(GC gc) { - paintBirdsEyeView(this, gc); - } - }; - //fBirdsEyeCanvas.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_YELLOW)); - fBirdsEyeCanvas.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - setCurrentDiff2(handlemouseInBirdsEyeView(fBirdsEyeCanvas, e.y), true); - } - } - ); - fBirdsEyeCanvas.addMouseMoveListener( - new MouseMoveListener() { - - private Cursor fLastCursor; - - public void mouseMove(MouseEvent e) { - Cursor cursor= null; - Diff diff= handlemouseInBirdsEyeView(fBirdsEyeCanvas, e.y); - if (diff != null && diff.fDirection != Differencer.NO_CHANGE) - cursor= fBirdsEyeCursor; - if (fLastCursor != cursor) { - fBirdsEyeCanvas.setCursor(cursor); - fLastCursor= cursor; - } - } - } - ); - } - - private void setCurrentDiff2(Diff diff, boolean reveal) { - if (diff != null && diff.fDirection != Differencer.NO_CHANGE) { - //fCurrentDiff= null; - setCurrentDiff(diff, reveal); - } - } - - private Diff handleMouseInSides(Canvas canvas, MergeSourceViewer tp, int my) { - - int lineHeight= tp.getTextWidget().getLineHeight(); - int visibleHeight= tp.getViewportHeight(); - - if (! fHiglightRanges) - return null; - - if (fChangeDiffs != null) { - int shift= tp.getVerticalScrollOffset() + (2-LW); - - Point region= new Point(0, 0); - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly2 && !isCurrentDiff(diff)) - continue; - - tp.getLineRange(diff.getPosition(tp), region); - int y= (region.x * lineHeight) + shift; - int h= region.y * lineHeight; - - if (y+h < 0) - continue; - if (y >= visibleHeight) - break; - - if (my >= y && my < y+h) - return diff; - } - } - return null; - } - - private Diff getDiffUnderMouse(Canvas canvas, int mx, int my, Rectangle r) { - - if (! fSynchronizedScrolling) - return null; - - int lineHeight= fLeft.getTextWidget().getLineHeight(); - int visibleHeight= fRight.getViewportHeight(); - - Point size= canvas.getSize(); - int w= size.x; - - if (! fHiglightRanges) - return null; - - if (fChangeDiffs != null) { - int lshift= fLeft.getVerticalScrollOffset(); - int rshift= fRight.getVerticalScrollOffset(); - - Point region= new Point(0, 0); - - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly2 && !isCurrentDiff(diff)) - continue; - - fLeft.getLineRange(diff.fLeftPos, region); - int ly= (region.x * lineHeight) + lshift; - int lh= region.y * lineHeight; - - fRight.getLineRange(diff.fRightPos, region); - int ry= (region.x * lineHeight) + rshift; - int rh= region.y * lineHeight; - - if (Math.max(ly+lh, ry+rh) < 0) - continue; - if (Math.min(ly, ry) >= visibleHeight) - break; - - int cx= (w-RESOLVE_SIZE)/2; - int cy= ((ly+lh/2) + (ry+rh/2) - RESOLVE_SIZE)/2; - if (my >= cy && my < cy+RESOLVE_SIZE && mx >= cx && mx < cx+RESOLVE_SIZE) { - if (r != null) { - r.x= cx+RESOLVE_SIZE/2-10; - r.y= cy+RESOLVE_SIZE/2-10; - r.width= 20; - r.height= 20; - } - return diff; - } - } - } - return null; - } - - private Diff handlemouseInBirdsEyeView(Canvas canvas, int my) { - int yy, hh; - - Point size= canvas.getSize(); - - int virtualHeight= fSynchronizedScrolling ? getVirtualHeight() : getRightHeight(); - if (virtualHeight < getViewportHeight()) - return null; - - int y= 0; - if (fAllDiffs != null) { - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - int h= fSynchronizedScrolling ? diff.getMaxDiffHeight(fShowAncestor) - : diff.getRightHeight(); - if (useChange(diff.fDirection) && !diff.fIsWhitespace) { - - yy= (y*size.y)/virtualHeight; - hh= (h*size.y)/virtualHeight; - if (hh < 3) - hh= 3; - - if (my >= yy && my < yy+hh) - return diff; - } - y+= h; - } - } - return null; - } - - private void paintBirdsEyeView(Canvas canvas, GC gc) { - - Color c; - Rectangle r= new Rectangle(0, 0, 0, 0); - int yy, hh; - - Point size= canvas.getSize(); - - int virtualHeight= fSynchronizedScrolling ? getVirtualHeight() : getRightHeight(); - if (virtualHeight < getViewportHeight()) - return; - - Display display= canvas.getDisplay(); - int y= 0; - if (fAllDiffs != null) { - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - int h= fSynchronizedScrolling ? diff.getMaxDiffHeight(fShowAncestor) - : diff.getRightHeight(); - - if (useChange(diff.fDirection) && !diff.fIsWhitespace) { - - yy= (y*size.y)/virtualHeight; - hh= (h*size.y)/virtualHeight; - if (hh < 3) - hh= 3; - - c= getColor(display, getFillColor(diff)); - if (c != null) { - gc.setBackground(c); - gc.fillRectangle(BIRDS_EYE_VIEW_INSET, yy, size.x-(2*BIRDS_EYE_VIEW_INSET),hh); - } - c= getColor(display, getStrokeColor(diff)); - if (c != null) { - gc.setForeground(c); - r.x= BIRDS_EYE_VIEW_INSET; - r.y= yy; - r.width= size.x-(2*BIRDS_EYE_VIEW_INSET)-1; - r.height= hh; - if (diff == fCurrentDiff || - (fCurrentDiff != null && diff == fCurrentDiff.fParent)) { - gc.setLineWidth(2); - r.x++; - r.y++; - r.width--; - r.height--; - } else { - gc.setLineWidth(1); - } - gc.drawRectangle(r); - } - } - - y+= h; - } - } - } - - private void refreshBirdsEyeView() { - if (fBirdsEyeCanvas != null) - fBirdsEyeCanvas.redraw(); - } - - /** - * Called whenever setFocus() is called on the ContentViewer's top level SWT Composite. - * This implementation sets the focus to the first enabled text widget. - */ - /* package */ boolean internalSetFocus() { - if (fFocusPart == null) { - if (fLeft != null && fLeft.getEnabled()) { - fFocusPart= fLeft; - } else if (fRight != null && fRight.getEnabled()) { - fFocusPart= fRight; - } else if (fAncestor != null && fAncestor.getEnabled()) { - fFocusPart= fAncestor; - } - } - if (fFocusPart != null) { - StyledText st= fFocusPart.getTextWidget(); - if (st != null) - return st.setFocus(); - } - return false; // could not set focus - } - - - class HoverResizer extends Resizer { - Canvas fCanvas; - public HoverResizer(Canvas c, int dir) { - super(c, dir); - fCanvas= c; - } - public void mouseMove(MouseEvent e) { - if (!fIsDown && showResolveUI() && handleMouseMoveOverCenter(fCanvas, e.x, e.y)) - return; - super.mouseMove(e); - } - } - - /** - * Creates the central Canvas. - * Called from ContentMergeViewer. - */ - /* package */ Control createCenter(Composite parent) { - if (fSynchronizedScrolling) { - final Canvas canvas= new BufferedCanvas(parent, SWT.NONE) { - public void doPaint(GC gc) { - paintCenter(this, gc); - } - }; - if (!fUseResolveUI) { - new Resizer(canvas, HORIZONTAL); - } else { - - new HoverResizer(canvas, HORIZONTAL); - - fCenterButton= new Button(canvas, "carbon".equals(SWT.getPlatform()) ? SWT.FLAT : SWT.PUSH); //$NON-NLS-1$ - fCenterButton.setText("<"); //$NON-NLS-1$ - fCenterButton.pack(); - fCenterButton.setVisible(false); - fCenterButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - fCenterButton.setVisible(false); - if (fButtonDiff != null) { - setCurrentDiff(fButtonDiff, false); - copy(fCurrentDiff, false, fCurrentDiff.fDirection == RangeDifference.CONFLICT); - } - } - } - ); - } - - return canvas; - } - return super.createCenter(parent); - } - - private boolean handleMouseMoveOverCenter(Canvas canvas, int x, int y) { - Rectangle r= new Rectangle(0, 0, 0, 0); - Diff diff= getDiffUnderMouse(canvas, x, y, r); - if (diff != null && !diff.isUnresolvedIncomingOrConflicting()) - diff= null; - if (diff != fButtonDiff) { - if (diff != null) { - if (fLeft.isEditable()) { - fButtonDiff= diff; - fCenterButton.setText("<"); //$NON-NLS-1$ - String tt= fCopyDiffRightToLeftItem.getAction().getToolTipText(); - fCenterButton.setToolTipText(tt); - fCenterButton.setBounds(r); - fCenterButton.setVisible(true); - } else if (fRight.isEditable()) { - fButtonDiff= diff; - fCenterButton.setText(">"); //$NON-NLS-1$ - String tt= fCopyDiffLeftToRightItem.getAction().getToolTipText(); - fCenterButton.setToolTipText(tt); - fCenterButton.setBounds(r); - fCenterButton.setVisible(true); - } else - fButtonDiff= null; - } else { - fCenterButton.setVisible(false); - fButtonDiff= null; - } - } - return fButtonDiff != null; - } - - /** - * Returns width of central canvas. - * Overridden from ContentMergeViewer. - */ - /* package */ int getCenterWidth() { - if (fSynchronizedScrolling) - return CENTER_WIDTH; - return super.getCenterWidth(); - } - - /** - * Creates and initializes a text part. - */ - private MergeSourceViewer createPart(Composite parent) { - - final MergeSourceViewer part= new MergeSourceViewer(parent, getResourceBundle()); - final StyledText te= part.getTextWidget(); - - if (!fConfirmSave) - part.hideSaveAction(); - - te.addPaintListener( - new PaintListener() { - public void paintControl(PaintEvent e) { - paint(e, part); - } - } - ); - te.addKeyListener( - new KeyAdapter() { - public void keyPressed(KeyEvent e) { - handleSelectionChanged(part); - } - } - ); - te.addMouseListener( - new MouseAdapter() { - public void mouseDown(MouseEvent e) { - //syncViewport(part); - handleSelectionChanged(part); - } - } - ); - - te.addFocusListener( - new FocusAdapter() { - public void focusGained(FocusEvent fe) { - fFocusPart= part; - connectGlobalActions(fFocusPart); - } - public void focusLost(FocusEvent fe) { - connectGlobalActions(null); - } - } - ); - - part.addViewportListener( - new IViewportListener() { - public void viewportChanged(int verticalPosition) { - syncViewport(part); - } - } - ); - - Font font= JFaceResources.getFont(fSymbolicFontName); - if (font != null) - te.setFont(font); - - if (fBackground != null) // not default - te.setBackground(getColor(parent.getDisplay(), fBackground)); - - configureTextViewer(part); - - return part; - } - - private void connectGlobalActions(MergeSourceViewer part) { - IActionBars actionBars= Utilities.findActionBars(fComposite); - if (actionBars != null) { - for (int i= 0; i < GLOBAL_ACTIONS.length; i++) { - IAction action= null; - if (part != null) { - action= part.getAction(TEXT_ACTIONS[i]); - if (action == null && TEXT_ACTIONS[i].equals(MergeSourceViewer.SAVE_ID)) { - if (part == fLeft) - action= fLeftSaveAction; - else - action= fRightSaveAction; - } - } - actionBars.setGlobalActionHandler(GLOBAL_ACTIONS[i], action); - } - actionBars.updateActionBars(); - } - } - - ITypedElement getLeg(char type, Object input) { - if (input instanceof ICompareInput) { - switch (type) { - case 'A': - return ((ICompareInput)input).getAncestor(); - case 'L': - return ((ICompareInput)input).getLeft(); - case 'R': - return ((ICompareInput)input).getRight(); - } - } - return null; - } - - IDocument getDocument(char type, Object input) { - ITypedElement te= getLeg(type, input); - if (te instanceof IDocument) - return (IDocument) te; - if (te instanceof IDocumentRange) - return ((IDocumentRange) te).getDocument(); - if (te instanceof IStreamContentAccessor) - return DocumentManager.get(te); - return null; - } - - IDocument getDocument2(char type, Object input) { - IDocument doc= getDocument(type, input); - if (doc != null) - return doc; - - if (input instanceof IDiffElement) { - IDiffContainer parent= ((IDiffElement)input).getParent(); - return getDocument(type, parent); - } - return null; - } - - /** - * Returns true if the given inputs map to the same documents - */ - boolean sameDoc(char type, Object newInput, Object oldInput) { - IDocument newDoc= getDocument2(type, newInput); - IDocument oldDoc= getDocument2(type, oldInput); - return newDoc == oldDoc; - } - - /** - * Overridden to prevent save confirmation if new input is sub document of current input. - * @param newInput the new input of this viewer, or <code>null</code> if there is no new input - * @param oldInput the old input element, or <code>null</code> if there was previously no input - * @return <code>true</code> if saving was successful, or if the user didn't want to save (by pressing 'NO' in the confirmation dialog). - * @since 2.0 - */ - protected boolean doSave(Object newInput, Object oldInput) { - - if (oldInput != null && newInput != null) { - // check whether underlying documents have changed. - if (sameDoc('A', newInput, oldInput) && - sameDoc('L', newInput, oldInput) && - sameDoc('R', newInput, oldInput)) { - if (DEBUG) System.out.println("----- Same docs !!!!"); //$NON-NLS-1$ - return false; - } - } - - if (DEBUG) System.out.println("***** New docs !!!!"); //$NON-NLS-1$ - - IDocument aDoc= getDocument2('A', oldInput); - DocumentManager.remove(aDoc); - IDocument lDoc= getDocument2('L', oldInput); - DocumentManager.remove(lDoc); - IDocument rDoc= getDocument2('R', oldInput); - DocumentManager.remove(rDoc); - - if (DEBUG) - DocumentManager.dump(); - - return super.doSave(newInput, oldInput); - } - - private ITypedElement getParent(char type) { - Object input= getInput(); - if (input instanceof IDiffElement) { - IDiffContainer parent= ((IDiffElement)input).getParent(); - return getLeg(type, parent); - } - return null; - } - - /** - * Initializes the text viewers of the three content areas with the given input objects. - * Subclasses may extend. - */ - protected void updateContent(Object ancestor, Object left, Object right) { - - boolean emptyInput= (ancestor == null && left == null && right == null); - - int n= 0; - if (left != null) - n++; - if (right != null) - n++; - fHiglightRanges= n > 1; - - // clear stuff - fCurrentDiff= null; - fChangeDiffs= null; - fAllDiffs= null; - fEndOfDocReached= false; - - 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()) { - if (true) { // see #13844 - selectFirstDiff(); - } else { - // delay so that StyledText widget gets a chance to resize itself - // (otherwise selectFirstDiff would not know its visible area) - fComposite.getDisplay().asyncExec( - new Runnable() { - public void run() { - selectFirstDiff(); - } - } - ); - } - } - } - - private void updateDiffBackground(Diff diff) { - - if (! fHiglightRanges) - return; - - if (diff == null || diff.fIsToken) - return; - - if (fShowCurrentOnly && !isCurrentDiff(diff)) - return; - - Color c= getColor(null, getFillColor(diff)); - if (c == null) - return; - - if (isThreeWay()) - fAncestor.setLineBackground(diff.fAncestorPos, c); - fLeft.setLineBackground(diff.fLeftPos, c); - fRight.setLineBackground(diff.fRightPos, c); - } - - private void updateAllDiffBackgrounds(Display display) { - if (fChangeDiffs != null) { - boolean threeWay= isThreeWay(); - Iterator iter= fChangeDiffs.iterator(); - while (iter.hasNext()) { - Diff diff= (Diff) iter.next(); - Color c= getColor(display, getFillColor(diff)); - if (threeWay) - fAncestor.setLineBackground(diff.fAncestorPos, c); - fLeft.setLineBackground(diff.fLeftPos, c); - fRight.setLineBackground(diff.fRightPos, c); - } - } - } - - boolean isCurrentDiff(Diff diff) { - if (diff == null) - return false; - if (diff == fCurrentDiff) - return true; - if (fCurrentDiff != null && fCurrentDiff.fParent == diff) - return true; - return false; - } - - /** - * Called whenver one of the documents changes. - * Sets the dirty state of this viewer and updates the lines. - * Implements IDocumentListener. - */ - private void documentChanged(DocumentEvent e) { - - IDocument doc= e.getDocument(); - - if (doc == fLeft.getDocument()) { - 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; -// } - - /** - * This method is called if a range of text on one side is copied into an empty subdocument - * on the other side. The method returns the position where the subdocument is placed into the base document. - * This default implementation determines the position by using the text range differencer. - * However this position is not always optimal for specific types of text. - * So subclasses (which are awrae of the type of text they are dealing with) - * may override this method to find a better position where to insert a newly added - * piece of text. - * @param type the side for which the insertion position should be determined: 'A' for ancestor, 'L' for left hand side, 'R' for right hand side. - * @param input the current input object of this viewer - * @since 2.0 - */ - protected int findInsertionPosition(char type, ICompareInput input) { - - ITypedElement other= null; - char otherType= 0; - - switch (type) { - case 'A': - other= input.getLeft(); - otherType= 'L'; - if (other == null) { - other= input.getRight(); - otherType= 'R'; - } - break; - case 'L': - other= input.getRight(); - otherType= 'R'; - if (other == null) { - other= input.getAncestor(); - otherType= 'A'; - } - break; - case 'R': - other= input.getLeft(); - otherType= 'L'; - if (other == null) { - other= input.getAncestor(); - otherType= 'A'; - } - break; - } - - if (other instanceof IDocumentRange) { - IDocumentRange dr= (IDocumentRange) other; - Position p= dr.getRange(); - Diff diff= findDiff(otherType, p.offset); - if (diff != null) { - switch (type) { - case 'A': - if (diff.fAncestorPos != null) - return diff.fAncestorPos.offset; - break; - case 'L': - if (diff.fLeftPos != null) - return diff.fLeftPos.offset; - break; - case 'R': - if (diff.fRightPos != null) - return diff.fRightPos.offset; - break; - } - } - } - return 0; - } - - /** - * Returns true if a new Document could be installed. - */ - private boolean setDocument(MergeSourceViewer tp, char type, Object o) { - - if (tp == null) - return false; - - IDocument newDoc= null; - Position range= null; - - if (o instanceof IDocumentRange) { - newDoc= ((IDocumentRange)o).getDocument(); - range= ((IDocumentRange)o).getRange(); - - } else if (o instanceof IDocument) { - newDoc= (IDocument) o; - - } else if (o instanceof IStreamContentAccessor) { - - newDoc= DocumentManager.get(o); - if (newDoc == null) { - IStreamContentAccessor sca= (IStreamContentAccessor) o; - String s= null; - - try { - s= Utilities.readString(sca.getContents()); - } catch (CoreException ex) { - } - - newDoc= new Document(s != null ? s : ""); //$NON-NLS-1$ - DocumentManager.put(o, newDoc); - IDocumentPartitioner partitioner= getDocumentPartitioner(); - if (partitioner != null) { - newDoc.setDocumentPartitioner(partitioner); - partitioner.connect(newDoc); - } - } - } else if (o == null) { // deletion on one side - - ITypedElement parent= getParent(type); // we try to find an insertion position within the deletion's parent - - if (parent instanceof IDocumentRange) { - newDoc= ((IDocumentRange)parent).getDocument(); - newDoc.addPositionCategory(IDocumentRange.RANGE_CATEGORY); - Object input= getInput(); - range= getNewRange(type, input); - if (range == null) { - int pos= 0; - if (input instanceof ICompareInput) - pos= findInsertionPosition(type, (ICompareInput)input); - range= new Position(pos, 0); - try { - newDoc.addPosition(IDocumentRange.RANGE_CATEGORY, range); - } catch (BadPositionCategoryException ex) { - if (DEBUG) System.out.println("BadPositionCategoryException: " + ex); //$NON-NLS-1$ - } catch (BadLocationException ex) { - if (DEBUG) System.out.println("BadLocationException: " + ex); //$NON-NLS-1$ - } - addNewRange(type, input, range); - } - } else if (parent instanceof IDocument) { - newDoc= ((IDocumentRange)o).getDocument(); - } - } - - boolean enabled= true; - if (newDoc == null) { - //System.out.println("setDocument: create new Document"); - newDoc= new Document(""); //$NON-NLS-1$ - enabled= false; - } - - IDocument oldDoc= tp.getDocument(); - - if (newDoc != oldDoc) { - - // got a new document - - unsetDocument(tp); - - if (newDoc != null) { - newDoc.addPositionCategory(IDocumentRange.RANGE_CATEGORY); - if (fPositionUpdater == null) - fPositionUpdater= new ChildPositionUpdater(IDocumentRange.RANGE_CATEGORY); - else - newDoc.removePositionUpdater(fPositionUpdater); - newDoc.addPositionUpdater(fPositionUpdater); - } - - // install new document - if (newDoc != null) { - - tp.setRegion(range); - if (fSubDoc) { - if (range != null) { - IRegion r= normalizeDocumentRegion(newDoc, toRegion(range)); - tp.setDocument(newDoc, r.getOffset(), r.getLength()); - } else - tp.setDocument(newDoc); - } else - tp.setDocument(newDoc); - - newDoc.addDocumentListener(fDocumentListener); - } - - } else { // same document but different range - - tp.setRegion(range); - if (fSubDoc) { - if (range != null) { - IRegion r= normalizeDocumentRegion(newDoc, toRegion(range)); - tp.setVisibleRegion(r.getOffset(), r.getLength()); - } else - tp.resetVisibleRegion(); - } else - tp.resetVisibleRegion(); - } - - tp.setEnabled(enabled); - - return enabled; - } - - private Position getNewRange(char type, Object input) { - switch (type) { - case 'A': - return (Position) fNewAncestorRanges.get(input); - case 'L': - return (Position) fNewLeftRanges.get(input); - case 'R': - return (Position) fNewRightRanges.get(input); - } - return null; - } - - private void addNewRange(char type, Object input, Position range) { - switch (type) { - case 'A': - fNewAncestorRanges.put(input, range); - break; - case 'L': - fNewLeftRanges.put(input, range); - break; - case 'R': - fNewRightRanges.put(input, range); - break; - } - } - - private void unsetDocument(MergeSourceViewer tp) { - IDocument oldDoc= tp.getDocument(); - if (oldDoc != null) { - // deinstall old positions - if (fPositionUpdater != null) - oldDoc.removePositionUpdater(fPositionUpdater); - try { - oldDoc.removePositionCategory(IDocumentRange.RANGE_CATEGORY); - } catch (BadPositionCategoryException ex) { - } - - oldDoc.removeDocumentListener(fDocumentListener); - } - } - - /** - * Returns the contents of the underlying document as an array of bytes. - * - * @param left if <code>true</code> the contents of the left side is returned; otherwise the right side - * @return the contents of the left or right document or null - */ - protected byte[] getContents(boolean left) { - MergeSourceViewer v= left ? fLeft : fRight; - if (v != null) { - IDocument d= v.getDocument(); - if (d != null) { - String contents= d.get(); - if (contents != null) { - byte[] bytes; - try { - bytes= contents.getBytes(ResourcesPlugin.getEncoding()); - } catch(UnsupportedEncodingException ex) { - // use default encoding - bytes= contents.getBytes(); - } - return bytes; - } - } - } - return null; - } - - private IRegion normalizeDocumentRegion(IDocument doc, IRegion region) { - - if (region == null || doc == null) - return region; - - int maxLength= doc.getLength(); - - int start= region.getOffset(); - if (start < 0) - start= 0; - else if (start > maxLength) - start= maxLength; - - int length= region.getLength(); - if (length < 0) - length= 0; - else if (start + length > maxLength) - length= maxLength - start; - - return new Region(start, length); - } - - protected final void handleResizeAncestor(int x, int y, int width, int height) { - if (width > 0) { - Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0); - int scrollbarHeight= trim.height; - if (Utilities.okToUse(fAncestorCanvas)) - fAncestorCanvas.setVisible(true); - if (fAncestor.isControlOkToUse()) - fAncestor.getTextWidget().setVisible(true); - - if (fAncestorCanvas != null) { - fAncestorCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight); - x+= fMarginWidth; - width-= fMarginWidth; - } - fAncestor.getTextWidget().setBounds(x, y, width, height); - } else { - if (Utilities.okToUse(fAncestorCanvas)) - fAncestorCanvas.setVisible(false); - if (fAncestor.isControlOkToUse()) { - StyledText t= fAncestor.getTextWidget(); - t.setVisible(false); - t.setBounds(0, 0, 0, 0); - if (fFocusPart == fAncestor) { - fFocusPart= fLeft; - fFocusPart.getTextWidget().setFocus(); - } - } - } - } - - /** - * Lays out everything. - */ - protected final void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2, int height) { - - if (fBirdsEyeCanvas != null) - width2-= BIRDS_EYE_VIEW_WIDTH; - - Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0); - int scrollbarHeight= trim.height; - if (fIsCarbon) - scrollbarHeight-= 3; // get rid of the focus ring - - Composite composite= (Composite) getControl(); - - int leftTextWidth= width1; - if (fLeftCanvas != null) { - fLeftCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight); - x+= fMarginWidth; - leftTextWidth-= fMarginWidth; - } - - fLeft.getTextWidget().setBounds(x, y, leftTextWidth, height); - x+= leftTextWidth; - - if (fCenter == null || fCenter.isDisposed()) - fCenter= createCenter(composite); - fCenter.setBounds(x, y, centerWidth, height-scrollbarHeight); - x+= centerWidth; - - if (!fSynchronizedScrolling) { // canvas is to the left of text - if (fRightCanvas != null) { - fRightCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight); - fRightCanvas.redraw(); - x+= fMarginWidth; - } - // we draw the canvas to the left of the text widget - } - - int scrollbarWidth= 0; - if (fSynchronizedScrolling && fScrollCanvas != null) { - //scrollbarWidth= fScrollCanvas.computeTrim(0, 0, 0, 0).width; - scrollbarWidth= fLeft.getTextWidget().computeTrim(0, 0, 0, 0).width; - if (fIsCarbon) - scrollbarWidth-= 6; // get rid of the focus ring - } - int rightTextWidth= width2-scrollbarWidth; - if (fRightCanvas != null) - rightTextWidth-= fMarginWidth; - fRight.getTextWidget().setBounds(x, y, rightTextWidth, height); - x+= rightTextWidth; - - if (fSynchronizedScrolling) { - if (fRightCanvas != null) { // canvas is to the right of the text - fRightCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight); - x+= fMarginWidth; - } - if (fScrollCanvas != null) - fScrollCanvas.setBounds(x, y, scrollbarWidth, height-scrollbarHeight); - } - - if (fBirdsEyeCanvas != null) { - int verticalScrollbarButtonHeight= scrollbarWidth; - int horizontalScrollbarButtonHeight= scrollbarHeight; - if (fIsCarbon) { - verticalScrollbarButtonHeight+= 2; - horizontalScrollbarButtonHeight= 18; - } - if (fSummaryHeader != null) - fSummaryHeader.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, verticalScrollbarButtonHeight); - y+= verticalScrollbarButtonHeight; - fBirdsEyeCanvas.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, height-(2*verticalScrollbarButtonHeight+horizontalScrollbarButtonHeight)); - } - - // doesn't work since TextEditors don't have their correct size yet. - updateVScrollBar(); - refreshBirdsEyeView(); - } - - /** - * Track selection changes to update the current Diff. - */ - private void handleSelectionChanged(MergeSourceViewer tw) { - Point p= tw.getSelectedRange(); - Diff d= findDiff(tw, p.x, p.x+p.y); - updateStatus(d); - setCurrentDiff(d, false); // don't select or reveal - } - - private static IRegion toRegion(Position position) { - if (position != null) - return new Region(position.getOffset(), position.getLength()); - return null; - } - - //---- the differencing - - private static int maxWork(IRangeComparator a, IRangeComparator l, IRangeComparator r) { - int ln= l.getRangeCount(); - int rn= r.getRangeCount(); - if (a != null) { - int an= a.getRangeCount(); - return (2 * Math.max(an, ln)) + (2 * Math.max(an, rn)); - } - return 2 * Math.max(ln, rn); - } - - /** - * Perform a two level 2- or 3-way diff. - * The first level is based on line comparison, the second level on token comparison. - */ - private void doDiff() { - - fAllDiffs= new ArrayList(); - fChangeDiffs= new ArrayList(); - fCurrentDiff= null; - - IDocument aDoc= null; - IDocument lDoc= fLeft.getDocument(); - IDocument rDoc= fRight.getDocument(); - if (lDoc == null || rDoc == null) - return; - - Position aRegion= null; - Position lRegion= fLeft.getRegion(); - Position rRegion= fRight.getRegion(); - - boolean threeWay= isThreeWay(); - - if (threeWay && !fIgnoreAncestor) { - aDoc= fAncestor.getDocument(); - aRegion= fAncestor.getRegion(); - } - - fAncestor.resetLineBackground(); - fLeft.resetLineBackground(); - fRight.resetLineBackground(); - - boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false); - - DocLineComparator sright= new DocLineComparator(rDoc, toRegion(rRegion), ignoreWhiteSpace); - DocLineComparator sleft= new DocLineComparator(lDoc, toRegion(lRegion), ignoreWhiteSpace); - DocLineComparator sancestor= null; - if (aDoc != null) - sancestor= new DocLineComparator(aDoc, toRegion(aRegion), ignoreWhiteSpace); - - if (!fSubDoc && rRegion != null && lRegion != null) { - // we have to add a diff for the ignored lines - - int astart= 0; - int as= 0; - if (aRegion != null) { - astart= aRegion.getOffset(); - as= Math.max(0, astart-1); - } - int ys= Math.max(0, lRegion.getOffset()-1); - int ms= Math.max(0, rRegion.getOffset()-1); - - if (as > 0 || ys > 0 || ms > 0) { - Diff diff= new Diff(null, RangeDifference.NOCHANGE, - aDoc, aRegion, 0, astart, - lDoc, lRegion, 0, lRegion.getOffset(), - rDoc, rRegion, 0, rRegion.getOffset()); - fAllDiffs.add(diff); - } - } - - final ResourceBundle bundle= getResourceBundle(); - - final Object[] result= new Object[1]; - final DocLineComparator sa= sancestor, sl= sleft, sr= sright; - IRunnableWithProgress runnable= new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - String progressTitle= Utilities.getString(bundle, "compareProgressTask.title"); //$NON-NLS-1$ - monitor.beginTask(progressTitle, maxWork(sa, sl, sr)); - try { - result[0]= RangeDifferencer.findRanges(monitor, sa, sl, sr); - } catch (OutOfMemoryError ex) { - System.gc(); - throw new InvocationTargetException(ex); - } - if (monitor.isCanceled()) { // cancelled - throw new InterruptedException(); - } - monitor.done(); - } - }; - - RangeDifference[] e= null; - try { - TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable); - e= (RangeDifference[]) result[0]; - } catch (InvocationTargetException ex) { - String title= Utilities.getString(bundle, "tooComplexError.title"); //$NON-NLS-1$ - String format= Utilities.getString(bundle, "tooComplexError.format"); //$NON-NLS-1$ - String msg= MessageFormat.format(format, new Object[] { Integer.toString(TIMEOUT/1000) } ); - MessageDialog.openError(fComposite.getShell(), title, msg); - e= null; - } catch (InterruptedException ex) { - // - } - - if (e == null) { - // we create a NOCHANGE range for the whole document - Diff diff= new Diff(null, RangeDifference.NOCHANGE, - aDoc, aRegion, 0, aDoc != null ? aDoc.getLength() : 0, - lDoc, lRegion, 0, lDoc.getLength(), - rDoc, rRegion, 0, rDoc.getLength()); - - fAllDiffs.add(diff); - } else { - for (int i= 0; i < e.length; i++) { - String a= null, s= null, d= null; - RangeDifference es= e[i]; - - int kind= es.kind(); - - int ancestorStart= 0; - int ancestorEnd= 0; - if (sancestor != null) { - ancestorStart= sancestor.getTokenStart(es.ancestorStart()); - ancestorEnd= getTokenEnd2(sancestor, es.ancestorStart(), es.ancestorLength()); - } - - int leftStart= sleft.getTokenStart(es.leftStart()); - int leftEnd= getTokenEnd2(sleft, es.leftStart(), es.leftLength()); - - int rightStart= sright.getTokenStart(es.rightStart()); - int rightEnd= getTokenEnd2(sright, es.rightStart(), es.rightLength()); - - Diff diff= new Diff(null, kind, - aDoc, aRegion, ancestorStart, ancestorEnd, - lDoc, lRegion, leftStart, leftEnd, - rDoc, rRegion, rightStart, rightEnd); - - fAllDiffs.add(diff); // remember all range diffs for scrolling - - if (ignoreWhiteSpace) { - if (sancestor != null) - a= extract2(aDoc, sancestor, es.ancestorStart(), es.ancestorLength()); - s= extract2(lDoc, sleft, es.leftStart(), es.leftLength()); - d= extract2(rDoc, sright, es.rightStart(), es.rightLength()); - - if ((a == null || a.trim().length() == 0) && s.trim().length() == 0 && d.trim().length() == 0) { - diff.fIsWhitespace= true; - continue; - } - } - - if (useChange(kind)) { - fChangeDiffs.add(diff); // here we remember only the real diffs - updateDiffBackground(diff); - - if (s == null) - s= extract2(lDoc, sleft, es.leftStart(), es.leftLength()); - if (d == null) - d= extract2(rDoc, sright, es.rightStart(), es.rightLength()); - - if (s.length() > 0 && d.length() > 0) { - if (a == null && sancestor != null) - a= extract2(aDoc, sancestor, es.ancestorStart(), es.ancestorLength()); - if (USE_MERGING_TOKEN_DIFF) - mergingTokenDiff(diff, aDoc, a, rDoc, d, lDoc, s); - else - simpleTokenDiff(diff, aDoc, a, rDoc, d, lDoc, s); - } - } - } - } - - if (!fSubDoc && rRegion != null && lRegion != null) { - // we have to add a diff for the ignored lines - - int aEnd= 0; - int aLen= 0; - if (aRegion != null && aDoc != null) { - aEnd= aRegion.getOffset()+aRegion.getLength(); - aLen= aDoc.getLength(); - } - Diff diff= new Diff(null, RangeDifference.NOCHANGE, - aDoc, aRegion, aEnd, aLen, - lDoc, lRegion, lRegion.getOffset()+lRegion.getLength(), lDoc.getLength(), - rDoc, rRegion, rRegion.getOffset()+rRegion.getLength(), rDoc.getLength()); - fAllDiffs.add(diff); - } - } - - private Diff findDiff(char type, int pos) { - - IDocument aDoc= null; - IDocument lDoc= fLeft.getDocument(); - IDocument rDoc= fRight.getDocument(); - if (lDoc == null || rDoc == null) - return null; - - Position aRegion= null; - Position lRegion= null; - Position rRegion= null; - - boolean threeWay= isThreeWay(); - - if (threeWay && !fIgnoreAncestor) - aDoc= fAncestor.getDocument(); - - boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false); - - DocLineComparator sright= new DocLineComparator(rDoc, toRegion(rRegion), ignoreWhiteSpace); - DocLineComparator sleft= new DocLineComparator(lDoc, toRegion(lRegion), ignoreWhiteSpace); - DocLineComparator sancestor= null; - if (aDoc != null) - sancestor= new DocLineComparator(aDoc, toRegion(aRegion), ignoreWhiteSpace); - - final ResourceBundle bundle= getResourceBundle(); - - final Object[] result= new Object[1]; - final DocLineComparator sa= sancestor, sl= sleft, sr= sright; - IRunnableWithProgress runnable= new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - String progressTitle= Utilities.getString(bundle, "compareProgressTask.title"); //$NON-NLS-1$ - monitor.beginTask(progressTitle, maxWork(sa, sl, sr)); - try { - result[0]= RangeDifferencer.findRanges(monitor, sa, sl, sr); - } catch (OutOfMemoryError ex) { - System.gc(); - throw new InvocationTargetException(ex); - } - if (monitor.isCanceled()) { // cancelled - throw new InterruptedException(); - } - monitor.done(); - } - }; - - RangeDifference[] e= null; - try { - TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable); - e= (RangeDifference[]) result[0]; - } catch (InvocationTargetException ex) { - String title= Utilities.getString(bundle, "tooComplexError.title"); //$NON-NLS-1$ - String format= Utilities.getString(bundle, "tooComplexError.format"); //$NON-NLS-1$ - String msg= MessageFormat.format(format, new Object[] { Integer.toString(TIMEOUT/1000) } ); - MessageDialog.openError(fComposite.getShell(), title, msg); - e= null; - } catch (InterruptedException ex) { - // - } - - if (e != null) { - for (int i= 0; i < e.length; i++) { - RangeDifference es= e[i]; - - int kind= es.kind(); - - int ancestorStart= 0; - int ancestorEnd= 0; - if (sancestor != null) { - ancestorStart= sancestor.getTokenStart(es.ancestorStart()); - ancestorEnd= getTokenEnd2(sancestor, es.ancestorStart(), es.ancestorLength()); - } - - int leftStart= sleft.getTokenStart(es.leftStart()); - int leftEnd= getTokenEnd2(sleft, es.leftStart(), es.leftLength()); - - int rightStart= sright.getTokenStart(es.rightStart()); - int rightEnd= getTokenEnd2(sright, es.rightStart(), es.rightLength()); - - Diff diff= new Diff(null, kind, - aDoc, aRegion, ancestorStart, ancestorEnd, - lDoc, lRegion, leftStart, leftEnd, - rDoc, rRegion, rightStart, rightEnd); - - if (diff.isInRange(type, pos)) - return diff; - } - } - - return null; - } - - /** - * Returns true if kind of change should be shown. - */ - private boolean useChange(int kind) { - if (kind == RangeDifference.NOCHANGE) - return false; - if (kind == RangeDifference.ANCESTOR) - return fShowPseudoConflicts; - return true; - } - - private int getTokenEnd(ITokenComparator tc, int start, int count) { - if (count <= 0) - return tc.getTokenStart(start); - int index= start + count - 1; - return tc.getTokenStart(index) + tc.getTokenLength(index); - } - - private static int getTokenEnd2(ITokenComparator tc, int start, int length) { - return tc.getTokenStart(start + length); - } - - /** - * Returns the content of lines in the specified range as a String. - * This includes the line separators. - * - * @param doc the document from which to extract the characters - * @param start index of first line - * @param length number of lines - * @return the contents of the specified line range as a String - */ - private String extract2(IDocument doc, ITokenComparator tc, int start, int length) { - int count= tc.getRangeCount(); - if (length > 0 && count > 0) { - -// -// int startPos= tc.getTokenStart(start); -// int endPos= startPos; -// -// if (length > 1) -// endPos= tc.getTokenStart(start + (length-1)); -// endPos+= tc.getTokenLength(start + (length-1)); -// - - int startPos= tc.getTokenStart(start); - int endPos; - - if (length == 1) { - endPos= startPos + tc.getTokenLength(start); - } else { - endPos= tc.getTokenStart(start + length); - } - - try { - return doc.get(startPos, endPos - startPos); - } catch (BadLocationException e) { - } - - } - return ""; //$NON-NLS-1$ - } - - /** - * Performs a token based 3-way diff on the character range specified by the given baseDiff. - */ - private void simpleTokenDiff(final Diff baseDiff, - IDocument ancestorDoc, String a, - IDocument rightDoc, String d, - IDocument leftDoc, String s) { - - int ancestorStart= 0; - ITokenComparator sa= null; - if (ancestorDoc != null) { - ancestorStart= baseDiff.fAncestorPos.getOffset(); - sa= createTokenComparator(a); - } - - int rightStart= baseDiff.fRightPos.getOffset(); - ITokenComparator sm= createTokenComparator(d); - - int leftStart= baseDiff.fLeftPos.getOffset(); - ITokenComparator sy= createTokenComparator(s); - - RangeDifference[] e= RangeDifferencer.findRanges(sa, sy, sm); - for (int i= 0; i < e.length; i++) { - RangeDifference es= e[i]; - int kind= es.kind(); - if (kind != RangeDifference.NOCHANGE) { - - int ancestorStart2= ancestorStart; - int ancestorEnd2= ancestorStart; - if (ancestorDoc != null) { - ancestorStart2 += sa.getTokenStart(es.ancestorStart()); - ancestorEnd2 += getTokenEnd(sa, es.ancestorStart(), es.ancestorLength()); - } - - int leftStart2= leftStart + sy.getTokenStart(es.leftStart()); - int leftEnd2= leftStart + getTokenEnd(sy, es.leftStart(), es.leftLength()); - - int rightStart2= rightStart + sm.getTokenStart(es.rightStart()); - int rightEnd2= rightStart + getTokenEnd(sm, es.rightStart(), es.rightLength()); - - Diff diff= new Diff(baseDiff, kind, - ancestorDoc, null, ancestorStart2, ancestorEnd2, - leftDoc, null, leftStart2, leftEnd2, - rightDoc, null, rightStart2, rightEnd2); - - // ensure that token diff is smaller than basediff - int leftS= baseDiff.fLeftPos.offset; - int leftE= baseDiff.fLeftPos.offset+baseDiff.fLeftPos.length; - int rightS= baseDiff.fRightPos.offset; - int rightE= baseDiff.fRightPos.offset+baseDiff.fRightPos.length; - if (leftS != leftStart2 || leftE != leftEnd2 || - rightS != rightStart2 || rightE != rightEnd2) { - diff.fIsToken= true; - // add to base Diff - baseDiff.add(diff); - } - } - } - } - - /** - * Performs a "smart" token based 3-way diff on the character range specified by the given baseDiff. - * It is "smart" because it tries to minimize the number of token diffs by merging them. - */ - private void mergingTokenDiff(Diff baseDiff, - IDocument ancestorDoc, String a, - IDocument rightDoc, String d, - IDocument leftDoc, String s) { - ITokenComparator sa= null; - int ancestorStart= 0; - if (ancestorDoc != null) { - sa= createTokenComparator(a); - ancestorStart= baseDiff.fAncestorPos.getOffset(); - } - - int rightStart= baseDiff.fRightPos.getOffset(); - ITokenComparator sm= createTokenComparator(d); - - int leftStart= baseDiff.fLeftPos.getOffset(); - ITokenComparator sy= createTokenComparator(s); - - RangeDifference[] r= RangeDifferencer.findRanges(sa, sy, sm); - for (int i= 0; i < r.length; i++) { - RangeDifference es= r[i]; - // determine range of diffs in one line - int start= i; - int leftLine= -1; - int rightLine= -1; - try { - leftLine= leftDoc.getLineOfOffset(leftStart+sy.getTokenStart(es.leftStart())); - rightLine= rightDoc.getLineOfOffset(rightStart+sm.getTokenStart(es.rightStart())); - } catch (BadLocationException e) { - } - i++; - for (; i < r.length; i++) { - es= r[i]; - try { - if (leftLine != leftDoc.getLineOfOffset(leftStart+sy.getTokenStart(es.leftStart()))) - break; - if (rightLine != rightDoc.getLineOfOffset(rightStart+sm.getTokenStart(es.rightStart()))) - break; - } catch (BadLocationException e) { - } - } - int end= i; - - // find first diff from left - RangeDifference first= null; - for (int ii= start; ii < end; ii++) { - es= r[ii]; - if (useChange(es.kind())) { - first= es; - break; - } - } - - // find first diff from mine - RangeDifference last= null; - for (int ii= end-1; ii >= start; ii--) { - es= r[ii]; - if (useChange(es.kind())) { - last= es; - break; - } - } - - if (first != null && last != null) { - - int ancestorStart2= 0; - int ancestorEnd2= 0; - if (ancestorDoc != null) { - ancestorStart2= ancestorStart+sa.getTokenStart(first.ancestorStart()); - ancestorEnd2= ancestorStart+getTokenEnd(sa, last.ancestorStart(), last.ancestorLength()); - } - - int leftStart2= leftStart+sy.getTokenStart(first.leftStart()); - int leftEnd2= leftStart+getTokenEnd(sy, last.leftStart(), last.leftLength()); - - int rightStart2= rightStart+sm.getTokenStart(first.rightStart()); - int rightEnd2= rightStart+getTokenEnd(sm, last.rightStart(), last.rightLength()); - Diff diff= new Diff(baseDiff, first.kind(), - ancestorDoc, null, ancestorStart2, ancestorEnd2+1, - leftDoc, null, leftStart2, leftEnd2+1, - rightDoc, null, rightStart2, rightEnd2+1); - diff.fIsToken= true; - baseDiff.add(diff); - } - } - } - - //---- update UI stuff - - private void updateControls() { - - boolean leftToRight= false; - boolean rightToLeft= false; - - updateStatus(fCurrentDiff); - updateResolveStatus(); - - if (fCurrentDiff != null) { - IMergeViewerContentProvider cp= getMergeContentProvider(); - if (cp != null) { - rightToLeft= cp.isLeftEditable(getInput()); - leftToRight= cp.isRightEditable(getInput()); - } - } - - if (fDirectionLabel != null) { - if (fHiglightRanges && fCurrentDiff != null && isThreeWay() && !fIgnoreAncestor) { - fDirectionLabel.setImage(fCurrentDiff.getImage()); - } else { - fDirectionLabel.setImage(null); - } - } - - if (fCopyDiffLeftToRightItem != null) - ((Action)fCopyDiffLeftToRightItem.getAction()).setEnabled(leftToRight); - if (fCopyDiffRightToLeftItem != null) - ((Action)fCopyDiffRightToLeftItem.getAction()).setEnabled(rightToLeft); - - boolean enableNavigation= false; - if (fCurrentDiff == null && fChangeDiffs != null && fChangeDiffs.size() > 0) - enableNavigation= true; - else if (fChangeDiffs != null && fChangeDiffs.size() > 1) - enableNavigation= true; - else if (fCurrentDiff != null && fCurrentDiff.fDiffs != null) - enableNavigation= true; - else if (fCurrentDiff != null && fCurrentDiff.fIsToken) - enableNavigation= true; - - if (fNextItem != null) { - IAction a= fNextItem.getAction(); - a.setEnabled(enableNavigation); - } - if (fPreviousItem != null) { - IAction a= fPreviousItem.getAction(); - a.setEnabled(enableNavigation); - } - } - - private void updateResolveStatus() { - - RGB rgb= null; - - if (showResolveUI()) { - // we only show red or green if there is at least one incoming or conflicting change - int incomingOrConflicting= 0; - int unresolvedIncoming= 0; - int unresolvedConflicting= 0; - - if (fChangeDiffs != null) { - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff d= (Diff) e.next(); - if (d.isIncomingOrConflicting() /* && useChange(d.fDirection) && !d.fIsWhitespace */) { - incomingOrConflicting++; - if (!d.fResolved) { - if (d.fDirection == RangeDifference.CONFLICT) { - unresolvedConflicting++; - break; // we can stop here because a conflict has the maximum priority - } else { - unresolvedIncoming++; - } - } - } - } - } - - if (incomingOrConflicting > 0) { - if (unresolvedConflicting > 0) - rgb= SELECTED_CONFLICT; - else if (unresolvedIncoming > 0) - rgb= SELECTED_INCOMING; - else - rgb= RESOLVED; - } - } - - if (fHeaderPainter.setColor(rgb)) - fSummaryHeader.redraw(); - } - - private void updateStatus(Diff diff) { - - if (! fShowMoreInfo) - return; - - IActionBars bars= Utilities.findActionBars(fComposite); - if (bars == null) - return; - IStatusLineManager slm= bars.getStatusLineManager(); - if (slm == null) - return; - - String diffDescription; - - if (diff == null) { - diffDescription= CompareMessages.getString("TextMergeViewer.diffDescription.noDiff.format"); //$NON-NLS-1$ - } else { - - if (diff.fIsToken) // we don't show special info for token diffs - diff= diff.fParent; - - String format= CompareMessages.getString("TextMergeViewer.diffDescription.diff.format"); //$NON-NLS-1$ - diffDescription= MessageFormat.format(format, - new String[] { - getDiffType(diff), // 0: diff type - getDiffNumber(diff), // 1: diff number - getDiffRange(fLeft, diff.fLeftPos), // 2: left start line - getDiffRange(fRight, diff.fRightPos) // 3: left end line - } - ); - } - - String format= CompareMessages.getString("TextMergeViewer.statusLine.format"); //$NON-NLS-1$ - String s= MessageFormat.format(format, - new String[] { - getCursorPosition(fLeft), // 0: left column - getCursorPosition(fRight), // 1: right column - diffDescription // 2: diff description - } - ); - - slm.setMessage(s); - } - - private void clearStatus() { - - IActionBars bars= Utilities.findActionBars(fComposite); - if (bars == null) - return; - IStatusLineManager slm= bars.getStatusLineManager(); - if (slm == null) - return; - - slm.setMessage(null); - } - - private String getDiffType(Diff diff) { - String s= ""; //$NON-NLS-1$ - switch(diff.fDirection) { - case RangeDifference.LEFT: - s= CompareMessages.getString("TextMergeViewer.direction.outgoing"); //$NON-NLS-1$ - break; - case RangeDifference.RIGHT: - s= CompareMessages.getString("TextMergeViewer.direction.incoming"); //$NON-NLS-1$ - break; - case RangeDifference.CONFLICT: - s= CompareMessages.getString("TextMergeViewer.direction.conflicting"); //$NON-NLS-1$ - break; - } - String format= CompareMessages.getString("TextMergeViewer.diffType.format"); //$NON-NLS-1$ - return MessageFormat.format(format, new String[] { s, diff.changeType() } ); - } - - private String getDiffNumber(Diff diff) { - // find the diff's number - int diffNumber= 0; - if (fChangeDiffs != null) { - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff d= (Diff) e.next(); - diffNumber++; - if (d == diff) - break; - } - } - return Integer.toString(diffNumber); - } - - private String getDiffRange(MergeSourceViewer v, Position pos) { - Point p= v.getLineRange(pos, new Point(0, 0)); - int startLine= p.x+1; - int endLine= p.x+p.y; - - String format; - if (endLine < startLine) - format= CompareMessages.getString("TextMergeViewer.beforeLine.format"); //$NON-NLS-1$ - else - format= CompareMessages.getString("TextMergeViewer.range.format"); //$NON-NLS-1$ - return MessageFormat.format(format, - new String[] { Integer.toString(startLine), - Integer.toString(endLine) } ); - } - - /** - * Returns a description of the cursor position. - * - * @return a description of the cursor position - */ - private String getCursorPosition(MergeSourceViewer v) { - if (v != null) { - StyledText styledText= v.getTextWidget(); - - IDocument document= v.getDocument(); - if (document != null) { - int offset= v.getVisibleRegion().getOffset(); - int caret= offset + styledText.getCaretOffset(); - - try { - - int line=document.getLineOfOffset(caret); - - int lineOffset= document.getLineOffset(line); - int occurrences= 0; - for (int i= lineOffset; i < caret; i++) - if ('\t' == document.getChar(i)) - ++ occurrences; - - int tabWidth= styledText.getTabs(); - int column= caret - lineOffset + (tabWidth -1) * occurrences; - - String format= CompareMessages.getString("TextMergeViewer.cursorPosition.format"); //$NON-NLS-1$ - return MessageFormat.format(format, - new String[] { Integer.toString(line + 1), Integer.toString(column + 1) } ); - - } catch (BadLocationException x) { - } - } - } - return ""; //$NON-NLS-1$ - } - - protected void updateHeader() { - - super.updateHeader(); - - updateControls(); - } - - /** - * Creates the two items for copying a difference range from one side to the other - * and adds them to the given toolbar manager. - */ - protected void createToolItems(ToolBarManager tbm) { - - IWorkbenchPartSite ps= Utilities.findSite(fComposite); - fKeyBindingService= ps != null ? ps.getKeyBindingService() : null; - - final String ignoreAncestorActionKey= "action.IgnoreAncestor."; //$NON-NLS-1$ - Action ignoreAncestorAction= new Action() { - public void run() { - setIgnoreAncestor(! fIgnoreAncestor); - Utilities.initToggleAction(this, getResourceBundle(), ignoreAncestorActionKey, fIgnoreAncestor); - } - }; - ignoreAncestorAction.setChecked(fIgnoreAncestor); - Utilities.initAction(ignoreAncestorAction, getResourceBundle(), ignoreAncestorActionKey); - Utilities.initToggleAction(ignoreAncestorAction, getResourceBundle(), ignoreAncestorActionKey, fIgnoreAncestor); - - fIgnoreAncestorItem= new ActionContributionItem(ignoreAncestorAction); - fIgnoreAncestorItem.setVisible(false); - tbm.appendToGroup("modes", fIgnoreAncestorItem); //$NON-NLS-1$ - - tbm.add(new Separator()); - - Action a= new Action() { - public void run() { - navigate(true, true, true); - } - }; - Utilities.initAction(a, getResourceBundle(), "action.NextDiff."); //$NON-NLS-1$ - fNextItem= new ActionContributionItem(a); - tbm.appendToGroup("navigation", fNextItem); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.selectNextChange"); //$NON-NLS-1$ - - a= new Action() { - public void run() { - navigate(false, true, true); - } - }; - Utilities.initAction(a, getResourceBundle(), "action.PrevDiff."); //$NON-NLS-1$ - fPreviousItem= new ActionContributionItem(a); - tbm.appendToGroup("navigation", fPreviousItem); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.selectPreviousChange"); //$NON-NLS-1$ - - - CompareConfiguration cc= getCompareConfiguration(); - - if (cc.isRightEditable()) { - a= new Action() { - public void run() { - copyDiffLeftToRight(); - } - }; - Utilities.initAction(a, getResourceBundle(), "action.CopyDiffLeftToRight."); //$NON-NLS-1$ - fCopyDiffLeftToRightItem= new ActionContributionItem(a); - fCopyDiffLeftToRightItem.setVisible(true); - tbm.appendToGroup("merge", fCopyDiffLeftToRightItem); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.copyLeftToRight"); //$NON-NLS-1$ - } - - if (cc.isLeftEditable()) { - a= new Action() { - public void run() { - copyDiffRightToLeft(); - } - }; - Utilities.initAction(a, getResourceBundle(), "action.CopyDiffRightToLeft."); //$NON-NLS-1$ - fCopyDiffRightToLeftItem= new ActionContributionItem(a); - fCopyDiffRightToLeftItem.setVisible(true); - tbm.appendToGroup("merge", fCopyDiffRightToLeftItem); //$NON-NLS-1$ - Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.copyRightToLeft"); //$NON-NLS-1$ - } - } - - /* package */ void propertyChange(PropertyChangeEvent event) { - - String key= event.getProperty(); - - if (key.equals(CompareConfiguration.IGNORE_WHITESPACE) - || key.equals(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS)) { - - fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS); - - // clear stuff - fCurrentDiff= null; - fChangeDiffs= null; - fAllDiffs= null; - - doDiff(); - - updateControls(); - invalidateLines(); - updateVScrollBar(); - refreshBirdsEyeView(); - - selectFirstDiff(); - -// } else if (key.equals(ComparePreferencePage.USE_SPLINES)) { -// fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES); -// invalidateLines(); - - } else if (key.equals(ComparePreferencePage.USE_SINGLE_LINE)) { - fUseSingleLine= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SINGLE_LINE); - fUseResolveUI= fUseSingleLine; - fBasicCenterCurve= null; - updateResolveStatus(); - invalidateLines(); - -// } else if (key.equals(ComparePreferencePage.USE_RESOLVE_UI)) { -// fUseResolveUI= fPreferenceStore.getBoolean(ComparePreferencePage.USE_RESOLVE_UI); -// updateResolveStatus(); -// invalidateLines(); - - } else if (key.equals(fSymbolicFontName)) { - updateFont(); - invalidateLines(); - - } else if (key.equals(ComparePreferencePage.SYNCHRONIZE_SCROLLING)) { - - boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING); - if (b != fSynchronizedScrolling) - toggleSynchMode(); - - } else if (key.equals(ComparePreferencePage.SHOW_MORE_INFO)) { - - boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_MORE_INFO); - if (b != fShowMoreInfo) { - fShowMoreInfo= b; - if (fShowMoreInfo) - updateStatus(fCurrentDiff); - else - clearStatus(); - } - - } else - super.propertyChange(event); - } - - private void setIgnoreAncestor(boolean ignore) { - if (ignore != fIgnoreAncestor) { - fIgnoreAncestor= ignore; - setAncestorVisibility(false, !fIgnoreAncestor); - - // clear stuff - fCurrentDiff= null; - fChangeDiffs= null; - fAllDiffs= null; - - doDiff(); - - invalidateLines(); - updateVScrollBar(); - refreshBirdsEyeView(); - - selectFirstDiff(); - } - } - - private void selectFirstDiff() { - - if (fLeft == null || fRight == null) { - return; - } - if (fLeft.getDocument() == null || fRight.getDocument() == null) { - return; - } - - Diff firstDiff= null; - if (CompareNavigator.getDirection(fComposite)) - firstDiff= findNext(fRight, fChangeDiffs, -1, -1, false); - else - firstDiff= findPrev(fRight, fChangeDiffs, 9999999, 9999999, false); - setCurrentDiff(firstDiff, true); - } - - private void toggleSynchMode() { - fSynchronizedScrolling= ! fSynchronizedScrolling; - - scrollVertical(0, 0, 0, null); - - // throw away central control (Sash or Canvas) - Control center= getCenter(); - if (center != null && !center.isDisposed()) - center.dispose(); - - fLeft.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); - fRight.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); - - fComposite.layout(true); - } - - protected void updateToolItems() { - - if (fIgnoreAncestorItem != null) - fIgnoreAncestorItem.setVisible(isThreeWay()); - - super.updateToolItems(); - } - - //---- painting lines - - /** - * - */ - private void updateLines(IDocument d) { - - boolean left= false; - boolean right= false; - - // FIXME: this optimization is incorrect because - // it doesn't take replace operations into account where - // the old and new line count does not differ - if (d == fLeft.getDocument()) { - int l= fLeft.getLineCount(); - left= fLeftLineCount != l; - fLeftLineCount= l; - } else if (d == fRight.getDocument()) { - int l= fRight.getLineCount(); - right= fRightLineCount != l; - fRightLineCount= l; - } - - if (left || right) { - - if (left) { - if (fLeftCanvas != null) - fLeftCanvas.redraw(); - } else { - if (fRightCanvas != null) - fRightCanvas.redraw(); - } - Control center= getCenter(); - if (center != null) - center.redraw(); - - updateVScrollBar(); - refreshBirdsEyeView(); - } - } - - private void invalidateLines() { - if (isThreeWay()) { - if (Utilities.okToUse(fAncestorCanvas)) - fAncestorCanvas.redraw(); - if (fAncestor != null && fAncestor.isControlOkToUse()) - fAncestor.getTextWidget().redraw(); - } - - if (Utilities.okToUse(fLeftCanvas)) - fLeftCanvas.redraw(); - - if (fLeft != null && fLeft.isControlOkToUse()) - fLeft.getTextWidget().redraw(); - - if (Utilities.okToUse(getCenter())) - getCenter().redraw(); - - if (fRight != null && fRight.isControlOkToUse()) - fRight.getTextWidget().redraw(); - - if (Utilities.okToUse(fRightCanvas)) - fRightCanvas.redraw(); - } - - private boolean showResolveUI() { - if (!fUseResolveUI || !isThreeWay() || fIgnoreAncestor) - return false; - CompareConfiguration cc= getCompareConfiguration(); - if (cc == null) - return false; - // we only enable the new resolve ui if exactly one side is editable - boolean l= cc.isLeftEditable(); - boolean r= cc.isRightEditable(); - //return (l && !r) || (r && !l); - return l || r; - } - - private void paintCenter(Canvas canvas, GC g) { - - Display display= canvas.getDisplay(); - - checkForColorUpdate(display); - - if (! fSynchronizedScrolling) - return; - - int lineHeight= fLeft.getTextWidget().getLineHeight(); - int visibleHeight= fRight.getViewportHeight(); - - Point size= canvas.getSize(); - int x= 0; - int w= size.x; - - g.setBackground(canvas.getBackground()); - g.fillRectangle(x+1, 0, w-2, size.y); - - if (!fIsMotif) { - // draw thin line between center ruler and both texts - g.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW)); - g.fillRectangle(0, 0, 1, size.y); - g.fillRectangle(w-1, 0, 1, size.y); - } - - if (! fHiglightRanges) - return; - - boolean showResolveUI= showResolveUI(); - - if (fChangeDiffs != null) { - int lshift= fLeft.getVerticalScrollOffset(); - int rshift= fRight.getVerticalScrollOffset(); - - Point region= new Point(0, 0); - - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly2 && !isCurrentDiff(diff)) - continue; - - fLeft.getLineRange(diff.fLeftPos, region); - int ly= (region.x * lineHeight) + lshift; - int lh= region.y * lineHeight; - - fRight.getLineRange(diff.fRightPos, region); - int ry= (region.x * lineHeight) + rshift; - int rh= region.y * lineHeight; - - if (Math.max(ly+lh, ry+rh) < 0) - continue; - if (Math.min(ly, ry) >= visibleHeight) - break; - - fPts[0]= x; fPts[1]= ly; fPts[2]= w; fPts[3]= ry; - fPts[6]= x; fPts[7]= ly+lh; fPts[4]= w; fPts[5]= ry+rh; - - Color fillColor= getColor(display, getFillColor(diff)); - Color strokeColor= getColor(display, getStrokeColor(diff)); - - if (fUseSingleLine) { - int w2= 3; - - g.setBackground(fillColor); - g.fillRectangle(0, ly, w2, lh); // left - g.fillRectangle(w-w2, ry, w2, rh); // right - - g.setLineWidth(LW); - g.setForeground(strokeColor); - g.drawRectangle(0-1, ly, w2, lh); // left - g.drawRectangle(w-w2, ry, w2, rh); // right - - if (fUseSplines) { - int[] points= getCenterCurvePoints(w2, ly+lh/2, w-w2, ry+rh/2); - for (int i= 1; i < points.length; i++) - g.drawLine(w2+i-1, points[i-1], w2+i, points[i]); - } else { - g.drawLine(w2, ly+lh/2, w-w2, ry+rh/2); - } - } else { - // two lines - if (fUseSplines) { - g.setBackground(fillColor); - - g.setLineWidth(LW); - g.setForeground(strokeColor); - - int[] topPoints= getCenterCurvePoints(fPts[0], fPts[1], fPts[2], fPts[3]); - int[] bottomPoints= getCenterCurvePoints(fPts[6], fPts[7], fPts[4], fPts[5]); - g.setForeground(fillColor); - g.drawLine(0, bottomPoints[0], 0, topPoints[0]); - for (int i= 1; i < bottomPoints.length; i++) { - g.setForeground(fillColor); - g.drawLine(i, bottomPoints[i], i, topPoints[i]); - g.setForeground(strokeColor); - g.drawLine(i-1, topPoints[i-1], i, topPoints[i]); - g.drawLine(i-1, bottomPoints[i-1], i, bottomPoints[i]); - } - } else { - g.setBackground(fillColor); - g.fillPolygon(fPts); - - g.setLineWidth(LW); - g.setForeground(strokeColor); - g.drawLine(fPts[0], fPts[1], fPts[2], fPts[3]); - g.drawLine(fPts[6], fPts[7], fPts[4], fPts[5]); - } - } - - if (showResolveUI && diff.isUnresolvedIncomingOrConflicting()) { - // draw resolve state - int cx= (w-RESOLVE_SIZE)/2; - int cy= ((ly+lh/2) + (ry+rh/2) - RESOLVE_SIZE)/2; - - g.setBackground(fillColor); - g.fillRectangle(cx, cy, RESOLVE_SIZE, RESOLVE_SIZE); - - g.setForeground(strokeColor); - g.drawRectangle(cx, cy, RESOLVE_SIZE, RESOLVE_SIZE); - } - } - } - } - - private int[] getCenterCurvePoints(int startx, int starty, int endx, int endy) { - if (fBasicCenterCurve == null) - buildBaseCenterCurve(endx-startx); - double height= endy - starty; - height= height/2; - int width= endx-startx; - int[] points= new int[width]; - for (int i= 0; i < width; i++) { - points[i]= (int) (-height * fBasicCenterCurve[i] + height + starty); - } - return points; - } - - private void buildBaseCenterCurve(int w) { - double width= w; - fBasicCenterCurve= new double[getCenterWidth()]; - for (int i= 0; i < getCenterWidth(); i++) { - double r= ((double) i) / width; - fBasicCenterCurve[i]= Math.cos(Math.PI * r); - } - } - - private void paintSides(GC g, MergeSourceViewer tp, Canvas canvas, boolean right) { - - Display display= canvas.getDisplay(); - - int lineHeight= tp.getTextWidget().getLineHeight(); - int visibleHeight= tp.getViewportHeight(); - - Point size= canvas.getSize(); - int x= 0; - int w= fMarginWidth; - int w2= w/2; - - g.setBackground(canvas.getBackground()); - g.fillRectangle(x, 0, w, size.y); - - if (!fIsMotif) { - // draw thin line between ruler and text - g.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW)); - if (right) - g.fillRectangle(0, 0, 1, size.y); - else - g.fillRectangle(size.x-1, 0, 1, size.y); - } - - if (! fHiglightRanges) - return; - - if (fChangeDiffs != null) { - int shift= tp.getVerticalScrollOffset() + (2-LW); - - Point region= new Point(0, 0); - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly2 && !isCurrentDiff(diff)) - continue; - - tp.getLineRange(diff.getPosition(tp), region); - int y= (region.x * lineHeight) + shift; - int h= region.y * lineHeight; - - if (y+h < 0) - continue; - if (y >= visibleHeight) - break; - - g.setBackground(getColor(display, getFillColor(diff))); - if (right) - g.fillRectangle(x, y, w2, h); - else - g.fillRectangle(x+w2, y, w2, h); - - g.setLineWidth(LW); - g.setForeground(getColor(display, getStrokeColor(diff))); - if (right) - g.drawRectangle(x-1, y-1, w2, h); - else - g.drawRectangle(x+w2, y-1, w2, h); - } - } - } - - private void paint(PaintEvent event, MergeSourceViewer tp) { - - if (! fHiglightRanges) - return; - if (fChangeDiffs == null) - return; - - Control canvas= (Control) event.widget; - GC g= event.gc; - - Display display= canvas.getDisplay(); - - int lineHeight= tp.getTextWidget().getLineHeight(); - int w= canvas.getSize().x; - int shift= tp.getVerticalScrollOffset() + (2-LW); - int maxh= event.y+event.height; // visibleHeight - - //if (fIsMotif) - shift+= fTopInset; - - Point range= new Point(0, 0); - - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.isDeleted()) - continue; - - if (fShowCurrentOnly && !isCurrentDiff(diff)) - continue; - - tp.getLineRange(diff.getPosition(tp), range); - int y= (range.x * lineHeight) + shift; - int h= range.y * lineHeight; - - if (y+h < event.y) - continue; - if (y > maxh) - break; - - g.setBackground(getColor(display, getStrokeColor(diff))); - g.fillRectangle(0, y-1, w, LW); - g.fillRectangle(0, y+h-1, w, LW); - } - } - - private RGB getFillColor(Diff diff) { - boolean selected= fCurrentDiff != null && fCurrentDiff.fParent == diff; - - RGB selected_fill= getBackground(null); - - if (isThreeWay() && !fIgnoreAncestor) { - switch (diff.fDirection) { - case RangeDifference.RIGHT: - if (fLeftIsLocal) - return selected ? selected_fill : INCOMING_FILL; - return selected ? selected_fill : OUTGOING_FILL; - case RangeDifference.ANCESTOR: - return selected ? selected_fill : CONFLICT_FILL; - case RangeDifference.LEFT: - if (fLeftIsLocal) - return selected ? selected_fill : OUTGOING_FILL; - return selected ? selected_fill : INCOMING_FILL; - case RangeDifference.CONFLICT: - return selected ? selected_fill : CONFLICT_FILL; - } - return null; - } - return selected ? selected_fill : OUTGOING_FILL; - } - - private RGB getStrokeColor(Diff diff) { - boolean selected= fCurrentDiff != null && fCurrentDiff.fParent == diff; - - if (isThreeWay() && !fIgnoreAncestor) { - switch (diff.fDirection) { - case RangeDifference.RIGHT: - if (fLeftIsLocal) - return selected ? SELECTED_INCOMING : INCOMING; - return selected ? SELECTED_OUTGOING : OUTGOING; - case RangeDifference.ANCESTOR: - return selected ? SELECTED_CONFLICT : CONFLICT; - case RangeDifference.LEFT: - if (fLeftIsLocal) - return selected ? SELECTED_OUTGOING : OUTGOING; - return selected ? SELECTED_INCOMING : INCOMING; - case RangeDifference.CONFLICT: - return selected ? SELECTED_CONFLICT : CONFLICT; - } - return null; - } - return selected ? SELECTED_OUTGOING : OUTGOING; - } - - private Color getColor(Display display, RGB rgb) { - if (rgb == null) - return null; - if (fColors == null) - fColors= new HashMap(20); - Color c= (Color) fColors.get(rgb); - if (c == null) { - c= new Color(display, rgb); - fColors.put(rgb, c); - } - return c; - } - - static RGB interpolate(RGB fg, RGB bg, double scale) { - return new RGB( - (int)((1.0-scale) * fg.red + scale * bg.red), - (int)((1.0-scale) * fg.green + scale * bg.green), - (int)((1.0-scale) * fg.blue + scale * bg.blue) - ); - } - - //---- Navigating and resolving Diffs - - /** - * Returns true if end (or beginning) of document reached. - */ - private boolean navigate(boolean down, boolean wrap, boolean deep) { - - Diff diff= null; - - for (;;) { - - if (fChangeDiffs != null) { - MergeSourceViewer part= fFocusPart; - if (part == null) - part= fRight; - - if (part != null) { - Point s= part.getSelectedRange(); - if (down) - diff= findNext(part, fChangeDiffs, s.x, s.x+s.y, deep); - else - diff= findPrev(part, fChangeDiffs, s.x, s.x+s.y, deep); - } - } - - if (diff == null) { // at end or beginning - if (wrap) { - if (!fEndOfDocReached) { - fEndOfDocReached= true; - if (! endOfDocumentReached(down)) - return true; - } - fEndOfDocReached= false; - if (fChangeDiffs != null && fChangeDiffs.size() > 0) { - if (down) - diff= (Diff) fChangeDiffs.get(0); - else - diff= (Diff) fChangeDiffs.get(fChangeDiffs.size()-1); - } - } else { - fEndOfDocReached= false; - return true; - } - } - - setCurrentDiff(diff, true); - - if (diff != null && diff.fDirection == RangeDifference.ANCESTOR - && !getAncestorEnabled()) - continue; - - break; - } - - return false; - } - - private boolean endOfDocumentReached(boolean down) { - Control c= getControl(); - if (Utilities.okToUse(c)) { - - c.getDisplay().beep(); - - String key= down ? "atEnd" : "atBeginning"; //$NON-NLS-1$ //$NON-NLS-2$ - return MessageDialog.openQuestion(c.getShell(), - CompareMessages.getString("TextMergeViewer."+key+".title"), //$NON-NLS-1$ //$NON-NLS-2$ - CompareMessages.getString("TextMergeViewer."+key+".message")); //$NON-NLS-1$ //$NON-NLS-2$ - } - return false; - } - - /** - * Find the Diff that overlaps with the given TextPart's text range. - * If the range doesn't overlap with any range <code>null</code> - * is returned. - */ - private Diff findDiff(MergeSourceViewer tp, int rangeStart, int rangeEnd) { - if (fChangeDiffs != null) { - Iterator e= fChangeDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - if (diff.contains(tp, rangeStart, rangeEnd)) - return diff; - } - } - return null; - } - - private static Diff findNext(MergeSourceViewer tp, List v, int start, int end, boolean deep) { - for (int i= 0; i < v.size(); i++) { - Diff diff= (Diff) v.get(i); - Position p= diff.getPosition(tp); - if (p != null) { - int startOffset= p.getOffset(); - if (end < startOffset) // <= - return diff; - if (deep && diff.fDiffs != null) { - Diff d= null; - int endOffset= startOffset + p.getLength(); - if (start == startOffset && (end == endOffset || end == endOffset-1)) { - d= findNext(tp, diff.fDiffs, start-1, start-1, deep); - } else if (end < endOffset) { - d= findNext(tp, diff.fDiffs, start, end, deep); - } - if (d != null) - return d; - } - } - } - return null; - } - - private static Diff findPrev(MergeSourceViewer tp, List v, int start, int end, boolean deep) { - for (int i= v.size()-1; i >= 0; i--) { - Diff diff= (Diff) v.get(i); - Position p= diff.getPosition(tp); - if (p != null) { - int startOffset= p.getOffset(); - int endOffset= startOffset + p.getLength(); - if (start > endOffset) - return diff; - if (deep && diff.fDiffs != null) { - Diff d= null; - if (start == startOffset && end == endOffset) { - d= findPrev(tp, diff.fDiffs, end, end, deep); - } else if (start >= startOffset) { - d= findPrev(tp, diff.fDiffs, start, end, deep); - } - if (d != null) - return d; - } - } - } - return null; - } - - /* - * Set the currently active Diff and update the toolbars controls and lines. - * If <code>revealAndSelect</code> is <code>true</code> the Diff is revealed and - * selected in both TextParts. - */ - private void setCurrentDiff(Diff d, boolean revealAndSelect) { - -// if (d == fCurrentDiff) -// return; - - if (fCenterButton != null) - fCenterButton.setVisible(false); - - fEndOfDocReached= false; - - Diff oldDiff= fCurrentDiff; - - if (d != null && revealAndSelect) { - - // before we set fCurrentDiff we change the selection - // so that the paint code uses the old background colors - // otherwise selection isn't drawn correctly - if (isThreeWay() && !fIgnoreAncestor) - fAncestor.setSelection(d.fAncestorPos); - fLeft.setSelection(d.fLeftPos); - fRight.setSelection(d.fRightPos); - - // now switch diffs - fCurrentDiff= d; - revealDiff(d, d.fIsToken); - } else { - fCurrentDiff= d; - } - - Diff d1= oldDiff != null ? oldDiff.fParent : null; - Diff d2= fCurrentDiff != null ? fCurrentDiff.fParent : null; - if (d1 != d2) { - updateDiffBackground(d1); - updateDiffBackground(d2); - } - - updateControls(); - invalidateLines(); - refreshBirdsEyeView(); - } - - /** - * Smart determines whether - */ - private void revealDiff(Diff d, boolean smart) { - - boolean ancestorIsVisible= false; - boolean leftIsVisible= false; - boolean rightIsVisible= false; - - if (smart) { - Point region= new Point(0, 0); - // find the starting line of the diff in all text widgets - int ls= fLeft.getLineRange(d.fLeftPos, region).x; - int rs= fRight.getLineRange(d.fRightPos, region).x; - - if (isThreeWay() && !fIgnoreAncestor) { - int as= fAncestor.getLineRange(d.fAncestorPos, region).x; - if (as >= fAncestor.getTopIndex() && as <= fAncestor.getBottomIndex()) - ancestorIsVisible= true; - } - - if (ls >= fLeft.getTopIndex() && ls <= fLeft.getBottomIndex()) - leftIsVisible= true; - - if (rs >= fRight.getTopIndex() && rs <= fRight.getBottomIndex()) - rightIsVisible= true; - } - - // vertical scrolling - if (!leftIsVisible || !rightIsVisible) { - int avpos= 0, lvpos= 0, rvpos= 0; - - MergeSourceViewer allButThis= null; - if (leftIsVisible) { - avpos= lvpos= rvpos= realToVirtualPosition(fLeft, fLeft.getTopIndex()); - allButThis= fLeft; - } else if (rightIsVisible) { - avpos= lvpos= rvpos= realToVirtualPosition(fRight, fRight.getTopIndex()); - allButThis= fRight; - } else if (ancestorIsVisible) { - avpos= lvpos= rvpos= realToVirtualPosition(fAncestor, fAncestor.getTopIndex()); - allButThis= fAncestor; - } else { - if (fAllDiffs != null) { - int vpos= 0; - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - if (diff == d) - break; - if (fSynchronizedScrolling) { - vpos+= diff.getMaxDiffHeight(fShowAncestor); - } else { - avpos+= diff.getAncestorHeight(); - lvpos+= diff.getLeftHeight(); - rvpos+= diff.getRightHeight(); - } - } - if (fSynchronizedScrolling) - avpos= lvpos= rvpos= vpos; - } - int delta= fRight.getViewportLines()/4; - avpos-= delta; - if (avpos < 0) - avpos= 0; - lvpos-= delta; - if (lvpos < 0) - lvpos= 0; - rvpos-= delta; - if (rvpos < 0) - rvpos= 0; - } - - scrollVertical(avpos, lvpos, rvpos, allButThis); - - if (fVScrollBar != null) - fVScrollBar.setSelection(avpos); - } - - // horizontal scrolling - if (d.fIsToken) { - // we only scroll horizontally for token diffs - reveal(fAncestor, d.fAncestorPos); - reveal(fLeft, d.fLeftPos); - reveal(fRight, d.fRightPos); - } else { - // in all other cases we reset the horizontal offset - hscroll(fAncestor); - hscroll(fLeft); - hscroll(fRight); - } - } - - private static void reveal(MergeSourceViewer v, Position p) { - if (v != null && p != null) { - StyledText st= v.getTextWidget(); - if (st != null) { - Rectangle r= st.getClientArea(); - if (!r.isEmpty()) // workaround for #7320: Next diff scrolls when going into current diff - v.revealRange(p.offset, p.length); - } - } - } - - private static void hscroll(MergeSourceViewer v) { - if (v != null) { - StyledText st= v.getTextWidget(); - if (st != null) - st.setHorizontalIndex(0); - } - } - - //-------------------------------------------------------------------------------- - - void copyAllUnresolved(boolean leftToRight) { - if (fChangeDiffs != null && isThreeWay() && !fIgnoreAncestor) { - IRewriteTarget target= leftToRight ? fRight.getRewriteTarget() : fLeft.getRewriteTarget(); - boolean compoundChangeStarted= false; - Iterator e= fChangeDiffs.iterator(); - try { - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - switch (diff.fDirection) { - case RangeDifference.LEFT: - if (leftToRight) { - if (!compoundChangeStarted) { - target.beginCompoundChange(); - compoundChangeStarted= true; - } - copy(diff, leftToRight); - } - break; - case RangeDifference.RIGHT: - if (!leftToRight) { - if (!compoundChangeStarted) { - target.beginCompoundChange(); - compoundChangeStarted= true; - } - copy(diff, leftToRight); - } - break; - default: - continue; - } - } - } finally { - if (compoundChangeStarted) { - target.endCompoundChange(); - } - } - } - } - - /* - * Copy whole document from one side to the other. - */ - protected void copy(boolean leftToRight) { - - if (showResolveUI()) { - copyAllUnresolved(leftToRight); - invalidateLines(); - return; - } - - if (leftToRight) { - if (fLeft.getEnabled()) { - // copy text - String text= fLeft.getTextWidget().getText(); - fRight.getTextWidget().setText(text); - fRight.setEnabled(true); - } else { - // delete - fRight.getTextWidget().setText(""); //$NON-NLS-1$ - fRight.setEnabled(false); - } - fRightLineCount= fRight.getLineCount(); - setRightDirty(true); - 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); - } - - private void copyDiffRightToLeft() { - copy(fCurrentDiff, false, false); - } - - /* - * Copy the contents of the given diff from one side to the other. - */ - private void copy(Diff diff, boolean leftToRight, boolean gotoNext) { - if (copy(diff, leftToRight)) { - if (gotoNext) { - navigate(true, true, true); - } else { - revealDiff(diff, true); - updateControls(); - } - } - } - - /* - * Copy the contents of the given diff from one side to the other but - * doesn't reveal anything. - * Returns true if copy was succesful. - */ - private boolean copy(Diff diff, boolean leftToRight) { - - if (diff != null && !diff.isResolved()) { - - Position fromPos= null; - Position toPos= null; - IDocument fromDoc= null; - IDocument toDoc= null; - - if (leftToRight) { - fRight.setEnabled(true); - fromPos= diff.fLeftPos; - toPos= diff.fRightPos; - fromDoc= fLeft.getDocument(); - toDoc= fRight.getDocument(); - } else { - fLeft.setEnabled(true); - fromPos= diff.fRightPos; - toPos= diff.fLeftPos; - fromDoc= fRight.getDocument(); - toDoc= fLeft.getDocument(); - } - - if (fromDoc != null) { - - int fromStart= fromPos.getOffset(); - int fromLen= fromPos.getLength(); - - int toStart= toPos.getOffset(); - int toLen= toPos.getLength(); - - try { - String s= null; - - switch (diff.fDirection) { - case RangeDifference.RIGHT: - case RangeDifference.LEFT: - s= fromDoc.get(fromStart, fromLen); - break; - case RangeDifference.ANCESTOR: - break; - case RangeDifference.CONFLICT: - if (APPEND_CONFLICT) { - s= toDoc.get(toStart, toLen); - s+= fromDoc.get(fromStart, fromLen); - } else - s= fromDoc.get(fromStart, fromLen); - break; - } - if (s != null) { - toDoc.replace(toStart, toLen, s); - toPos.setOffset(toStart); - toPos.setLength(s.length()); - } - - } catch (BadLocationException e) { - } - } - - diff.setResolved(true); - updateResolveStatus(); - - return true; - } - return false; - } - - //---- scrolling - - /** - * Calculates virtual height (in lines) of views by adding the maximum of corresponding diffs. - */ - private int getVirtualHeight() { - int h= 1; - if (fAllDiffs != null) { - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - h+= diff.getMaxDiffHeight(fShowAncestor); - } - } - return h; - } - - /** - * Calculates height (in lines) of right view by adding the height of the right diffs. - */ - private int getRightHeight() { - int h= 1; - if (fAllDiffs != null) { - Iterator e= fAllDiffs.iterator(); - for (int i= 0; e.hasNext(); i++) { - Diff diff= (Diff) e.next(); - h+= diff.getRightHeight(); - } - } - return h; - } - - /** - * The height of the TextEditors in lines. - */ - private int getViewportHeight() { - StyledText te= fLeft.getTextWidget(); - - int vh= te.getClientArea().height; - if (vh == 0) { - Rectangle trim= te.computeTrim(0, 0, 0, 0); - int scrollbarHeight= trim.height; - - int headerHeight= getHeaderHeight(); - - Composite composite= (Composite) getControl(); - Rectangle r= composite.getClientArea(); - - vh= r.height-headerHeight-scrollbarHeight; - } - - return vh / te.getLineHeight(); - } - - /** - * Returns the virtual position for the given view position. - */ - private int realToVirtualPosition(MergeSourceViewer w, int vpos) { - - if (! fSynchronizedScrolling || fAllDiffs == null) - return vpos; - - int viewPos= 0; // real view position - int virtualPos= 0; // virtual position - Point region= new Point(0, 0); - - Iterator e= fAllDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - Position pos= diff.getPosition(w); - w.getLineRange(pos, region); - int realHeight= region.y; - int virtualHeight= diff.getMaxDiffHeight(fShowAncestor); - if (vpos <= viewPos + realHeight) { // OK, found! - vpos-= viewPos; // make relative to this slot - // now scale position within this slot to virtual slot - if (realHeight <= 0) - vpos= 0; - else - vpos= (vpos*virtualHeight)/realHeight; - return virtualPos+vpos; - } - viewPos+= realHeight; - virtualPos+= virtualHeight; - } - return virtualPos; - } - - private void scrollVertical(int avpos, int lvpos, int rvpos, MergeSourceViewer allBut) { - - int s= 0; - - if (fSynchronizedScrolling) { - s= getVirtualHeight() - rvpos; - int height= fRight.getViewportLines()/4; - if (s < 0) - s= 0; - if (s > height) - s= height; - } - - fInScrolling= true; - - if (isThreeWay() && allBut != fAncestor) { - if (fSynchronizedScrolling || allBut == null) { - int y= virtualToRealPosition(fAncestor, avpos+s)-s; - fAncestor.vscroll(y); - } - } - - if (allBut != fLeft) { - if (fSynchronizedScrolling || allBut == null) { - int y= virtualToRealPosition(fLeft, lvpos+s)-s; - fLeft.vscroll(y); - } - } - - if (allBut != fRight) { - if (fSynchronizedScrolling || allBut == null) { - int y= virtualToRealPosition(fRight, rvpos+s)-s; - fRight.vscroll(y); - } - } - - fInScrolling= false; - - if (isThreeWay() && fAncestorCanvas != null) - fAncestorCanvas.repaint(); - - if (fLeftCanvas != null) - fLeftCanvas.repaint(); - - Control center= getCenter(); - if (center instanceof BufferedCanvas) - ((BufferedCanvas)center).repaint(); - - if (fRightCanvas != null) - fRightCanvas.repaint(); - } - - /** - * Updates Scrollbars with viewports. - */ - private void syncViewport(MergeSourceViewer w) { - - if (fInScrolling) - return; - - int ix= w.getTopIndex(); - int ix2= w.getDocumentRegionOffset(); - - int viewPosition= realToVirtualPosition(w, ix-ix2); - - scrollVertical(viewPosition, viewPosition, viewPosition, w); // scroll all but the given views - - if (fVScrollBar != null) { - int value= Math.max(0, Math.min(viewPosition, getVirtualHeight() - getViewportHeight())); - fVScrollBar.setSelection(value); - //refreshBirdEyeView(); - } - } - - /** - */ - private void updateVScrollBar() { - - if (Utilities.okToUse(fVScrollBar) && fSynchronizedScrolling) { - int virtualHeight= getVirtualHeight(); - int viewPortHeight= getViewportHeight(); - int pageIncrement= viewPortHeight-1; - int thumb= (viewPortHeight > virtualHeight) ? virtualHeight : viewPortHeight; - - fVScrollBar.setPageIncrement(pageIncrement); - fVScrollBar.setMaximum(virtualHeight); - fVScrollBar.setThumb(thumb); - } - } - - /** - * maps given virtual position into a real view position of this view. - */ - private int virtualToRealPosition(MergeSourceViewer part, int v) { - - if (! fSynchronizedScrolling || fAllDiffs == null) - return v; - - int virtualPos= 0; - int viewPos= 0; - Point region= new Point(0, 0); - - Iterator e= fAllDiffs.iterator(); - while (e.hasNext()) { - Diff diff= (Diff) e.next(); - Position pos= diff.getPosition(part); - int viewHeight= part.getLineRange(pos, region).y; - int virtualHeight= diff.getMaxDiffHeight(fShowAncestor); - if (v < (virtualPos + virtualHeight)) { - v-= virtualPos; // make relative to this slot - if (viewHeight <= 0) { - v= 0; - } else { - v= (v*viewHeight)/virtualHeight; - } - return viewPos+v; - } - virtualPos+= virtualHeight; - viewPos+= viewHeight; - } - return viewPos; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties deleted file mode 100644 index 3126d006e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties +++ /dev/null @@ -1,98 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)TextMergeViewerResources.properties -# -# Resource strings for TextMergeViewer.java - -title= Text Compare - -saveDialog.title= Save Resource -saveDialog.message= Resource has been modified. Save changes? - -compareProgressTask.title= Computing Differences... - -tooComplexError.title= Error -tooComplexError.format= Too many differences. Turn on the ''Ignore White Space'' option or do a structure compare first. - -##################################################### -# Toolbar actions -##################################################### - -action.CopyLeftToRight.label=Copy Left to Right -action.CopyLeftToRight.tooltip=Copy All from Left to Right -action.CopyLeftToRight.image=copy_r_co.gif - -action.CopyRightToLeft.label=Copy Right to Left -action.CopyRightToLeft.tooltip=Copy All Non-Conflicting Changes from Right to Left -action.CopyRightToLeft.image=copy_l_co.gif - -action.CopyDiffLeftToRight.label=Copy Current Diff -action.CopyDiffLeftToRight.tooltip=Copy Current Change from Left to Right -action.CopyDiffLeftToRight.image=copycont_r_co.gif - -action.CopyDiffRightToLeft.label=Copy Current Diff -action.CopyDiffRightToLeft.tooltip=Copy Current Change from Right to Left -action.CopyDiffRightToLeft.image=copycont_l_co.gif - -action.NextDiff.label=Next -action.NextDiff.tooltip=Select Next Change -action.NextDiff.image=next_nav.gif - -action.PrevDiff.label=Previous -action.PrevDiff.tooltip=Select Previous Change -action.PrevDiff.image=prev_nav.gif - -action.EnableAncestor.label=Enable Ancestor Pane -action.EnableAncestor.tooltip.unchecked=Show Ancestor Pane -action.EnableAncestor.tooltip.checked=Hide Ancestor Pane -action.EnableAncestor.description.unchecked=Show Ancestor Pane -action.EnableAncestor.description.checked=Hide Ancestor Pane -action.EnableAncestor.image=ancestorpane_co.gif - -action.IgnoreAncestor.label=Ignore Ancestor -action.IgnoreAncestor.tooltip.unchecked=Two-Way Compare (Ignore Ancestor) -action.IgnoreAncestor.tooltip.checked=Three-Way Compare -action.IgnoreAncestor.description.unchecked=Two-Way Compare (Ignore Ancestor) -action.IgnoreAncestor.description.checked=Three-Way Compare -action.IgnoreAncestor.image=twowaycompare_co.gif - - -##################################################### -# Context menu actions -##################################################### - -action.undo.label=Undo@Ctrl+Z -action.undo.tooltip=Undo Last Operation - -action.redo.label=Redo@Ctrl+Y -action.redo.tooltip=Redo Last Operation - -action.cut.label=Cut@Ctrl+X -action.cut.tooltip=Cut Text Selection to Clipboard - -action.copy.label=Copy@Ctrl+C -action.copy.tooltip=Copy Text Selection to Clipboard - -action.paste.label=Paste@Ctrl+V -action.paste.tooltip=Replace Text Selection with Clipboard - -action.delete.label=Delete -action.delete.tooltip=Delete Current Text Selection - -action.find.label=Find...@Ctrl+F -action.find.tooltip=Find Occurrence - -action.selectAll.label=Select All@Ctrl+A -action.selectAll.tooltip=Select All Changes - -action.save.label=Save@Ctrl+S -action.save.tooltip=Save Changes diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html deleted file mode 100644 index 9f606fb95..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html +++ /dev/null @@ -1,45 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="Author" content="IBM"> - <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]"> - <title>Package-level Javadoc</title> -</head> -<body> -Support for compare and merge viewers which show the -content side-by-side. -<h2> -Package Specification</h2> - -The <b>ContentMergeViewer</b> is an abstract compare and merge viewer -with two side-by-side content areas and an optional content area for a -common ancestor (for three-way compare). Because the implementation makes -no assumptions about the content type it is a subclass responsibility to -deal with a specific type. Its subclass <b>ImageMergeViewer</b> in -package org.eclipse.compare.internal shows how to base a simple -mergeviewer for images on <b>ContentMergeViewer</b>. -<p> - -A <b>ContentMergeViewer</b> accesses its model by means of a content -provider which must implement the <b>IMergeViewerContentProvider</b> interface. -<p> - -The <b>TextMergeViewer</b> is the standard concrete subclass of -<b>ContentMergeViewer</b> for comparing and merging text content. -<br> -A text merge viewer uses the <b>org.eclipse.compare.rangedifferencer.RangeDifferencer</b> -to perform a textual, line-by-line comparison of two (or three) input documents. -For text lines that differ the <b>TextMergeViewer</b> uses an <b>ITokenComparator</b> -to find longest sequences of matching and non-matching tokens. -The <b>TextMergeViewer</b>'s -default token compare works on characters separated by whitespace. If a -different strategy is needed (for example, Java tokens in a Java-aware -merge viewer), clients can create their own token comparators by implementing -the <b>ITokenComparator</b> interface. -<p>The <b>TextMergeViewer</b> not only works on whole documents but on -subranges of documents too. In this case the viewer's input must be an -<b>IDocumentRange</b> instead of an <b>IDocument</b>. - -</body> -</html> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java deleted file mode 100644 index d6c202174..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.Viewer; - - -public abstract class AbstractViewer extends Viewer { - - public void setInput(Object input) { - } - - public Object getInput() { - return null; - } - - public ISelection getSelection() { - return null; - } - - public void setSelection(ISelection s, boolean reveal) { - } - - public void refresh() { - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java deleted file mode 100644 index 4f4386683..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.ui.IActionDelegate; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - - -public class AddFromHistoryAction implements IActionDelegate { - - private static final String BUNDLE_NAME= "org.eclipse.compare.internal.AddFromHistoryAction"; //$NON-NLS-1$ - - private ISelection fSelection; - - public AddFromHistoryAction() { - } - - public void selectionChanged(IAction a, ISelection s) { - fSelection= s; - } - - public void run(IAction action) { - - ResourceBundle bundle= ResourceBundle.getBundle(BUNDLE_NAME); - String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$ - - Shell parentShell= CompareUIPlugin.getShell(); - AddFromHistoryDialog dialog= null; - - Object[] s= Utilities.getResources(fSelection); - - for (int i= 0; i < s.length; i++) { - Object o= s[i]; - if (o instanceof IContainer) { - IContainer container= (IContainer) o; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(parentShell); - IProgressMonitor pm= pmdialog.getProgressMonitor(); - IFile[] states= null; - try { - states= container.findDeletedMembersWithHistory(IContainer.DEPTH_INFINITE, pm); - } catch (CoreException ex) { - pm.done(); - } - - if (states == null || states.length <= 0) { - String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$ - MessageDialog.openInformation(parentShell, title, msg); - return; - } - - if (dialog == null) { - dialog= new AddFromHistoryDialog(parentShell, bundle); - dialog.setHelpContextId(ICompareContextIds.ADD_FROM_HISTORY_DIALOG); - } - - if (dialog.select(container, states)) { - - AddFromHistoryDialog.HistoryInput[] selected= dialog.getSelected(); - - if (selected != null && selected.length > 0) { - try { - updateWorkspace(bundle, parentShell, selected); - - } catch (InterruptedException x) { - // Do nothing. Operation has been canceled by user. - - } catch (InvocationTargetException x) { - String reason= x.getTargetException().getMessage(); - MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason)); //$NON-NLS-1$ - } - } - } - } - } - } - - void createContainers(IResource resource) throws CoreException { - IContainer container= resource.getParent(); - if (container instanceof IFolder) { - IFolder parent= (IFolder) container; - if (parent != null && !parent.exists()) { - createContainers(parent); - parent.create(false, true, null); - } - } - } - - private void updateWorkspace(final ResourceBundle bundle, Shell shell, - final AddFromHistoryDialog.HistoryInput[] selected) - throws InvocationTargetException, InterruptedException { - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws InvocationTargetException { - try { - String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$ - pm.beginTask(taskName, selected.length); - - for (int i= 0; i < selected.length; i++) { - IFile file= selected[i].fFile; - IFileState fileState= selected[i].fFileState; - createContainers(file); - - SubProgressMonitor subMonitor= new SubProgressMonitor(pm, 1); - try { - file.create(fileState.getContents(), false, subMonitor); - } finally { - subMonitor.done(); - } - } - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - pm.done(); - } - } - }; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell); - pmdialog.run(false, true, operation); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties deleted file mode 100644 index e25207118..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties +++ /dev/null @@ -1,45 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)AddFromHistoryAction.properties -# -# Resources for AddFromHistoryAction.java - -title= Restore from Local History - -memberPaneTitle= {0} - Available Files in Local History: - -treeTitleFormat= Local History of ''{0}'' -dateIcon= obj16/day_obj.gif -timeIcon= obj16/resource_obj.gif - -memberDescription= Check files to restore from the local history: -editionDescription= Select an edition of a file: - -treeFormat= {0} -workspaceTreeFormat= {0} (Workspace File) -parseErrorFormat= {0} (Parse Error) - -editionLabel= Local History ({0}) -workspaceEditionLabel= Workspace File - -targetLabel= {0} - -todayFormat= Today ({0}) -yesterdayFormat= Yesterday ({0}) -dayFormat= {0} - -buttonLabel= Restore - -noLocalHistoryError= No deleted resources in local history for selected container. -replaceError=Can''t replace resource (reason: {0}). - -taskName=Restoring
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java deleted file mode 100644 index a15a9e6ab..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java +++ /dev/null @@ -1,461 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.text.*; -import java.util.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; - - -public class AddFromHistoryDialog extends ResizableDialog { - - static class HistoryInput implements ITypedElement, IStreamContentAccessor, IModificationDate { - IFile fFile; - IFileState fFileState; - - HistoryInput(IFile file, IFileState fileState) { - fFile= file; - fFileState= fileState; - } - public InputStream getContents() throws CoreException { - return new BufferedInputStream(fFileState.getContents()); - } - public String getName() { - return fFile.getName(); - } - public String getType() { - return fFile.getFileExtension(); - } - public Image getImage() { - return CompareUI.getImage(fFile); - } - public long getModificationDate() { - return fFileState.getModificationTime(); - } - } - - static class FileHistory { - private IFile fFile; - private IFileState[] fStates; - private int fSelected; - - FileHistory(IFile file) { - fFile= file; - } - - IFile getFile() { - return fFile; - } - - IFileState[] getStates() { - if (fStates == null) { - try { - fStates= fFile.getHistory(new NullProgressMonitor()); - } catch (CoreException ex) { - } - } - return fStates; - } - - IFileState getSelectedState() { - return getStates()[fSelected]; - } - - void setSelected(IFileState state) { - for (int i= 0; i < fStates.length; i++) { - if (fStates[i] == state) { - fSelected= i; - return; - } - } - } - - HistoryInput getHistoryInput() { - return new HistoryInput(fFile, getSelectedState()); - } - - boolean isSelected(int index) { - return index == fSelected; - } - } - - private CompareConfiguration fCompareConfiguration; - private ArrayList fArrayList= new ArrayList(); - private FileHistory fCurrentFileHistory; - - // SWT controls - private CompareViewerSwitchingPane fContentPane; - private Button fCommitButton; - private Table fMemberTable; - private CompareViewerPane fMemberPane; - private Tree fEditionTree; - private CompareViewerPane fEditionPane; - private Image fDateImage; - private Image fTimeImage; - - - public AddFromHistoryDialog(Shell parent, ResourceBundle bundle) { - super(parent, bundle); - - String iconName= Utilities.getString(fBundle, "dateIcon", "obj16/day_obj.gif"); //$NON-NLS-2$ //$NON-NLS-1$ - ImageDescriptor id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fDateImage= id.createImage(); - iconName= Utilities.getString(fBundle, "timeIcon", "obj16/resource_obj.gif"); //$NON-NLS-1$ //$NON-NLS-2$ - id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fTimeImage= id.createImage(); - } - - public boolean select(IContainer root, IFile[] inputFiles) { - - create(); // create widgets - - String format= Utilities.getString(fBundle, "memberPaneTitle"); //$NON-NLS-1$ - String title= MessageFormat.format(format, new Object[] { root.getName() }); - fMemberPane.setImage(CompareUI.getImage(root)); - fMemberPane.setText(title); - - // sort input files - final int count= inputFiles.length; - final IFile[] files= new IFile[count]; - for (int i= 0; i < count; i++) - files[i]= (IFile) inputFiles[i]; - if (count > 1) - internalSort(files, 0, count-1); - - - String prefix= root.getFullPath().toString(); - - if (fMemberTable != null && !fMemberTable.isDisposed()) { - for (int i= 0; i < files.length; i++) { - IFile file= files[i]; - String path= file.getFullPath().toString(); - if (path.startsWith(prefix)) - path= path.substring(prefix.length()+1); - TableItem ti= new TableItem(fMemberTable, SWT.NONE); - ti.setImage(CompareUI.getImage(file)); - ti.setText(path); - ti.setData(new FileHistory(file)); - } - } - - open(); - - return (getReturnCode() == OK) && (fArrayList.size() > 0); - } - - HistoryInput[] getSelected() { - HistoryInput[] selected= new HistoryInput[fArrayList.size()]; - Iterator iter= fArrayList.iterator(); - for (int i= 0; iter.hasNext(); i++) { - FileHistory h= (FileHistory) iter.next(); - selected[i]= h.getHistoryInput(); - } - return selected; - } - - protected synchronized Control createDialogArea(Composite parent2) { - - Composite parent= (Composite) super.createDialogArea(parent2); - - getShell().setText(Utilities.getString(fBundle, "title")); //$NON-NLS-1$ - - org.eclipse.compare.Splitter vsplitter= new org.eclipse.compare.Splitter(parent, SWT.VERTICAL); - vsplitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL - | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); - - vsplitter.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fDateImage != null) - fDateImage.dispose(); - if (fTimeImage != null) - fTimeImage.dispose(); - } - } - ); - - // we need two panes: the left for the elements, the right one for the editions - Splitter hsplitter= new Splitter(vsplitter, SWT.HORIZONTAL); - - Composite c= new Composite(hsplitter, SWT.NONE); - GridLayout layout= new GridLayout(); - layout.marginWidth= 0; - layout.marginHeight= 2; - layout.verticalSpacing= 2; - layout.numColumns= 1; - c.setLayout(layout); - Label l1= new Label(c, SWT.NONE); - l1.setText(Utilities.getString(fBundle, "memberDescription")); //$NON-NLS-1$ - fMemberPane= new CompareViewerPane(c, SWT.BORDER | SWT.FLAT); - GridData gd= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - fMemberPane.setLayoutData(gd); - - fMemberTable= new Table(fMemberPane, SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL); - fMemberTable.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (e.detail == SWT.CHECK) { - if (e.item instanceof TableItem) { - TableItem ti= (TableItem) e.item; - if (ti.getChecked()) - fArrayList.add(ti.getData()); - else - fArrayList.remove(ti.getData()); - - if (fCommitButton != null) - fCommitButton.setEnabled(fArrayList.size() > 0); - } - } else { - handleMemberSelect(e.item); - } - } - } - ); - - fMemberPane.setContent(fMemberTable); - - c= new Composite(hsplitter, SWT.NONE); - layout= new GridLayout(); - layout.marginWidth= 0; - layout.marginHeight= 2; - layout.verticalSpacing= 2; - layout.numColumns= 1; - c.setLayout(layout); - Label l2= new Label(c, SWT.NONE); - l2.setText(Utilities.getString(fBundle, "editionDescription")); //$NON-NLS-1$ - fEditionPane= new CompareViewerPane(c, SWT.BORDER | SWT.FLAT); - gd= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - fEditionPane.setLayoutData(gd); - - fEditionTree= new Tree(fEditionPane, SWT.H_SCROLL | SWT.V_SCROLL); - fEditionTree.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - feedContent(e.item); - } - } - ); - fEditionPane.setContent(fEditionTree); - - applyDialogFont(parent); // to avoid applying font to compare viewer - fContentPane= new CompareViewerSwitchingPane(vsplitter, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - return CompareUIPlugin.findContentViewer(oldViewer, input, this, fCompareConfiguration); - } - }; - vsplitter.setWeights(new int[] { 30, 70 }); - - return parent; - } - - /** - * Feeds selection from member viewer to edition viewer. - */ - private void handleMemberSelect(Widget w) { - Object data= w.getData(); - if (data instanceof FileHistory) { - - FileHistory h= (FileHistory) data; - fCurrentFileHistory= h; - - IFile file= h.getFile(); - IFileState[] states= h.getStates(); - - fEditionPane.setImage(CompareUI.getImage(file)); - String pattern= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$ - String title= MessageFormat.format(pattern, new Object[] { file.getName() }); - fEditionPane.setText(title); - - if (fEditionTree != null) { - fEditionTree.setRedraw(false); - fEditionTree.removeAll(); - for (int i= 0; i < states.length; i++) { - addEdition(new HistoryInput(file, states[i]), h.isSelected(i)); - } - fEditionTree.setRedraw(true); - } - } else - fCurrentFileHistory= null; - } - - /** - * Adds the given Pair to the edition tree. - * It takes care of creating tree nodes for different dates. - */ - private void addEdition(HistoryInput input, boolean isSelected) { - if (fEditionTree == null || fEditionTree.isDisposed()) - return; - - IFileState state= input.fFileState; - - // find last day - TreeItem[] days= fEditionTree.getItems(); - TreeItem lastDay= null; - if (days.length > 0) - lastDay= days[days.length-1]; - - long ldate= state.getModificationTime(); - long day= dayNumber(ldate); - Date date= new Date(ldate); - if (lastDay == null || day != dayNumber(((Date)lastDay.getData()).getTime())) { - lastDay= new TreeItem(fEditionTree, SWT.NONE); - lastDay.setImage(fDateImage); - String df= DateFormat.getDateInstance().format(date); - long today= dayNumber(System.currentTimeMillis()); - - String formatKey; - if (day == today) - formatKey= "todayFormat"; //$NON-NLS-1$ - else if (day == today-1) - formatKey= "yesterdayFormat"; //$NON-NLS-1$ - else - formatKey= "dayFormat"; //$NON-NLS-1$ - String pattern= Utilities.getString(fBundle, formatKey); - if (pattern != null) - df= MessageFormat.format(pattern, new String[] { df }); - lastDay.setText(df); - lastDay.setData(date); - } - TreeItem ti= new TreeItem(lastDay, SWT.NONE); - ti.setImage(fTimeImage); - ti.setText(DateFormat.getTimeInstance().format(date)); - ti.setData(input); - - if (isSelected) { - lastDay.setExpanded(true); - fEditionTree.setSelection(new TreeItem[] { ti }); - feedContent(ti); - } - } - - /** - * Returns the number of s since Jan 1st, 1970. - * The given date is converted to GMT and daylight saving is taken into account too. - */ - private long dayNumber(long date) { - int ONE_DAY_MS= 24*60*60 * 1000; // one day in milli seconds - - Calendar calendar= Calendar.getInstance(); - long localTimeOffset= calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET); - - return (date + localTimeOffset) / ONE_DAY_MS; - } - - /** - * Feeds the tree viewer's selection to the contentviewer - */ - private void feedContent(Widget w) { - if (fContentPane != null && !fContentPane.isDisposed()) { - Object o= w.getData(); - if (o instanceof HistoryInput) { - HistoryInput selected= (HistoryInput) o; - fContentPane.setInput(selected); - fContentPane.setText(getEditionLabel(selected)); - fContentPane.setImage(fTimeImage); - - if (fCurrentFileHistory != null) - fCurrentFileHistory.setSelected(selected.fFileState); - } else { - fContentPane.setInput(null); - } - } - } - - protected String getEditionLabel(HistoryInput input) { - String format= Utilities.getString(fBundle, "historyEditionLabel", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "editionLabel"); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - long modDate= input.getModificationDate(); - String date= DateFormat.getDateTimeInstance().format(new Date(modDate)); - - return MessageFormat.format(format, new Object[] { date }); - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - String buttonLabel= Utilities.getString(fBundle, "buttonLabel", IDialogConstants.OK_LABEL); //$NON-NLS-1$ - // a 'Cancel' and a 'Add' button - fCommitButton= createButton(parent, IDialogConstants.OK_ID, buttonLabel, true); - fCommitButton.setEnabled(false); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - - /** - * Returns true if the pathname of f1 comes after f2 - */ - private static boolean greaterThan(IFile f1, IFile f2) { - String[] ss1= f1.getFullPath().segments(); - String[] ss2= f2.getFullPath().segments(); - int l1= ss1.length; - int l2= ss2.length; - int n= Math.max(l1, l2); - - for (int i= 0; i < n; i++) { - String s1= i < l1 ? ss1[i] : ""; //$NON-NLS-1$ - String s2= i < l2 ? ss2[i] : ""; //$NON-NLS-1$ - int rc= s1.compareToIgnoreCase(s2); - if (rc != 0) - return rc < 0; - } - return false; - } - - private static void internalSort(IFile[] keys, int left, int right) { - - int original_left= left; - int original_right= right; - - IFile mid= keys[(left + right) / 2]; - do { - while (greaterThan(keys[left], mid)) - left++; - - while (greaterThan(mid, keys[right])) - right--; - - if (left <= right) { - IFile tmp= keys[left]; - keys[left]= keys[right]; - keys[right]= tmp; - left++; - right--; - } - } while (left <= right); - - if (original_left < right) - internalSort(keys, original_left, right); - - if (left < original_right) - internalSort(keys, left, original_right); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java deleted file mode 100644 index c9d673e7c..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.util.ResourceBundle; -import java.text.MessageFormat; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - -/** - * A simple compare viewer for binary files. - * Shows the position of the first non-matching byte. - */ -public class BinaryCompareViewer extends AbstractViewer { - - private static final String BUNDLE_NAME= "org.eclipse.compare.internal.BinaryCompareViewerResources"; //$NON-NLS-1$ - - private static final int EOF= -1; - private Text fControl; - private ICompareInput fInput; - private ResourceBundle fBundle; - private boolean fLeftIsLocal; - - - public BinaryCompareViewer(Composite parent, CompareConfiguration cc) { - - WorkbenchHelp.setHelp(parent, ICompareContextIds.BINARY_COMPARE_VIEW); - - fBundle= ResourceBundle.getBundle(BUNDLE_NAME); - - fControl= new Text(parent, SWT.NONE); - fControl.setEditable(false); - fControl.setData(CompareUI.COMPARE_VIEWER_TITLE, Utilities.getString(fBundle, "title")); //$NON-NLS-1$ - - fLeftIsLocal= Utilities.getBoolean(cc, "LEFT_IS_LOCAL", false); //$NON-NLS-1$ - } - - public Control getControl() { - return fControl; - } - - public void setInput(Object input) { - if (fControl != null && input instanceof ICompareInput) { - fInput= (ICompareInput) input; - - InputStream left= null; - InputStream right= null; - - String message= null; - try { - left= getStream(fInput.getLeft()); - right= getStream(fInput.getRight()); - - if (left != null && right != null) { - int pos= 0; - while (true) { - int l= left.read(); - int r= right.read(); - if (l != r) { - String format= Utilities.getString(fBundle, "diffMessageFormat"); //$NON-NLS-1$ - message= MessageFormat.format(format, new String[] { Integer.toString(pos) } ); - break; - } - if (l == EOF) - break; - pos++; - } - } else if (left == null && right == null) { - message= Utilities.getString(fBundle, "deleteConflictMessage"); //$NON-NLS-1$ - } else if (left == null) { - if (fLeftIsLocal) - message= Utilities.getString(fBundle, "deletedMessage"); //$NON-NLS-1$ - else - message= Utilities.getString(fBundle, "addedMessage"); //$NON-NLS-1$ - } else if (right == null) { - if (fLeftIsLocal) - message= Utilities.getString(fBundle, "addedMessage"); //$NON-NLS-1$ - else - message= Utilities.getString(fBundle, "deletedMessage"); //$NON-NLS-1$ - } - } catch (CoreException ex) { - message= Utilities.getString(fBundle, "errorMessage"); //$NON-NLS-1$ - } catch (IOException ex) { - message= Utilities.getString(fBundle, "errorMessage"); //$NON-NLS-1$ - } finally { - if (left != null) { - try { - left.close(); - } catch (IOException ex) { - } - } - if (right != null) { - try { - right.close(); - } catch (IOException ex) { - } - } - } - if (message != null) - fControl.setText(message); - } - } - - public Object getInput() { - return fInput; - } - - private InputStream getStream(ITypedElement input) throws CoreException { - if (input instanceof IStreamContentAccessor) - return ((IStreamContentAccessor)input).getContents(); - return null; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java deleted file mode 100644 index 8c98ec6ff..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; - -/** - * A factory object for the <code>BinaryCompareViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class BinaryCompareViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new BinaryCompareViewer(parent, mp); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties deleted file mode 100644 index dbfc7d70e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties +++ /dev/null @@ -1,22 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)BinaryCompareViewerResources.properties -# -# Resource strings for BinaryCompareViewer.java - -title= Binary Compare - -diffMessageFormat= First bytes differ at position {0} -deleteConflictMessage= Delete Conflict -addedMessage= Added Resource -deletedMessage= Removed Resource -errorMessage= Internal Error diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java deleted file mode 100644 index 79b34255d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.events.*; - -/** - * A Canvas which reduces flicker by drawing in an off screen buffer. - */ -public abstract class BufferedCanvas extends Canvas { - - //private static final boolean USE_DOUBLE_BUFFER= !"carbon".equals(SWT.getPlatform()); //$NON-NLS-1$ - private static final boolean USE_DOUBLE_BUFFER= true; - - /** The drawable for double buffering */ - Image fBuffer; - - public BufferedCanvas(Composite parent, int flags) { - super(parent, flags + SWT.NO_BACKGROUND); - - addPaintListener( - new PaintListener() { - public void paintControl(PaintEvent event) { - doubleBufferPaint(event.gc); - } - } - ); - - addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fBuffer != null) { - fBuffer.dispose(); - fBuffer= null; - } - } - } - ); - } - - public void repaint() { - if (!isDisposed()) { - GC gc= new GC(this); - doubleBufferPaint(gc); - gc.dispose(); - } - } - - /** - * Double buffer drawing. - */ - void doubleBufferPaint(GC dest) { - - if (!USE_DOUBLE_BUFFER) { - doPaint(dest); - return; - } - - Point size= getSize(); - - if (size.x <= 1 || size.y <= 1) // we test for <= 1 because on X11 controls have initial size 1,1 - return; - - if (fBuffer != null) { - Rectangle r= fBuffer.getBounds(); - if (r.width != size.x || r.height != size.y) { - fBuffer.dispose(); - fBuffer= null; - } - } - if (fBuffer == null) - fBuffer= new Image(getDisplay(), size.x, size.y); - - GC gc= new GC(fBuffer); - try { - gc.setBackground(getBackground()); - gc.fillRectangle(0, 0, size.x, size.y); - doPaint(gc); - } finally { - gc.dispose(); - } - - dest.drawImage(fBuffer, 0, 0); - } - - abstract public void doPaint(GC gc); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java deleted file mode 100644 index 9c5db3d50..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java +++ /dev/null @@ -1,117 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.IStructureComparator; - -/** - * A buffer for a workspace resource. - */ -public class BufferedResourceNode extends ResourceNode { - - private boolean fDirty= false; - private IFile fDeleteFile; - - /** - * Creates a <code>ResourceNode</code> for the given resource. - * - * @param resource the resource - */ - public BufferedResourceNode(IResource resource) { - super(resource); - } - - protected IStructureComparator createChild(IResource child) { - return new BufferedResourceNode(child); - } - - public void setContent(byte[] contents) { - fDirty= true; - super.setContent(contents); - } - - /** - * Commits buffered contents to resource. - */ - public void commit(IProgressMonitor pm) throws CoreException { - if (fDirty) { - - if (fDeleteFile != null) { - fDeleteFile.delete(true, true, pm); - return; - } - - IResource resource= getResource(); - if (resource instanceof IFile) { - ByteArrayInputStream is= new ByteArrayInputStream(getContent()); - try { - IFile file= (IFile) resource; - if (file.exists()) - file.setContents(is, false, true, pm); - else - file.create(is, false, pm); - fDirty= false; - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - } - } - } - } - } - - public ITypedElement replace(ITypedElement child, ITypedElement other) { - - if (child == null) { // add resource - // create a node without a resource behind it! - IResource resource= getResource(); - if (resource instanceof IFolder) { - IFolder folder= (IFolder) resource; - IFile file= folder.getFile(other.getName()); - child= new BufferedResourceNode(file); - } - } - - if (other == null) { // delete resource - IResource resource= getResource(); - if (resource instanceof IFolder) { - IFolder folder= (IFolder) resource; - IFile file= folder.getFile(child.getName()); - if (file != null && file.exists()) { - fDeleteFile= file; - fDirty= true; - } - } - return null; - } - - if (other instanceof IStreamContentAccessor && child instanceof IEditableContent) { - IEditableContent dst= (IEditableContent) child; - - try { - InputStream is= ((IStreamContentAccessor)other).getContents(); - byte[] bytes= Utilities.readBytes(is); - if (bytes != null) - dst.setContent(bytes); - } catch (CoreException ex) { - } - } - return child; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java deleted file mode 100644 index 824ed3e1c..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.jface.action.Action; -import org.eclipse.compare.CompareConfiguration; - -/** - * Toggles a boolean property of an <code>ICompareConfiguration</code>. - */ -public class ChangePropertyAction extends Action { - - private CompareConfiguration fCompareConfiguration; - private String fPropertyKey; - private ResourceBundle fBundle; - private String fPrefix; - - - public ChangePropertyAction(ResourceBundle bundle, CompareConfiguration cc, String rkey, String pkey) { - fPropertyKey= pkey; - fBundle= bundle; - fPrefix= rkey; - Utilities.initAction(this, fBundle, fPrefix); - setCompareConfiguration(cc); - } - - public void run() { - boolean b= !Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false); - setChecked(b); - if (fCompareConfiguration != null) - fCompareConfiguration.setProperty(fPropertyKey, new Boolean(b)); - } - - public void setChecked(boolean state) { - super.setChecked(state); - Utilities.initToggleAction(this, fBundle, fPrefix, state); - } - - public void setCompareConfiguration(CompareConfiguration cc) { - fCompareConfiguration= cc; - setChecked(Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false)); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java deleted file mode 100644 index 787c3fb26..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.ColorDialog; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; - -import org.eclipse.jface.resource.JFaceResources; - -/** - * A "button" of a certain color determined by the color picker. - */ -public class ColorEditor { - - private Point fExtent; - private Image fImage; - private RGB fColorValue; - private Color fColor; - private Button fButton; - - public ColorEditor(Composite parent) { - - fButton= new Button(parent, SWT.PUSH); - fExtent= computeImageSize(parent); - fImage= new Image(parent.getDisplay(), fExtent.x, fExtent.y); - - GC gc= new GC(fImage); - gc.setBackground(fButton.getBackground()); - gc.fillRectangle(0, 0, fExtent.x, fExtent.y); - gc.dispose(); - - fButton.setImage(fImage); - fButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - ColorDialog colorDialog= new ColorDialog(fButton.getShell()); - colorDialog.setRGB(fColorValue); - RGB newColor = colorDialog.open(); - if (newColor != null) { - fColorValue= newColor; - updateColorImage(); - } - } - }); - - fButton.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent event) { - if (fImage != null) { - fImage.dispose(); - fImage= null; - } - if (fColor != null) { - fColor.dispose(); - fColor= null; - } - } - }); - } - - public RGB getColorValue() { - return fColorValue; - } - - public void setColorValue(RGB rgb) { - fColorValue= rgb; - updateColorImage(); - } - - public Button getButton() { - return fButton; - } - - protected void updateColorImage() { - - Display display= fButton.getDisplay(); - - GC gc= new GC(fImage); - gc.setForeground(display.getSystemColor(SWT.COLOR_BLACK)); - gc.drawRectangle(0, 2, fExtent.x - 1, fExtent.y - 4); - - if (fColor != null) - fColor.dispose(); - - fColor= new Color(display, fColorValue); - gc.setBackground(fColor); - gc.fillRectangle(1, 3, fExtent.x - 2, fExtent.y - 5); - gc.dispose(); - - fButton.setImage(fImage); - } - - protected Point computeImageSize(Control window) { - GC gc= new GC(window); - Font f= JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT); - gc.setFont(f); - int height= gc.getFontMetrics().getHeight(); - gc.dispose(); - Point p= new Point(height * 3 - 6, height); - return p; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java deleted file mode 100644 index 1e899e6a3..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; - -import org.eclipse.ui.IObjectActionDelegate; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.CompareUI; - - -/* - * The "Compare with each other" action - */ -public class CompareAction implements IObjectActionDelegate { - - private ResourceCompareInput fInput; - private IWorkbenchPage fWorkbenchPage; - - public void run(IAction action) { - if (fInput != null) { - fInput.initializeCompareConfiguration(); - CompareUI.openCompareEditorOnPage(fInput, fWorkbenchPage); - fInput= null; // don't reuse this input! - } - } - - public void selectionChanged(IAction action, ISelection selection) { - if (fInput == null) { - CompareConfiguration cc= new CompareConfiguration(); - // buffered merge mode: don't ask for confirmation - // when switching between modified resources - cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, new Boolean(false)); - - fInput= new ResourceCompareInput(cc); - } - action.setEnabled(fInput.setSelection(selection)); - } - - public void setActivePart(IAction action, IWorkbenchPart targetPart) { - fWorkbenchPage= targetPart.getSite().getPage(); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java deleted file mode 100644 index 335a02395..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; - -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; - - -public class CompareDialog extends ResizableDialog implements IPropertyChangeListener { - - private CompareEditorInput fCompareEditorInput; - private Button fCommitButton; - - - CompareDialog(Shell shell, CompareEditorInput input) { - super(shell, null); - - Assert.isNotNull(input); - fCompareEditorInput= input; - fCompareEditorInput.addPropertyChangeListener(this); - setHelpContextId(ICompareContextIds.COMPARE_DIALOG); - } - - public boolean close() { - if (super.close()) { - if (fCompareEditorInput != null) - fCompareEditorInput.addPropertyChangeListener(this); - return true; - } - return false; - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - fCommitButton= createButton(parent, IDialogConstants.OK_ID, Utilities.getString("CompareDialog.commitAction.label"), true); //$NON-NLS-1$ - fCommitButton.setEnabled(false); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - - public void propertyChange(PropertyChangeEvent event) { - if (fCommitButton != null && fCompareEditorInput != null) - fCommitButton.setEnabled(fCompareEditorInput.isSaveNeeded()); - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected Control createDialogArea(Composite parent2) { - - Composite parent= (Composite) super.createDialogArea(parent2); - - Control c= fCompareEditorInput.createContents(parent); - c.setLayoutData(new GridData(GridData.FILL_BOTH)); - - Shell shell= c.getShell(); - shell.setText(fCompareEditorInput.getTitle()); - shell.setImage(fCompareEditorInput.getTitleImage()); - applyDialogFont(parent); - return parent; - } - - /* (non-Javadoc) - * Method declared on Window. - */ - public int open() { - - int rc= super.open(); - - if (rc == OK && fCompareEditorInput.isSaveNeeded()) { - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws CoreException { - fCompareEditorInput.saveChanges(pm); - } - }; - - Shell shell= getParentShell(); - ProgressMonitorDialog pmd= new ProgressMonitorDialog(shell); - try { - operation.run(pmd.getProgressMonitor()); - - } catch (InterruptedException x) { - } catch (OperationCanceledException x) { - } catch (InvocationTargetException x) { - String title= Utilities.getString("CompareDialog.saveErrorTitle"); //$NON-NLS-1$ - String msg= Utilities.getString("CompareDialog.saveErrorMessage"); //$NON-NLS-1$ - MessageDialog.openError(shell, title, msg + x.getTargetException().getMessage()); - } - } - - return rc; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java deleted file mode 100644 index 33fd75eea..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.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.help.WorkbenchHelp; -import org.eclipse.ui.part.EditorPart; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; - - -/** - * A CompareEditor takes a ICompareEditorInput as input. - * Most functionality is delegated to the ICompareEditorInput. - */ -public class CompareEditor extends EditorPart implements 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) { - Control c= ((CompareEditorInput) input).createContents(parent); - WorkbenchHelp.setHelp(c, ICompareContextIds.COMPARE_EDITOR); - } - } - - /* - * @see DesktopPart#dispose - */ - public void dispose() { - - IEditorInput input= getEditorInput(); - if (input instanceof IPropertyChangeNotifier) - ((IPropertyChangeNotifier)input).removePropertyChangeListener(this); - - super.dispose(); - } - - /* - * @see IDesktopPart#setFocus - */ - public void setFocus() { - IEditorInput input= getEditorInput(); - if (input instanceof CompareEditorInput) - ((CompareEditorInput)input).setFocus(); - } - - /** - * Returns false because the editor doesn't support "Save As...". - */ - public boolean isSaveAsAllowed() { - return false; - } - - public void gotoMarker(IMarker marker) { - } - - /** - * Always throws an AssertionFailedException. - */ - /* - * @see IEditorPart#doSaveAs() - */ - public void doSaveAs() { - Assert.isTrue(false); // Save As not supported for CompareEditor - } - - /* - * @see IEditorPart#doSave() - */ - public void doSave(IProgressMonitor progressMonitor) { - - final IEditorInput input= getEditorInput(); - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws CoreException { - if (input instanceof CompareEditorInput) - ((CompareEditorInput)input).saveChanges(pm); - } - }; - - Shell shell= getSite().getShell(); - - try { - - operation.run(progressMonitor); - - firePropertyChange(PROP_DIRTY); - - } catch (InterruptedException x) { - } catch (OperationCanceledException x) { - } catch (InvocationTargetException x) { - String title= Utilities.getString("CompareEditor.saveError.title"); //$NON-NLS-1$ - String reason= x.getTargetException().getMessage(); - MessageDialog.openError(shell, title, Utilities.getFormattedString("CompareEditor.cantSaveError", reason)); //$NON-NLS-1$ - } - } - - /* - * @see IEditorPart#isDirty() - */ - public boolean isDirty() { - IEditorInput input= getEditorInput(); - if (input instanceof CompareEditorInput) - return ((CompareEditorInput)input).isSaveNeeded(); - return false; - } - - public void propertyChange(PropertyChangeEvent event) { - if (isDirty()) - firePropertyChange(PROP_DIRTY); - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java deleted file mode 100644 index 87735feb5..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.jface.action.*; - -import org.eclipse.ui.*; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.part.EditorActionBarContributor; - -import org.eclipse.compare.*; - - -public class CompareEditorContributor extends EditorActionBarContributor { - - private IEditorPart fActiveEditorPart= null; - - private IgnoreWhiteSpaceAction fIgnoreWhitespace; - private NavigationAction fNext; - private NavigationAction fPrevious; - - private NavigationAction fToolbarNext; - private NavigationAction fToolbarPrevious; - - - public CompareEditorContributor() { - ResourceBundle bundle= CompareUIPlugin.getResourceBundle(); - - fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, null); - WorkbenchHelp.setHelp(fIgnoreWhitespace, ICompareContextIds.IGNORE_WHITESPACE_ACTION); - - fNext= new NavigationAction(bundle, true); - WorkbenchHelp.setHelp(fNext, ICompareContextIds.GLOBAL_NEXT_DIFF_ACTION); - - fPrevious= new NavigationAction(bundle, false); - WorkbenchHelp.setHelp(fPrevious, ICompareContextIds.GLOBAL_PREVIOUS_DIFF_ACTION); - - fToolbarNext= new NavigationAction(bundle, true); - WorkbenchHelp.setHelp(fToolbarNext,ICompareContextIds.NEXT_DIFF_ACTION); - - fToolbarPrevious= new NavigationAction(bundle, false); - WorkbenchHelp.setHelp(fToolbarPrevious, ICompareContextIds.PREVIOUS_DIFF_ACTION); - } - - /* - * @see EditorActionBarContributor#contributeToToolBar(IToolBarManager) - */ - public void contributeToToolBar(IToolBarManager tbm) { - tbm.add(new Separator()); - tbm.add(fIgnoreWhitespace); - tbm.add(fToolbarNext); - tbm.add(fToolbarPrevious); - } - - /* - * @see EditorActionBarContributor#contributeToMenu(IMenuManager) - */ - public void contributeToMenu(IMenuManager menuManager) { - } - - public void setActiveEditor(IEditorPart targetEditor) { - - if (fActiveEditorPart == targetEditor) - return; - - fActiveEditorPart= targetEditor; - - if (fActiveEditorPart != null) { - IEditorInput input= fActiveEditorPart.getEditorInput(); - if (input instanceof CompareEditorInput) { - CompareEditorInput compareInput= (CompareEditorInput) input; - fNext.setCompareEditorInput(compareInput); - fPrevious.setCompareEditorInput(compareInput); - // Begin fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105 - fToolbarNext.setCompareEditorInput(compareInput); - fToolbarPrevious.setCompareEditorInput(compareInput); - // End fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105 - } - } - - if (targetEditor instanceof CompareEditor) { - IActionBars actionBars= getActionBars(); - - CompareEditor editor= (CompareEditor) targetEditor; - editor.setActionBars(actionBars); - - actionBars.setGlobalActionHandler(IWorkbenchActionConstants.NEXT, fNext); - actionBars.setGlobalActionHandler(IWorkbenchActionConstants.PREVIOUS, fPrevious); - - CompareConfiguration cc= editor.getCompareConfiguration(); - fIgnoreWhitespace.setCompareConfiguration(cc); - } - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java deleted file mode 100644 index b6fb85fd5..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class CompareMessages { - - private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.CompareMessages";//$NON-NLS-1$ - - private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); - - private CompareMessages() { - } - - public static String getString(String key) { - try { - return fgResourceBundle.getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties deleted file mode 100644 index e29774d71..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties +++ /dev/null @@ -1,58 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -ComparePlugin.internal_error= Internal Error -ExceptionDialog.seeErrorLogMessage= See error log for more details. - -# -# Title format for CompareViewerSwitchingPane -# -CompareViewerSwitchingPane.Titleformat= {0} ({1}) - -# -# Title message for StructureDiffViewer if no structural differences could be found -# -StructureDiffViewer.NoStructuralDifferences= No Structural Differences -StructureDiffViewer.StructureError= Can't Compare Structures - -# -# TextMergeViewer -# -TextMergeViewer.cursorPosition.format= {0} : {1} - -TextMergeViewer.beforeLine.format= before line {0} -TextMergeViewer.range.format= {0} : {1} - -TextMergeViewer.changeType.addition= addition -TextMergeViewer.changeType.deletion= deletion -TextMergeViewer.changeType.change= change - -TextMergeViewer.direction.outgoing= outgoing -TextMergeViewer.direction.incoming= incoming -TextMergeViewer.direction.conflicting= conflicting - -TextMergeViewer.diffType.format= {0} {1} - -TextMergeViewer.diffDescription.noDiff.format= no diff -TextMergeViewer.diffDescription.diff.format= {0} #{1} (Left: {2}, Right: {3}) -TextMergeViewer.statusLine.format= Left: {0}, Right: {1}, {2} - -TextMergeViewer.atEnd.title= Go to Next Difference -TextMergeViewer.atEnd.message= End of document reached. Continue at beginning? - -TextMergeViewer.atBeginning.title= Go to Previous Difference -TextMergeViewer.atBeginning.message= Beginning of document reached. Continue at end? - -CompareNavigator.atEnd.title= Go to Next Difference -CompareNavigator.atEnd.message= Last difference reached. - -CompareNavigator.atBeginning.title= Go to Previous Difference -CompareNavigator.atBeginning.message= First difference reached. diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java deleted file mode 100644 index 9812a86fc..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java +++ /dev/null @@ -1,179 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.dialogs.MessageDialog; - -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.compare.*; - -/** - * Supports cross-pane navigation through differences. - * XXX: Design is as it is because the feature had to be added without touching API. - */ -public class CompareNavigator { - - private boolean fLastDirection= true; - private CompareViewerSwitchingPane[] fPanes; - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - private boolean fNextFirstTime= true; - - public CompareNavigator(CompareViewerSwitchingPane[] panes) { - fPanes= panes; - } - - public CompareViewerSwitchingPane[] getPanes() { - return fPanes; - } - - public void selectChange(boolean next) { - - fLastDirection= next; - - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - if (next && fNextFirstTime && mustOpen()) { - fNextFirstTime= false; - openElement(); - } - - // find most down stream CompareViewerPane - int n= 0; - INavigatable[] navigators= new INavigatable[4]; - for (int i= 0; i < fPanes.length; i++) { - navigators[n]= getNavigator(fPanes[i]); - if (navigators[n] != null) - n++; - } - - while (n > 0) { - n--; - if (navigators[n].gotoDifference(next)) { - // at end of this navigator - continue; - } else // not at end - return; - } - // beep - if (fPanes[0] != null) { - Control c= fPanes[0].getContent(); - if (c != null) { - Display display= c.getDisplay(); - if (display != null) - display.beep(); - - String title; - String message; - if (next) { - title= CompareMessages.getString("CompareNavigator.atEnd.title"); //$NON-NLS-1$ - message= CompareMessages.getString("CompareNavigator.atEnd.message"); //$NON-NLS-1$ - } else { - title= CompareMessages.getString("CompareNavigator.atBeginning.title"); //$NON-NLS-1$ - message= CompareMessages.getString("CompareNavigator.atBeginning.message"); //$NON-NLS-1$ - } - MessageDialog.openInformation(c.getShell(), title, message); - } - } - } - - private static INavigatable getNavigator(CompareViewerSwitchingPane pane) { - if (pane == null) - return null; - if (pane.isEmpty()) - return null; - Viewer viewer= pane.getViewer(); - if (viewer == null) - return null; - Control control= viewer.getControl(); - if (control == null) - return null; - Object data= control.getData(INavigatable.NAVIGATOR_PROPERTY); - if (data instanceof INavigatable) - return (INavigatable) data; - return null; - } - - private static CompareNavigator findNavigator(Control c) { - while (c != null && !c.isDisposed()) { // PR 1GEUVV2 - Object data= c.getData(); - if (data instanceof CompareEditorInput) { - CompareEditorInput cei= (CompareEditorInput) data; - Object adapter= cei.getAdapter(CompareNavigator.class); - if (adapter instanceof CompareNavigator) - return (CompareNavigator)adapter; - } - c= c.getParent(); - } - return null; - } - - private boolean resetDirection() { - boolean last= fLastDirection; - fLastDirection= true; - return last; - } - - public static boolean getDirection(Control c) { - CompareNavigator nav= findNavigator(c); - if (nav != null) - return nav.resetDirection(); - return true; - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private boolean mustOpen() { - if (fPanes == null || fPanes.length == 0) - return false; - for (int i= 1; i < fPanes.length; i++) { - CompareViewerSwitchingPane pane= fPanes[i]; - if (pane != null && pane.getInput() != null) - return false; - } - return true; - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private void openElement() { - if (fPanes == null || fPanes.length == 0) - return; - IOpenable openable= getOpenable(fPanes[0]); - if (openable != null) { - openable.openSelected(); - } - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private static IOpenable getOpenable(CompareViewerSwitchingPane pane) { - if (pane == null) - return null; - if (pane.isEmpty()) - return null; - Viewer viewer= pane.getViewer(); - if (viewer == null) - return null; - Control control= viewer.getControl(); - if (control == null) - return null; - Object data= control.getData(IOpenable.OPENABLE_PROPERTY); - if (data instanceof IOpenable) - return (IOpenable) data; - return null; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java deleted file mode 100644 index 9b5496af0..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java +++ /dev/null @@ -1,356 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; -import java.io.*; - -import org.eclipse.swt.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.preference.*; -import org.eclipse.jface.util.*; - -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.texteditor.AbstractTextEditor; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.TextMergeViewer; -import org.eclipse.compare.structuremergeviewer.*; - - -public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - - class FakeInput implements ITypedElement, IStreamContentAccessor { - String fContent; - - FakeInput(String name) { - fContent= loadPreviewContentFromFile(name); - } - public Image getImage() { - return null; - } - public String getName() { - return "no name"; //$NON-NLS-1$ - } - public String getType() { - return "no type"; //$NON-NLS-1$ - } - public InputStream getContents() { - return new ByteArrayInputStream(fContent.getBytes()); - } - }; - - private static final String PREFIX= CompareUIPlugin.PLUGIN_ID + "."; //$NON-NLS-1$ - public static final String OPEN_STRUCTURE_COMPARE= PREFIX + "OpenStructureCompare"; //$NON-NLS-1$ - public static final String SYNCHRONIZE_SCROLLING= PREFIX + "SynchronizeScrolling"; //$NON-NLS-1$ - public static final String SHOW_PSEUDO_CONFLICTS= PREFIX + "ShowPseudoConflicts"; //$NON-NLS-1$ - public static final String INITIALLY_SHOW_ANCESTOR_PANE= PREFIX + "InitiallyShowAncestorPane"; //$NON-NLS-1$ - public static final String PREF_SAVE_ALL_EDITORS= PREFIX + "SaveAllEditors"; //$NON-NLS-1$ - public static final String SHOW_MORE_INFO= PREFIX + "ShowMoreInfo"; //$NON-NLS-1$ - public static final String IGNORE_WHITESPACE= PREFIX + "IgnoreWhitespace"; //$NON-NLS-1$ - //public static final String USE_SPLINES= PREFIX + "UseSplines"; //$NON-NLS-1$ - public static final String USE_SINGLE_LINE= PREFIX + "UseSingleLine"; //$NON-NLS-1$ - //public static final String USE_RESOLVE_UI= PREFIX + "UseResolveUI"; //$NON-NLS-1$ - - - private TextMergeViewer fPreviewViewer; - private IPropertyChangeListener fPreferenceChangeListener; - private CompareConfiguration fCompareConfiguration; - private OverlayPreferenceStore fOverlayStore; - private Map fCheckBoxes= new HashMap(); - private SelectionListener fCheckBoxListener; - - - public final OverlayPreferenceStore.OverlayKey[] fKeys= new OverlayPreferenceStore.OverlayKey[] { - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, OPEN_STRUCTURE_COMPARE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SYNCHRONIZE_SCROLLING), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_PSEUDO_CONFLICTS), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, INITIALLY_SHOW_ANCESTOR_PANE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_MORE_INFO), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IGNORE_WHITESPACE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PREF_SAVE_ALL_EDITORS), - - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT), - - //new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_SPLINES), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_SINGLE_LINE), - //new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_RESOLVE_UI), - }; - - - public static void initDefaults(IPreferenceStore store) { - store.setDefault(OPEN_STRUCTURE_COMPARE, true); - store.setDefault(SYNCHRONIZE_SCROLLING, true); - store.setDefault(SHOW_PSEUDO_CONFLICTS, false); - store.setDefault(INITIALLY_SHOW_ANCESTOR_PANE, false); - store.setDefault(SHOW_MORE_INFO, false); - store.setDefault(IGNORE_WHITESPACE, false); - store.setDefault(PREF_SAVE_ALL_EDITORS, false); - //store.setDefault(USE_SPLINES, false); - store.setDefault(USE_SINGLE_LINE, true); - //store.setDefault(USE_RESOLVE_UI, false); - - store.setDefault(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, true); - } - - public ComparePreferencePage() { - - //setDescription(Utilities.getString("ComparePreferencePage.description")); //$NON-NLS-1$ - - setPreferenceStore(CompareUIPlugin.getDefault().getPreferenceStore()); - - fOverlayStore= new OverlayPreferenceStore(getPreferenceStore(), fKeys); - fPreferenceChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - String key= event.getProperty(); - if (key.equals(INITIALLY_SHOW_ANCESTOR_PANE)) { - boolean b= fOverlayStore.getBoolean(INITIALLY_SHOW_ANCESTOR_PANE); - if (fCompareConfiguration != null) { - fCompareConfiguration.setProperty(INITIALLY_SHOW_ANCESTOR_PANE, new Boolean(b)); - } - } - } - }; - fOverlayStore.addPropertyChangeListener(fPreferenceChangeListener); - } - - /* - * @see IWorkbenchPreferencePage#init() - */ - public void init(IWorkbench workbench) { - } - - /* - * @see PreferencePage#performOk() - */ - public boolean performOk() { - fOverlayStore.propagate(); - return true; - } - - /* - * @see PreferencePage#performDefaults() - */ - protected void performDefaults() { - - fOverlayStore.loadDefaults(); - initializeFields(); - - super.performDefaults(); - } - - /* - * @see DialogPage#dispose() - */ - public void dispose() { - - if (fOverlayStore != null) { - if (fPreferenceChangeListener != null) { - fOverlayStore.removePropertyChangeListener(fPreferenceChangeListener); - fPreferenceChangeListener= null; - } - fOverlayStore.stop(); - fOverlayStore= null; - } - - super.dispose(); - } - - static public boolean getSaveAllEditors() { - IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore(); - return store.getBoolean(PREF_SAVE_ALL_EDITORS); - } - - static public void setSaveAllEditors(boolean value) { - IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore(); - store.setValue(PREF_SAVE_ALL_EDITORS, value); - } - - /* - * @see PreferencePage#createContents(Composite) - */ - protected Control createContents(Composite parent) { - - WorkbenchHelp.setHelp(parent, ICompareContextIds.COMPARE_PREFERENCE_PAGE); - - fOverlayStore.load(); - fOverlayStore.start(); - - TabFolder folder= new TabFolder(parent, SWT.NONE); - folder.setLayout(new TabFolderLayout()); - folder.setLayoutData(new GridData(GridData.FILL_BOTH)); - - TabItem item= new TabItem(folder, SWT.NONE); - item.setText(Utilities.getString("ComparePreferencePage.generalTab.label")); //$NON-NLS-1$ - //item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); - item.setControl(createGeneralPage(folder)); - - item= new TabItem(folder, SWT.NONE); - item.setText(Utilities.getString("ComparePreferencePage.textCompareTab.label")); //$NON-NLS-1$ - //item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); - item.setControl(createTextComparePage(folder)); - - initializeFields(); - Dialog.applyDialogFont(folder); - return folder; - } - - private Control createGeneralPage(Composite parent) { - Composite composite= new Composite(parent, SWT.NULL); - GridLayout layout= new GridLayout(); - layout.numColumns= 1; - composite.setLayout(layout); - - addCheckBox(composite, "ComparePreferencePage.structureCompare.label", OPEN_STRUCTURE_COMPARE, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.showMoreInfo.label", SHOW_MORE_INFO, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.ignoreWhitespace.label", IGNORE_WHITESPACE, 0); //$NON-NLS-1$ - - // a spacer - new Label(composite, SWT.NONE); - - addCheckBox(composite, "ComparePreferencePage.saveBeforePatching.label", PREF_SAVE_ALL_EDITORS, 0); //$NON-NLS-1$ - - return composite; - } - - private Control createTextComparePage(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - GridLayout layout= new GridLayout(); - layout.numColumns= 1; - composite.setLayout(layout); - - addCheckBox(composite, "ComparePreferencePage.synchronizeScrolling.label", SYNCHRONIZE_SCROLLING, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.initiallyShowAncestorPane.label", INITIALLY_SHOW_ANCESTOR_PANE, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.showPseudoConflicts.label", SHOW_PSEUDO_CONFLICTS, 0); //$NON-NLS-1$ - - //addCheckBox(composite, "ComparePreferencePage.useSplines.label", USE_SPLINES, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.useSingleLine.label", USE_SINGLE_LINE, 0); //$NON-NLS-1$ - //addCheckBox(composite, "ComparePreferencePage.useResolveUI.label", USE_RESOLVE_UI, 0); //$NON-NLS-1$ - - // a spacer - new Label(composite, SWT.NONE); - - Label previewLabel= new Label(composite, SWT.NULL); - previewLabel.setText(Utilities.getString("ComparePreferencePage.preview.label")); //$NON-NLS-1$ - - Control previewer= createPreviewer(composite); - GridData gd= new GridData(GridData.FILL_BOTH); - gd.widthHint= convertWidthInCharsToPixels(60); - gd.heightHint= convertHeightInCharsToPixels(13); - previewer.setLayoutData(gd); - - return composite; - } - - private Control createPreviewer(Composite parent) { - - fCompareConfiguration= new CompareConfiguration(fOverlayStore); - fCompareConfiguration.setAncestorLabel(Utilities.getString("ComparePreferencePage.ancestor.label")); //$NON-NLS-1$ - - fCompareConfiguration.setLeftLabel(Utilities.getString("ComparePreferencePage.left.label")); //$NON-NLS-1$ - fCompareConfiguration.setLeftEditable(false); - - fCompareConfiguration.setRightLabel(Utilities.getString("ComparePreferencePage.right.label")); //$NON-NLS-1$ - fCompareConfiguration.setRightEditable(false); - - fPreviewViewer= new TextMergeViewer(parent, SWT.BORDER, fCompareConfiguration); - - fPreviewViewer.setInput( - new DiffNode(Differencer.CONFLICTING, - new FakeInput("previewAncestor.txt"), //$NON-NLS-1$ - new FakeInput("previewLeft.txt"), //$NON-NLS-1$ - new FakeInput("previewRight.txt") //$NON-NLS-1$ - ) - ); - - Control c= fPreviewViewer.getControl(); - c.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fCompareConfiguration != null) - fCompareConfiguration.dispose(); - } - }); - - return c; - } - - private void initializeFields() { - - Iterator e= fCheckBoxes.keySet().iterator(); - while (e.hasNext()) { - Button b= (Button) e.next(); - String key= (String) fCheckBoxes.get(b); - b.setSelection(fOverlayStore.getBoolean(key)); - } - } - - // overlay stuff - - private Button addCheckBox(Composite parent, String labelKey, String key, int indentation) { - - String label= Utilities.getString(labelKey); - - Button checkBox= new Button(parent, SWT.CHECK); - checkBox.setText(label); - - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalIndent= indentation; - gd.horizontalSpan= 2; - checkBox.setLayoutData(gd); - - if (fCheckBoxListener == null) { - fCheckBoxListener= new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - Button button= (Button) e.widget; - fOverlayStore.setValue((String) fCheckBoxes.get(button), button.getSelection()); - } - }; - } - checkBox.addSelectionListener(fCheckBoxListener); - - fCheckBoxes.put(checkBox, key); - - return checkBox; - } - - private String loadPreviewContentFromFile(String filename) { - String separator= System.getProperty("line.separator"); //$NON-NLS-1$ - StringBuffer buffer= new StringBuffer(512); - BufferedReader reader= null; - try { - reader= new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(filename))); - String line; - while ((line= reader.readLine()) != null) { - buffer.append(line); - buffer.append(separator); - } - } catch (IOException io) { - CompareUIPlugin.log(io); - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - } - } - } - return buffer.toString(); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java deleted file mode 100644 index f05c019bd..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java +++ /dev/null @@ -1,879 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.MalformedURLException; -import java.lang.reflect.InvocationTargetException; -import java.util.*; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.preference.IPreferenceStore; - -import org.eclipse.core.runtime.*; -import org.eclipse.ui.model.IWorkbenchAdapter; -import org.eclipse.ui.*; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.ui.plugin.AbstractUIPlugin; - - -/** - * The Compare UI plug-in defines the entry point to initiate a configurable - * compare operation on arbitrary resources. The result of the compare - * is opened into a compare editor where the details can be browsed and - * edited in dynamically selected structure and content viewers. - * <p> - * The Compare UI provides a registry for content and structure compare viewers, - * which is initialized from extensions contributed to extension points - * declared by this plug-in. - * <p> - * This class is the plug-in runtime class for the - * <code>"org.eclipse.compare"</code> plug-in. - * </p> - */ -public final class CompareUIPlugin extends AbstractUIPlugin { - - public static final String DTOOL_NEXT= "dlcl16/next_nav.gif"; //$NON-NLS-1$ - public static final String CTOOL_NEXT= "clcl16/next_nav.gif"; //$NON-NLS-1$ - public static final String ETOOL_NEXT= "elcl16/next_nav.gif"; //$NON-NLS-1$ - - public static final String DTOOL_PREV= "dlcl16/prev_nav.gif"; //$NON-NLS-1$ - public static final String CTOOL_PREV= "clcl16/prev_nav.gif"; //$NON-NLS-1$ - public static final String ETOOL_PREV= "elcl16/prev_nav.gif"; //$NON-NLS-1$ - - /** Status code describing an internal error */ - public static final int INTERNAL_ERROR= 1; - - private static boolean NORMALIZE_CASE= true; - - private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$ - private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$ - - public static final String PLUGIN_ID= "org.eclipse.compare"; //$NON-NLS-1$ - - private static final String STRUCTURE_CREATOR_EXTENSION_POINT= "structureCreators"; //$NON-NLS-1$ - private static final String STRUCTURE_MERGEVIEWER_EXTENSION_POINT= "structureMergeViewers"; //$NON-NLS-1$ - private static final String CONTENT_MERGEVIEWER_EXTENSION_POINT= "contentMergeViewers"; //$NON-NLS-1$ - private static final String CONTENT_VIEWER_EXTENSION_POINT= "contentViewers"; //$NON-NLS-1$ - - private static final String COMPARE_EDITOR= PLUGIN_ID + ".CompareEditor"; //$NON-NLS-1$ - - private static final String STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME= "StructureViewerAliases"; //$NON-NLS-1$ - - /** Maps type to icons */ - private static Map fgImages= new Hashtable(10); - /** Maps type to ImageDescriptors */ - private static Map fgImageDescriptors= new Hashtable(10); - /** Maps ImageDescriptors to Images */ - private static Map fgImages2= new Hashtable(10); - - private static Map fgStructureCreators= new Hashtable(10); - private static Map fgStructureViewerDescriptors= new Hashtable(10); - private static Map fgStructureViewerAliases= new Hashtable(10); - private static Map fgContentViewerDescriptors= new Hashtable(10); - private static Map fgContentMergeViewerDescriptors= new Hashtable(10); - - private static List fgDisposeOnShutdownImages= new ArrayList(); - - private static ResourceBundle fgResourceBundle; - - private static CompareUIPlugin fgComparePlugin; - - /** - * Creates the <code>CompareUIPlugin</code> object and registers all - * structure creators, content merge viewers, and structure merge viewers - * contributed to this plug-in's extension points. - * <p> - * Note that instances of plug-in runtime classes are automatically created - * by the platform in the course of plug-in activation. - * </p> - * - * @param descriptor the plug-in descriptor - */ - public CompareUIPlugin(IPluginDescriptor descriptor) { - super(descriptor); - - fgComparePlugin= this; - - fgResourceBundle= descriptor.getResourceBundle(); - - registerExtensions(); - - initPreferenceStore(); - } - - /** - * @see AbstractUIPlugin#initializeDefaultPreferences - */ - protected void initializeDefaultPreferences(IPreferenceStore store) { - super.initializeDefaultPreferences(store); - - ComparePreferencePage.initDefaults(store); - } - - /** - * Registers all structure creators, content merge viewers, and structure merge viewers - * that are found in the XML plugin files. - */ - private void registerExtensions() { - IPluginRegistry registry= Platform.getPluginRegistry(); - - // collect all IStructureCreators - IConfigurationElement[] elements= registry.getConfigurationElementsFor(PLUGIN_ID, STRUCTURE_CREATOR_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - final IConfigurationElement conf= elements[i]; - String extensions= conf.getAttribute(EXTENSIONS_ATTRIBUTE); - registerStructureCreator(extensions, - new IStructureCreatorDescriptor() { - public IStructureCreator createStructureCreator() { - try { - return (IStructureCreator) conf.createExecutableExtension(CLASS_ATTRIBUTE); - } catch (CoreException ex) { - } - return null; - } - } - ); - } - - // collect all viewers which define the structure mergeviewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, STRUCTURE_MERGEVIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerStructureViewerDescriptor(desc.getExtension(), desc); - } - - // collect all viewers which define the content mergeviewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, CONTENT_MERGEVIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerContentMergeViewerDescriptor(desc.getExtension(), desc); - } - - // collect all viewers which define the content viewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, CONTENT_VIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerContentViewerDescriptor(desc.getExtension(), desc); - } - } - - /** - * Returns the singleton instance of this plug-in runtime class. - * - * @return the compare plug-in instance - */ - public static CompareUIPlugin getDefault() { - return fgComparePlugin; - } - - /** - * Returns this plug-in's resource bundle. - * - * @return the plugin's resource bundle - */ - public static ResourceBundle getResourceBundle() { - return fgResourceBundle; - } - - public static IWorkbench getActiveWorkbench() { - CompareUIPlugin plugin= getDefault(); - if (plugin == null) - return null; - return plugin.getWorkbench(); - } - - public static IWorkbenchWindow getActiveWorkbenchWindow() { - IWorkbench workbench= getActiveWorkbench(); - if (workbench == null) - return null; - return workbench.getActiveWorkbenchWindow(); - } - - /** - * Returns the active workkbench page or <code>null</code> if - * no active workkbench page can be determined. - * - * @return the active workkbench page or <code>null</code> if - * no active workkbench page can be determined - */ - private static IWorkbenchPage getActivePage() { - IWorkbenchWindow window= getActiveWorkbenchWindow(); - if (window == null) - return null; - return window.getActivePage(); - } - - /** - * Returns the SWT Shell of the active workbench window or <code>null</code> if - * no workbench window is active. - * - * @return the SWT Shell of the active workbench window, or <code>null</code> if - * no workbench window is active - */ - public static Shell getShell() { - IWorkbenchWindow window= getActiveWorkbenchWindow(); - if (window == null) - return null; - return window.getShell(); - } - - /** - * Registers the given image for being disposed when this plug-in is shutdown. - * - * @param image the image to register for disposal - */ - public static void disposeOnShutdown(Image image) { - if (image != null) - fgDisposeOnShutdownImages.add(image); - } - - /* (non-Javadoc) - * Method declared on Plugin. - * Frees all resources of the compare plug-in. - */ - public void shutdown() throws CoreException { - - /* - * Converts the aliases into a single string before they are stored - * in the preference store. - * The format is: - * <key> '.' <alias> ' ' <key> '.' <alias> ... - */ - IPreferenceStore ps= getPreferenceStore(); - if (ps != null) { - StringBuffer sb= new StringBuffer(); - Iterator iter= fgStructureViewerAliases.keySet().iterator(); - while (iter.hasNext()) { - String key= (String) iter.next(); - String alias= (String) fgStructureViewerAliases.get(key); - sb.append(key); - sb.append('.'); - sb.append(alias); - sb.append(' '); - } - ps.setValue(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME, sb.toString()); - } - - super.shutdown(); - - if (fgDisposeOnShutdownImages != null) { - Iterator i= fgDisposeOnShutdownImages.iterator(); - while (i.hasNext()) { - Image img= (Image) i.next(); - if (!img.isDisposed()) - img.dispose(); - } - fgImages= null; - } - } - - /** - * Performs the comparison described by the given input and opens a - * compare editor on the result. - * - * @param input the input on which to open the compare editor - * @see CompareEditorInput - */ - public void openCompareEditor(CompareEditorInput input, IWorkbenchPage page) { - - if (compareResultOK(input)) { - if (page == null) - page= getActivePage(); - if (page != null) { - try { - page.openEditor(input, COMPARE_EDITOR); - } catch (PartInitException e) { - MessageDialog.openError(getShell(), Utilities.getString("CompareUIPlugin.openEditorError"), e.getMessage()); //$NON-NLS-1$ - } - } else { - MessageDialog.openError(getShell(), - Utilities.getString("CompareUIPlugin.openEditorError"), //$NON-NLS-1$ - Utilities.getString("CompareUIPlugin.noActiveWorkbenchPage")); //$NON-NLS-1$ - } - } - } - - /** - * Performs the comparison described by the given input and opens a - * compare dialog on the result. - * - * @param input the input on which to open the compare editor - * @see CompareEditorInput - */ - public void openCompareDialog(final CompareEditorInput input) { - - if (compareResultOK(input)) { - CompareDialog dialog= new CompareDialog(getShell(), input); - dialog.open(); - } - } - - /** - * @return <code>true</code> if compare result is OK to show, <code>false</code> otherwise - */ - private boolean compareResultOK(CompareEditorInput input) { - final Shell shell= getShell(); - try { - - // run operation in separate thread and make it canceable - new ProgressMonitorDialog(shell).run(true, true, input); - - String message= input.getMessage(); - if (message != null) { - MessageDialog.openError(shell, Utilities.getString("CompareUIPlugin.compareFailed"), message); //$NON-NLS-1$ - return false; - } - - if (input.getCompareResult() == null) { - MessageDialog.openInformation(shell, Utilities.getString("CompareUIPlugin.dialogTitle"), Utilities.getString("CompareUIPlugin.noDifferences")); //$NON-NLS-2$ //$NON-NLS-1$ - return false; - } - - return true; - - } catch (InterruptedException x) { - // cancelled by user - } catch (InvocationTargetException x) { - MessageDialog.openError(shell, Utilities.getString("CompareUIPlugin.compareFailed"), x.getTargetException().getMessage()); //$NON-NLS-1$ - } - return false; - } - - /** - * Registers an image for the given type. - */ - private static void registerImage(String type, Image image, boolean dispose) { - fgImages.put(normalizeCase(type), image); - if (image != null && dispose) { - fgDisposeOnShutdownImages.add(image); - } - } - - /** - * Registers an image descriptor for the given type. - * - * @param type the type - * @param descriptor the image descriptor - */ - public static void registerImageDescriptor(String type, ImageDescriptor descriptor) { - fgImageDescriptors.put(normalizeCase(type), descriptor); - } - - public static ImageDescriptor getImageDescriptor(String relativePath) { - - URL installURL= null; - if (fgComparePlugin != null) - installURL= fgComparePlugin.getDescriptor().getInstallURL(); - - if (installURL != null) { - try { - URL url= new URL(installURL, Utilities.getIconPath(null) + relativePath); - return ImageDescriptor.createFromURL(url); - } catch (MalformedURLException e) { - Assert.isTrue(false); - } - } - return null; - } - - /** - * Returns a shared image for the given type, or a generic image if none - * has been registered for the given type. - * <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[] types= getTypes(input); - if (!isHomogenous(types)) - return null; - String type= types[0]; - - 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[] types= getTypes(input); - String type= null; - if (isHomogenous(types)) - type= types[0]; - - if (ITypedElement.FOLDER_TYPE.equals(type)) - return null; - - if (type == null) { - int n= 0; - for (int i= 0; i < types.length; i++) - if (!ITypedElement.UNKNOWN_TYPE.equals(types[i])) { - n++; - if (type == null) - type= types[i]; // remember the first known type - } - if (n > 1) // don't use the type if there were more than one - type= 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; - } - - private static String[] getTypes(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++]= normalizeCase(type); - } - if (left != null) { - String type= left.getType(); - if (type != null) - types[cnt++]= normalizeCase(type); - } - if (right != null) { - String type= right.getType(); - if (type != null) - types[cnt++]= normalizeCase(type); - } - - String[] result= new String[cnt]; - for (int i= 0; i < cnt; i++) - result[i]= types[i]; - return result; - } - - /** - * 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 boolean isHomogenous(String[] types) { - switch (types.length) { - case 1: - return true; - case 2: - return types[0].equals(types[1]); - case 3: - return types[0].equals(types[1]) && types[1].equals(types[2]); - } - return false; - } - - /** - * 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 String normalizeCase(String s) { - if (NORMALIZE_CASE && s != null) - return s.toUpperCase(); - return s; - } - - //---- alias mgmt - - private void initPreferenceStore() { - //System.out.println("initPreferenceStore"); - IPreferenceStore ps= getPreferenceStore(); - if (ps != null) { - String aliases= ps.getString(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME); - //System.out.println(" <" + aliases + ">"); - if (aliases != null && aliases.length() > 0) { - StringTokenizer st= new StringTokenizer(aliases, " "); //$NON-NLS-1$ - while (st.hasMoreTokens()) { - String pair= st.nextToken(); - int pos= pair.indexOf('.'); - if (pos > 0) { - String key= pair.substring(0, pos); - String alias= pair.substring(pos+1); - fgStructureViewerAliases.put(key, alias); - //System.out.println("<" + key + "><" + alias + ">"); - } - } - } - } - } - - public static void addStructureViewerAlias(String type, String alias) { - //System.out.println("addStructureViewerAlias: " + type + " " + alias); - fgStructureViewerAliases.put(normalizeCase(alias), normalizeCase(type)); - } - - public static void removeAllStructureViewerAliases(String type) { - String t= normalizeCase(type); - Set entrySet= fgStructureViewerAliases.entrySet(); - for (Iterator iter= entrySet.iterator(); iter.hasNext(); ) { - Map.Entry entry= (Map.Entry)iter.next(); - if (entry.getValue().equals(t)) - iter.remove(); - } - } - - /** - * Returns an array of all editors that have an unsaved content. If the identical content is - * presented in more than one editor, only one of those editor parts is part of the result. - * - * @return an array of all dirty editor parts. - */ - public static IEditorPart[] getDirtyEditors() { - Set inputs= new HashSet(); - List result= new ArrayList(0); - IWorkbench workbench= getDefault().getWorkbench(); - IWorkbenchWindow[] windows= workbench.getWorkbenchWindows(); - for (int i= 0; i < windows.length; i++) { - IWorkbenchPage[] pages= windows[i].getPages(); - for (int x= 0; x < pages.length; x++) { - IEditorPart[] editors= pages[x].getDirtyEditors(); - for (int z= 0; z < editors.length; z++) { - IEditorPart ep= editors[z]; - IEditorInput input= ep.getEditorInput(); - if (!inputs.contains(input)) { - inputs.add(input); - result.add(ep); - } - } - } - } - return (IEditorPart[])result.toArray(new IEditorPart[result.size()]); - } - - public static void log(Throwable e) { - log(new Status(IStatus.ERROR, getPluginId(), INTERNAL_ERROR, CompareMessages.getString("ComparePlugin.internal_error"), e)); //$NON-NLS-1$ - } - - public static void log(IStatus status) { - getDefault().getLog().log(status); - } - - public static String getPluginId() { - return getDefault().getDescriptor().getUniqueIdentifier(); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java deleted file mode 100644 index f8cef54d1..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -public class CompareWithEditionAction extends EditionAction { - - public CompareWithEditionAction() { - super(false, "org.eclipse.compare.internal.CompareWithEditionAction"); //$NON-NLS-1$ - this.fHelpContextId= ICompareContextIds.COMPARE_WITH_EDITION_DIALOG; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties deleted file mode 100644 index 154531afa..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties +++ /dev/null @@ -1,38 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)CompareWithEditionAction.properties -# -# Resources for CompareWithEditionAction.java - -title= Compare with Local History - -treeTitleFormat= Local History of ''{0}'' -dateIcon= obj16/day_obj.gif -timeIcon= obj16/resource_obj.gif - -treeFormat= {0} -workspaceTreeFormat= {0} (Workspace File) -parseErrorFormat= {0} (Parse Error) - -editionLabel= Local History ({0}) -workspaceEditionLabel= Workspace File - -targetLabel= Editor Buffer -workspaceTargetLabel= Workspace File - -todayFormat= Today ({0}) -yesterdayFormat= Yesterday ({0}) -dayFormat= {0} - -closeButton.label=Close - -noLocalHistoryError= No local history available for selected resource. diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java deleted file mode 100644 index 1c17ded85..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.graphics.*; - -import org.eclipse.jface.resource.CompositeImageDescriptor; -import org.eclipse.jface.resource.ImageDescriptor; - -/** - * Combines an image with an overlay. - */ -public class DiffImage extends CompositeImageDescriptor { - - static final int HEIGHT= 16; - - private Image fBaseImage; - private ImageDescriptor fOverlayImage; - private int fWidth; - private boolean fLeft= true; - - public DiffImage(Image base, ImageDescriptor overlay, int w) { - fBaseImage= base; - fOverlayImage= overlay; - fWidth= w; - } - - public DiffImage(Image base, ImageDescriptor overlay, int w, boolean onLeft) { - fBaseImage= base; - fOverlayImage= overlay; - fWidth= w; - fLeft= onLeft; - } - - protected Point getSize() { - return new Point(fWidth, HEIGHT); - } - - protected void drawCompositeImage(int width, int height) { - if (fLeft) { - if (fBaseImage != null) { - ImageData base= fBaseImage.getImageData(); - if (base == null) - base= DEFAULT_IMAGE_DATA; - drawImage(base, fWidth - base.width, 0); - } - - if (fOverlayImage != null) { - ImageData overlay= fOverlayImage.getImageData(); - if (overlay == null) - overlay= DEFAULT_IMAGE_DATA; - drawImage(overlay, 0, (HEIGHT - overlay.height) / 2); - } - } else { - if (fBaseImage != null) { - ImageData base= fBaseImage.getImageData(); - if (base == null) - base= DEFAULT_IMAGE_DATA; - drawImage(base, 0, 0); - } - - if (fOverlayImage != null) { - ImageData overlay= fOverlayImage.getImageData(); - if (overlay == null) - overlay= DEFAULT_IMAGE_DATA; - drawImage(overlay, fWidth - overlay.width, (HEIGHT - overlay.height) / 2); - } - } - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java deleted file mode 100644 index f8c697f11..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java +++ /dev/null @@ -1,191 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.text.*; -import org.eclipse.compare.contentmergeviewer.ITokenComparator; -import org.eclipse.compare.rangedifferencer.IRangeComparator; - -/** - * Implements the <code>IRangeComparator</code> interface for lines in a document. - * A <code>DocLineComparator</code> is used as the input for the <code>RangeDifferencer</code> - * engine to perform a line oriented compare on documents. - * <p> - * A <code>DocLineComparator</code> doesn't know anything about line separators because - * its notion of lines is solely defined in the underlying <code>IDocument</code>. - */ -public class DocLineComparator implements ITokenComparator { - - private IDocument fDocument; - private int fLineOffset; - private int fLineCount; - private int fLength; - private boolean fIgnoreWhiteSpace; - - /** - * Creates a <code>DocLineComparator</code> for the given document range. - * ignoreWhiteSpace controls whether comparing lines (in method - * <code>rangesEqual<code>) should ignore whitespace. - * - * @param document the document from which the lines are taken - * @param region if non-<code>null</code> only lines within this range are taken - * @param ignoreWhiteSpace if <code>true</code> white space is ignored when comparing lines - */ - public DocLineComparator(IDocument document, IRegion region, boolean ignoreWhiteSpace) { - - fDocument= document; - fIgnoreWhiteSpace= ignoreWhiteSpace; - - fLineOffset= 0; - if (region != null) { - fLength= region.getLength(); - int start= region.getOffset(); - try { - fLineOffset= fDocument.getLineOfOffset(start); - } catch (BadLocationException ex) { - } - - if (fLength == 0) - fLineCount= 0; - else { - int endLine= fDocument.getNumberOfLines(); - try { - endLine= fDocument.getLineOfOffset(start + fLength); - } catch (BadLocationException ex) { - } - fLineCount= endLine - fLineOffset + 1; - } - - } else { - fLength= document.getLength(); - fLineCount= fDocument.getNumberOfLines(); - } - } - - /** - * Returns the number of lines in the document. - * - * @return number of lines - */ - public int getRangeCount() { - return fLineCount; - } - - /* (non Javadoc) - * see ITokenComparator.getTokenStart - */ - public int getTokenStart(int line) { - try { - IRegion r= fDocument.getLineInformation(fLineOffset + line); - return r.getOffset(); - } catch (BadLocationException ex) { - return fDocument.getLength(); - } - } - - /* (non Javadoc) - * Returns the length of the given line. - * see ITokenComparator.getTokenLength - */ - public int getTokenLength(int line) { - return getTokenStart(line+1) - getTokenStart(line); - } - - /** - * Returns <code>true</code> if a line given by the first index - * matches a line specified by the other <code>IRangeComparator</code> and index. - * - * @param thisIndex the number of the line within this range comparator - * @param other the range comparator to compare this with - * @param otherIndex the number of the line within the other comparator - * @return <code>true</code> if the lines are equal - */ - public boolean rangesEqual(int thisIndex, IRangeComparator other0, int otherIndex) { - - if (other0 != null && other0.getClass() == getClass()) { - DocLineComparator other= (DocLineComparator) other0; - - if (fIgnoreWhiteSpace) { - String s1= extract(thisIndex); - String s2= other.extract(otherIndex); - return compare(s1, s2); - } - - int tlen= getTokenLength(thisIndex); - int olen= other.getTokenLength(otherIndex); - if (tlen == olen) { - String s1= extract(thisIndex); - String s2= other.extract(otherIndex); - return s1.equals(s2); - } - } - return false; - } - - /** - * Aborts the comparison if the number of tokens is too large. - * - * @return <code>true</code> to abort a token comparison - */ - public boolean skipRangeComparison(int length, int max, IRangeComparator other) { - return false; - } - - //---- private methods - - /** - * Extract a single line from the underlying document without the line separator. - * - * @param line the number of the line to extract - * @return the contents of the line as a String - */ - private String extract(int line) { - if (line < fLineCount) { - try { - IRegion r= fDocument.getLineInformation(fLineOffset + line); - return fDocument.get(r.getOffset(), r.getLength()); - } catch(BadLocationException e) { - } - } - return ""; //$NON-NLS-1$ - } - - private boolean compare(String s1, String s2) { - int i1= 0; - int i2= 0; - int l1= s1.length(); - int l2= s2.length(); - char c1= ' '; - char c2= ' '; - while (i1 < l1 || i2 < l2) { - if (i1 < l1) { - c1= s1.charAt(i1); - if (Character.isWhitespace(c1)) { - i1++; - continue; - } - } - if (i2 < l2) { - c2= s2.charAt(i2); - if (Character.isWhitespace(c2)) { - i2++; - continue; - } - } - if (c1 != c2) - return false; - i1++; - i2++; - } - return true; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java deleted file mode 100644 index b2db19190..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; - -import org.eclipse.jface.text.IDocument; - -/** - * No API yet. - */ -public class DocumentManager { - - private static final boolean DEBUG= false; - - private static ArrayList fgKeys= new ArrayList(); - private static ArrayList fgValues= new ArrayList(); - - public static IDocument get(Object o) { - - for (int i= 0; i < fgKeys.size(); i++) { - if (fgKeys.get(i) == o) - return (IDocument) fgValues.get(i); - } - return null; - } - - public static void put(Object o, IDocument document) { - if (DEBUG) System.out.println("DocumentManager.put: " + document); //$NON-NLS-1$ - for (int i= 0; i < fgKeys.size(); i++) { - if (fgKeys.get(i) == o) { - fgValues.set(i, document); - return; - } - } - fgKeys.add(o); - fgValues.add(document); - } - - public static void remove(IDocument document) { - if (document != null) { - if (DEBUG) System.out.println("DocumentManager.remove: " + document); //$NON-NLS-1$ - for (int i= 0; i < fgValues.size(); i++) { - if (fgValues.get(i) == document) { - fgKeys.remove(i); - fgValues.remove(i); - return; - } - } - if (DEBUG) System.out.println("DocumentManager.remove: not found"); //$NON-NLS-1$ - } - } - - public static void dump() { - if (DEBUG) System.out.println("DocumentManager: managed docs:" + fgValues.size()); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java deleted file mode 100644 index d610d0c02..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java +++ /dev/null @@ -1,267 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.InputStream; -import java.io.ByteArrayInputStream; -import java.util.ArrayList; -import java.util.ResourceBundle; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.BadLocationException; - -import org.eclipse.ui.*; -import org.eclipse.ui.part.FileEditorInput; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.ui.texteditor.IDocumentProvider; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -import org.eclipse.compare.*; -import org.eclipse.compare.ITypedElement; -import org.eclipse.compare.IStreamContentAccessor; - - -public class EditionAction implements IActionDelegate { - - /** - * Implements the IStreamContentAccessor and ITypedElement protocols - * for a Document. - */ - class DocumentBufferNode implements ITypedElement, IStreamContentAccessor { - - private IDocument fDocument; - private 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; - protected String fHelpContextId; - - EditionAction(boolean replaceMode, String bundleName) { - fReplaceMode= replaceMode; - fBundleName= bundleName; - } - - public final void selectionChanged(IAction action, ISelection selection) { - fSelection= selection; - if (action != null) { - IFile[] files= getFiles(selection, fReplaceMode); - action.setEnabled(files.length == 1); // we don't support multiple selection for now - } - } - - public void run(IAction action) { - IFile[] files= getFiles(fSelection, fReplaceMode); - for (int i= 0; i < files.length; i++) - doFromHistory(files[i]); - } - - private void doFromHistory(final IFile file) { - - ResourceBundle bundle= ResourceBundle.getBundle(fBundleName); - String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$ - - Shell parentShell= CompareUIPlugin.getShell(); - - IFileState states[]= null; - try { - states= file.getHistory(null); - } catch (CoreException ex) { - MessageDialog.openError(parentShell, title, ex.getMessage()); - return; - } - - if (states == null || states.length <= 0) { - String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$ - MessageDialog.openInformation(parentShell, title, msg); - return; - } - - ITypedElement base= new ResourceNode(file); - - IDocument document= getDocument(file); - ITypedElement target= base; - if (document != null) - target= new DocumentBufferNode(document, file); - - ITypedElement[] editions= new ITypedElement[states.length+1]; - editions[0]= base; - for (int i= 0; i < states.length; i++) - editions[i+1]= new HistoryItem(base, states[i]); - - EditionSelectionDialog d= new EditionSelectionDialog(parentShell, bundle); - d.setEditionTitleArgument(file.getName()); - d.setEditionTitleImage(CompareUIPlugin.getImage(file)); - //d.setHideIdenticalEntries(false); - if (fHelpContextId != null) - d.setHelpContextId(fHelpContextId); - - if (fReplaceMode) { - - ITypedElement ti= null; - if (fPrevious) - ti= d.selectPreviousEdition(target, editions, null); - else - ti= d.selectEdition(target, editions, null); - - if (ti instanceof IStreamContentAccessor) { - IStreamContentAccessor sa= (IStreamContentAccessor)ti; - try { - - if (document != null) - updateDocument(document, sa); - else - updateWorkspace(bundle, parentShell, sa, file); - - } catch (InterruptedException x) { - // Do nothing. Operation has been canceled by user. - - } catch (InvocationTargetException x) { - String reason= x.getTargetException().getMessage(); - MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason)); //$NON-NLS-1$ - } - } - } else { - d.setCompareMode(true); - - d.selectEdition(target, editions, null); - } - } - - private void updateWorkspace(final ResourceBundle bundle, Shell shell, - final IStreamContentAccessor sa, final IFile file) - throws InvocationTargetException, InterruptedException { - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws InvocationTargetException { - try { - String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$ - pm.beginTask(taskName, IProgressMonitor.UNKNOWN); - file.setContents(sa.getContents(), false, true, pm); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - pm.done(); - } - } - }; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell); - pmdialog.run(false, true, operation); - } - - private void updateDocument(IDocument document, IStreamContentAccessor sa) throws InvocationTargetException { - try { - InputStream is= sa.getContents(); - String text= Utilities.readString(is); - document.replace(0, document.getLength(), text); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } catch (BadLocationException e) { - throw new InvocationTargetException(e); - } - } - - private IDocument getDocument(IFile file) { - IWorkbench wb= PlatformUI.getWorkbench(); - if (wb == null) - return null; - IWorkbenchWindow[] ws= wb.getWorkbenchWindows(); - if (ws == null) - return null; - - FileEditorInput test= new FileEditorInput(file); - - for (int i= 0; i < ws.length; i++) { - IWorkbenchWindow w= ws[i]; - IWorkbenchPage[] wps= w.getPages(); - if (wps != null) { - for (int j= 0; j < wps.length; j++) { - IWorkbenchPage wp= wps[j]; - IEditorPart ep= wp.findEditor(test); - if (ep instanceof ITextEditor) { - ITextEditor te= (ITextEditor) ep; - IDocumentProvider dp= te.getDocumentProvider(); - if (dp != null) { - IDocument doc= dp.getDocument(ep); - if (doc != null) - return doc; - } - } - } - } - } - return null; - } - - private IFile[] getFiles(ISelection selection, boolean modifiable) { - ArrayList result= new ArrayList(); - Object[] s= Utilities.toArray(selection); - for (int i= 0; i < s.length; i++) { - Object o= s[i]; - IFile file= null; - if (o instanceof IFile) { - file= (IFile) o; - } else if (o instanceof IAdaptable) { - IAdaptable a= (IAdaptable) o; - Object adapter= a.getAdapter(IResource.class); - if (adapter instanceof IFile) - file= (IFile) adapter; - } - if (file != null) { - if (modifiable) { - if (!file.isReadOnly()) - result.add(file); - } else { - result.add(file); - } - } - } - return (IFile[]) result.toArray(new IFile[result.size()]); - } - - -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java deleted file mode 100644 index 3ea3ba5f8..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.StringWriter; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; - -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; - -/** - * The default exception handler shows an error dialog when one of its handle methods - * is called. If the passed exception is a <code>CoreException</code> an error dialog - * pops up showing the exception's status information. For a <code>InvocationTargetException</code> - * a normal message dialog pops up showing the exception's message. Additionally the exception - * is written to the platform log. - */ -public class ExceptionHandler { - - private static ExceptionHandler fgInstance= new ExceptionHandler(); - - /** - * Logs the given exception using the platform's logging mechanism. The exception is - * logged as an error with the error code <code>JavaStatusConstants.INTERNAL_ERROR</code>. - */ - public static void log(Throwable t, String message) { - CompareUIPlugin.log(new Status(IStatus.ERROR, CompareUIPlugin.getPluginId(), - CompareUIPlugin.INTERNAL_ERROR, message, t)); - } - - /** - * Handles the given <code>CoreException</code>. The workbench shell is used as a parent - * for the dialog window. - * - * @param e the <code>CoreException</code> to be handled - * @param title the dialog window's window title - * @param message message to be displayed by the dialog window - */ - public static void handle(CoreException e, String title, String message) { - handle(e, CompareUIPlugin.getShell(), title, message); - } - - /** - * Handles the given <code>CoreException</code>. - * - * @param e the <code>CoreException</code> to be handled - * @param parent the dialog window's parent shell - * @param title the dialog window's window title - * @param message message to be displayed by the dialog window - */ - public static void handle(CoreException e, Shell parent, String title, String message) { - fgInstance.perform(e, parent, title, message); - } - - /** - * Handles the given <code>InvocationTargetException</code>. The workbench shell is used - * as a parent for the dialog window. - * - * @param e the <code>InvocationTargetException</code> to be handled - * @param title the dialog window's window title - * @param message message to be displayed by the dialog window - */ - public static void handle(InvocationTargetException e, String title, String message) { - handle(e, CompareUIPlugin.getShell(), title, message); - } - - /** - * Handles the given <code>InvocationTargetException</code>. - * - * @param e the <code>InvocationTargetException</code> to be handled - * @param parent the dialog window's parent shell - * @param title the dialog window's window title - * @param message message to be displayed by the dialog window - */ - public static void handle(InvocationTargetException e, Shell parent, String title, String message) { - fgInstance.perform(e, parent, title, message); - } - - //---- Hooks for subclasses to control exception handling ------------------------------------ - - protected void perform(CoreException e, Shell shell, String title, String message) { - CompareUIPlugin.log(e); - IStatus status= e.getStatus(); - if (status != null) { - ErrorDialog.openError(shell, title, message, status); - } else { - displayMessageDialog(e, e.getMessage(), shell, title, message); - } - } - - protected void perform(InvocationTargetException e, Shell shell, String title, String message) { - Throwable target= e.getTargetException(); - if (target instanceof CoreException) { - perform((CoreException)target, shell, title, message); - } else { - CompareUIPlugin.log(e); - if (e.getMessage() != null && e.getMessage().length() > 0) { - displayMessageDialog(e, e.getMessage(), shell, title, message); - } else { - displayMessageDialog(e, target.getMessage(), shell, title, message); - } - } - } - - //---- Helper methods ----------------------------------------------------------------------- - - private void displayMessageDialog(Throwable t, String exceptionMessage, Shell shell, String title, String message) { - StringWriter msg= new StringWriter(); - if (message != null) { - msg.write(message); - msg.write("\n\n"); //$NON-NLS-1$ - } - if (exceptionMessage == null || exceptionMessage.length() == 0) - msg.write(CompareMessages.getString("ExceptionDialog.seeErrorLogMessage")); //$NON-NLS-1$ - else - msg.write(exceptionMessage); - MessageDialog.openError(shell, title, msg.toString()); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java deleted file mode 100644 index a6df241e4..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.compare.CompareUI; - -/** - * Help context ids for the Compare UI. - * <p> - * This interface contains constants only; it is not intended to be implemented - * or extended. - * </p> - * - */ -public interface ICompareContextIds { - - public static final String PREFIX= CompareUI.PLUGIN_ID + '.'; - - // Dialogs - public static final String EDITION_DIALOG= PREFIX + "edition_dialog_context"; //$NON-NLS-1$ - - public static final String COMPARE_EDITOR= PREFIX + "compare_editor_context"; //$NON-NLS-1$ - public static final String PATCH_INPUT_WIZARD_PAGE= PREFIX + "patch_input_wizard_page_context"; //$NON-NLS-1$ - public static final String PATCH_PREVIEW_WIZARD_PAGE= PREFIX + "patch_preview_wizard_page_context"; //$NON-NLS-1$ - public static final String ADD_FROM_HISTORY_DIALOG= PREFIX + "add_from_history_dialog_context"; //$NON-NLS-1$ - public static final String COMPARE_DIALOG= PREFIX + "compare_dialog_context"; //$NON-NLS-1$ - public static final String COMPARE_WITH_EDITION_DIALOG= PREFIX + "compare_with_edition_dialog_context"; //$NON-NLS-1$ - public static final String REPLACE_WITH_EDITION_DIALOG= PREFIX + "replace_with_edition_dialog_context"; //$NON-NLS-1$ - - // Viewer - public static final String TEXT_MERGE_VIEW= PREFIX + "text_merge_view_context"; //$NON-NLS-1$ - public static final String IMAGE_COMPARE_VIEW= PREFIX + "image_compare_view_context"; //$NON-NLS-1$ - public static final String BINARY_COMPARE_VIEW= PREFIX + "binary_compare_view_context"; //$NON-NLS-1$ - public static final String DIFF_VIEW= PREFIX + "diff_view_context"; //$NON-NLS-1$ - - // Actions - public static final String GLOBAL_NEXT_DIFF_ACTION= PREFIX + "global_next_diff_action_context"; //$NON-NLS-1$ - public static final String GLOBAL_PREVIOUS_DIFF_ACTION= PREFIX + "global_previous_diff_action_context"; //$NON-NLS-1$ - public static final String NEXT_DIFF_ACTION= PREFIX + "next_diff_action_context"; //$NON-NLS-1$ - public static final String PREVIOUS_DIFF_ACTION= PREFIX + "previous_diff_action_context"; //$NON-NLS-1$ - public static final String IGNORE_WHITESPACE_ACTION= PREFIX + "ignore_whitespace_action_context"; //$NON-NLS-1$ - - // Preference page - public static final String COMPARE_PREFERENCE_PAGE= PREFIX + "compare_preference_page_context"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java deleted file mode 100644 index 3e64e2e9c..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -public interface INavigatable { - - static final String NAVIGATOR_PROPERTY= "org.eclipse.compare.internal.Navigator"; //$NON-NLS-1$ - - /** - * Returns true if at end or beginning. - */ - boolean gotoDifference(boolean next); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java deleted file mode 100644 index 013885909..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -/* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ -public interface IOpenable { - - static final String OPENABLE_PROPERTY= "org.eclipse.compare.internal.Openable"; //$NON-NLS-1$ - - /** - * Opens the selected element - */ - void openSelected(); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java deleted file mode 100644 index a15db7c68..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -public interface ISavable { - - void save(IProgressMonitor pm) throws CoreException; -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java deleted file mode 100644 index f5a845e80..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.compare.structuremergeviewer.IStructureCreator; - -/** - * A factory object for creating <code>IStructureCreator</code>s from a descriptor. - * <p> - * It is used when registering <code>IStructureCreator</code> for types - * in <code>CompareUIPlugin.registerStructureCreator</code>. - * </p> - * - * @see IStructureCreator - * @see CompareUIPlugin - */ -public interface IStructureCreatorDescriptor { - - /** - * Creates a new structure creator. - * - * @return a newly created structure creator - */ - IStructureCreator createStructureCreator(); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java deleted file mode 100644 index 2dda66e0d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.compare.CompareConfiguration; - -/** - * A factory object for creating a <code>Viewer</code>s from a descriptor. - * <p> - * It is used when registering a viewer for a specific type - * in <code>CompareUIPlugin.registerContentViewerDescriptor</code> and - * in <code>CompareUIPlugin.registerStructureViewerDescriptor</code>. - * - * @see org.eclipse.compare.structuremergeviewer.IStructureCreator - * @see CompareUIPlugin - */ -public interface IViewerDescriptor { - - /** - * Creates a new viewer from this descriptor under the given STW parent control. - * If the current viewer has the same type as a new viewer - * the implementation of this method is free to return the current viewer instead. - * - * @param currentViewer the current viewer which is going to be replaced with a new viewer. - * @param parent the SWT parent control under which the new viewer has to be created. - * @param config a compare configuration the new viewer might be interested in. - * @return a new viewer or the current viewer. - */ - Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration config); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java deleted file mode 100644 index b6b0fa14d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.compare.*; - -/** - * Toggles the <code>ICompareConfiguration.IGNORE_WS</code> property of an - * <code>ICompareConfiguration</code>. - */ -public class IgnoreWhiteSpaceAction extends ChangePropertyAction { - - public IgnoreWhiteSpaceAction(ResourceBundle bundle, CompareConfiguration cc) { - super(bundle, cc, "action.IgnoreWhiteSpace.", CompareConfiguration.IGNORE_WHITESPACE); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java deleted file mode 100644 index f598f89b8..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.*; -import org.eclipse.swt.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 - */ - 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 - */ - void updateScrollbars() { - Rectangle bounds= fImage != null ? fImage.getBounds() : new Rectangle(0, 0, 0, 0); - Point size= getSize(); - Rectangle clientArea= getClientArea(); - - ScrollBar horizontal= getHorizontalBar(); - if (bounds.width <= clientArea.width) { - horizontal.setVisible(false); - horizontal.setSelection(0); - } else { - horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement()); - int max= bounds.width + (size.x - clientArea.width); - horizontal.setMaximum(max); - horizontal.setThumb(size.x > max ? max : size.x); - horizontal.setVisible(true); - } - - ScrollBar vertical= getVerticalBar(); - if (bounds.height <= clientArea.height) { - vertical.setVisible(false); - vertical.setSelection(0); - } else { - vertical.setPageIncrement(clientArea.height - vertical.getIncrement()); - int max= bounds.height + (size.y - clientArea.height); - vertical.setMaximum(max); - vertical.setThumb(size.y > max ? max : size.y); - vertical.setVisible(true); - } - } - -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java deleted file mode 100644 index 6007e7a21..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.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.ui.help.WorkbenchHelp; - -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); - - WorkbenchHelp.setHelp(parent, ICompareContextIds.IMAGE_COMPARE_VIEW); - - buildControl(parent); - String title= Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$ - getControl().setData(CompareUI.COMPARE_VIEWER_TITLE, title); - } - - protected void updateContent(Object ancestor, Object left, Object right) { - - fAncestorImage= ancestor; - setInput(fAncestor, ancestor); - - fLeftImage= left; - setInput(fLeft, left); - - fRightImage= right; - setInput(fRight, right); - } - - /** - * We can't modify the contents of either side we just return null. - */ - protected byte[] getContents(boolean left) { - return null; - } - - public void createControls(Composite composite) { - fAncestor= new ImageCanvas(composite, SWT.NO_FOCUS); - fLeft= new ImageCanvas(composite, SWT.NO_FOCUS); - fRight= new ImageCanvas(composite, SWT.NO_FOCUS); - } - - private static void setInput(ImageCanvas canvas, Object input) { - if (canvas != null) { - - InputStream stream= null; - if (input instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) input; - if (sca != null) { - try { - stream= sca.getContents(); - } catch (CoreException ex) { - } - } - } - - Image image= null; - Display display= canvas.getDisplay(); - if (stream != null) { - try { - image= new Image(display, stream); - } catch (SWTException ex) { - } - } - - canvas.setImage(image); - if (image != null) { - canvas.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND)); - } else { - canvas.setBackground(null); - } - - if (stream != null) { - try { - stream.close(); - } catch (IOException ex) { - } - } - } - } - - protected void handleResizeAncestor(int x, int y, int width, int height) { - if (width > 0) { - fAncestor.setVisible(true); - fAncestor.setBounds(x, y, width, height); - } else { - fAncestor.setVisible(false); - } - } - - protected void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2, int height) { - fLeft.setBounds(x, y, width1, height); - fRight.setBounds(x+width1+centerWidth, y, width2, height); - } - - protected void copy(boolean leftToRight) { - if (leftToRight) { - fRightImage= fLeftImage; - setInput(fRight, fRightImage); - setRightDirty(true); - } else { - fLeftImage= fRightImage; - setInput(fLeft, fLeftImage); - setLeftDirty(true); - } - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java deleted file mode 100644 index ae0ab7813..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.compare.*; -import org.eclipse.jface.viewers.Viewer; - -/** - * A factory object for the <code>ImageMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class ImageMergeViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new ImageMergeViewer(parent, SWT.NULL, mp); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties deleted file mode 100644 index cb23466b0..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties +++ /dev/null @@ -1,32 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)ImageMergeViewerResources.properties -# -# Resource strings for ImageMergeViewer.java - -title= Image Compare - -##################################################### -# Actions -##################################################### - -action.CopyLeftToRight.label= Copy Left to Right -action.CopyLeftToRight.tooltip= Copy Image from Left to Right -action.CopyLeftToRight.image= elcl16/copy_r_co.gif - -action.CopyRightToLeft.label= Copy Right to Left -action.CopyRightToLeft.tooltip= Copy Image from Right to Left -action.CopyRightToLeft.image= elcl16/copy_l_co.gif - -action.EnableAncestor.label= Enable Ancestor Pane -action.EnableAncestor.tooltip= Control Visibility of Ancestor Pane -action.EnableAncestor.image= elcl16/ancestorpane_co.gif diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java deleted file mode 100644 index b39150c19..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.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); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java deleted file mode 100644 index 5df991bc3..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.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); - applyDialogFont(parent); - return parent; - } - - protected int getTableStyle() { - return SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java deleted file mode 100644 index 939bf58d3..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java +++ /dev/null @@ -1,392 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.graphics.Font; - -import org.eclipse.jface.action.*; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.text.*; -import org.eclipse.jface.text.source.*; - -import org.eclipse.jface.viewers.SelectionChangedEvent; -/** - * Extends the JFace SourceViewer with some convenience methods. - */ -public class MergeSourceViewer extends SourceViewer - implements ISelectionChangedListener, ITextListener, IMenuListener { - - public static final String UNDO_ID= "undo"; //$NON-NLS-1$ - public static final String REDO_ID= "redo"; //$NON-NLS-1$ - public static final String CUT_ID= "cut"; //$NON-NLS-1$ - public static final String COPY_ID= "copy"; //$NON-NLS-1$ - public static final String PASTE_ID= "paste"; //$NON-NLS-1$ - public static final String DELETE_ID= "delete"; //$NON-NLS-1$ - public static final String SELECT_ALL_ID= "selectAll"; //$NON-NLS-1$ - public static final String SAVE_ID= "save"; //$NON-NLS-1$ - - class TextOperationAction extends MergeViewerAction { - - private int fOperationCode; - - TextOperationAction(int operationCode, boolean mutable, boolean selection, boolean content) { - super(mutable, selection, content); - fOperationCode= operationCode; - update(); - } - - public void run() { - if (isEnabled()) - doOperation(fOperationCode); - } - - public boolean isEnabled() { - return fOperationCode != -1 && canDoOperation(fOperationCode); - } - - public void update() { - this.setEnabled(isEnabled()); - } - } - - private ResourceBundle fResourceBundle; - private Position fRegion; - private boolean fEnabled= true; - private HashMap fActions= new HashMap(); - - private boolean fAddSaveAction= true; - - - public MergeSourceViewer(Composite parent, ResourceBundle bundle) { - super(parent, null, SWT.H_SCROLL + SWT.V_SCROLL); - - fResourceBundle= bundle; - - MenuManager menu= new MenuManager(); - menu.setRemoveAllWhenShown(true); - menu.addMenuListener(this); - StyledText te= getTextWidget(); - te.setMenu(menu.createContextMenu(te)); - } - - public void hideSaveAction() { - fAddSaveAction= false; - } - - public void setFont(Font font) { - StyledText te= getTextWidget(); - if (te != null) - te.setFont(font); - } - - public void setBackgroundColor(Color color) { - StyledText te= getTextWidget(); - if (te != null) - te.setBackground(color); - } - - public void setEnabled(boolean enabled) { - if (enabled != fEnabled) { - fEnabled= enabled; - StyledText c= getTextWidget(); - if (c != null) { - c.setEnabled(enabled); - Display d= c.getDisplay(); - c.setBackground(enabled ? d.getSystemColor(SWT.COLOR_LIST_BACKGROUND) : null); - } - } - } - - public boolean getEnabled() { - return fEnabled; - } - - public void setRegion(Position region) { - fRegion= region; - } - - public Position getRegion() { - return fRegion; - } - - public boolean isControlOkToUse() { - StyledText t= getTextWidget(); - return t != null && !t.isDisposed(); - } - - public void setSelection(Position position) { - if (position != null) - setSelectedRange(position.getOffset(), position.getLength()); - } - - public void setLineBackground(Position position, Color c) { - StyledText t= getTextWidget(); - if (t != null && !t.isDisposed()) { - Point region= new Point(0, 0); - getLineRange(position, region); - - region.x-= getDocumentRegionOffset(); - - try { - t.setLineBackground(region.x, region.y, c); - } catch (IllegalArgumentException ex) { - } - } - } - - public void resetLineBackground() { - StyledText t= getTextWidget(); - if (t != null && !t.isDisposed()) { - int lines= getLineCount(); - t.setLineBackground(0, lines, null); - } - } - - /** - * Returns number of lines in document region. - */ - public int getLineCount() { - IRegion region= getVisibleRegion(); - - int length= region.getLength(); - if (length == 0) - return 0; - - IDocument doc= getDocument(); - int startLine= 0; - int endLine= 0; - - int start= region.getOffset(); - try { - startLine= doc.getLineOfOffset(start); - } catch(BadLocationException ex) { - } - try { - endLine= doc.getLineOfOffset(start+length); - } catch(BadLocationException ex) { - } - - return endLine-startLine+1; - } - - public int getViewportLines() { - StyledText te= getTextWidget(); - Rectangle clArea= te.getClientArea(); - if (!clArea.isEmpty()) - return clArea.height / te.getLineHeight(); - return 0; - } - - public int getViewportHeight() { - StyledText te= getTextWidget(); - Rectangle clArea= te.getClientArea(); - if (!clArea.isEmpty()) - return clArea.height; - return 0; - } - - /** - * Returns lines - */ - public int getDocumentRegionOffset() { - int start= getVisibleRegion().getOffset(); - IDocument doc= getDocument(); - if (doc != null) { - try { - return doc.getLineOfOffset(start); - } catch(BadLocationException ex) { - } - } - return 0; - } - - public int getVerticalScrollOffset() { - StyledText st= getTextWidget(); - int lineHeight= st.getLineHeight(); - return getTopInset() - ((getDocumentRegionOffset()*lineHeight) + st.getTopPixel()); - } - - /** - * Returns the start line and the number of lines which correspond to the given position. - * Starting line number is 0 based. - */ - public Point getLineRange(Position p, Point region) { - - IDocument doc= getDocument(); - - if (p == null || doc == null) { - region.x= 0; - region.y= 0; - return region; - } - - int start= p.getOffset(); - int length= p.getLength(); - - int startLine= 0; - try { - startLine= doc.getLineOfOffset(start); - } catch (BadLocationException e) { - } - - int lineCount= 0; - - if (length == 0) { -// // if range length is 0 and if range starts a new line -// try { -// if (start == doc.getLineStartOffset(startLine)) { -// lines--; -// } -// } catch (BadLocationException e) { -// lines--; -// } - - } else { - int endLine= 0; - try { - endLine= doc.getLineOfOffset(start + length - 1); // why -1? - } catch (BadLocationException e) { - } - lineCount= endLine-startLine+1; - } - - region.x= startLine; - region.y= lineCount; - return region; - } - - /** - * Scroll TextPart to the given line. - */ - public void vscroll(int line) { - - int srcViewSize= getLineCount(); - int srcExtentSize= getViewportLines(); - - if (srcViewSize > srcExtentSize) { - - if (line < 0) - line= 0; - - int cp= getTopIndex(); - if (cp != line) - setTopIndex(line + getDocumentRegionOffset()); - } - } - - public void addAction(String actionId, MergeViewerAction action) { - fActions.put(actionId, action); - } - - public MergeViewerAction getAction(String actionId) { - MergeViewerAction action= (MergeViewerAction) fActions.get(actionId); - if (action == null) { - action= createAction(actionId); - if (action == null) - return null; - - if (action.isContentDependent()) - addTextListener(this); - if (action.isSelectionDependent()) - addSelectionChangedListener(this); - - Utilities.initAction(action, fResourceBundle, "action." + actionId + "."); //$NON-NLS-1$ //$NON-NLS-2$ - fActions.put(actionId, action); - } - if (action.isEditableDependent() && !isEditable()) - return null; - return action; - } - - protected MergeViewerAction createAction(String actionId) { - if (UNDO_ID.equals(actionId)) - return new TextOperationAction(UNDO, true, false, true); - if (REDO_ID.equals(actionId)) - return new TextOperationAction(REDO, true, false, true); - if (CUT_ID.equals(actionId)) - return new TextOperationAction(CUT, true, true, false); - if (COPY_ID.equals(actionId)) - return new TextOperationAction(COPY, false, true, false); - if (PASTE_ID.equals(actionId)) - return new TextOperationAction(PASTE, true, false, false); - if (DELETE_ID.equals(actionId)) - return new TextOperationAction(DELETE, true, false, false); - if (SELECT_ALL_ID.equals(actionId)) - return new TextOperationAction(SELECT_ALL, false, false, false); - return null; - } - - public void selectionChanged(SelectionChangedEvent event) { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - MergeViewerAction action= (MergeViewerAction) e.next(); - if (action.isSelectionDependent()) - action.update(); - } - } - - public void textChanged(TextEvent event) { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - MergeViewerAction action= (MergeViewerAction) e.next(); - if (action.isContentDependent()) - action.update(); - } - } - - /** - * Allows the viewer to add menus and/or tools to the context menu. - */ - public void menuAboutToShow(IMenuManager menu) { - - menu.add(new Separator("undo")); //$NON-NLS-1$ - addMenu(menu, UNDO_ID); - addMenu(menu, REDO_ID); - - menu.add(new Separator("ccp")); //$NON-NLS-1$ - addMenu(menu, CUT_ID); - addMenu(menu, COPY_ID); - addMenu(menu, PASTE_ID); - addMenu(menu, DELETE_ID); - addMenu(menu, SELECT_ALL_ID); - - menu.add(new Separator("edit")); //$NON-NLS-1$ - menu.add(new Separator("find")); //$NON-NLS-1$ - //addMenu(menu, FIND_ID); - - menu.add(new Separator("save")); //$NON-NLS-1$ - if (fAddSaveAction) - addMenu(menu, SAVE_ID); - - menu.add(new Separator("rest")); //$NON-NLS-1$ - } - - private void addMenu(IMenuManager menu, String actionId) { - IAction action= getAction(actionId); - if (action != null) - menu.add(action); - } - - protected void handleDispose() { - - removeTextListener(this); - removeSelectionChangedListener(this); - - super.handleDispose(); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java deleted file mode 100644 index 590ab8696..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.ui.texteditor.IUpdate; -import org.eclipse.jface.action.Action; - - -public abstract class MergeViewerAction extends Action implements IUpdate { - - private boolean fMutable; - private boolean fSelection; - private boolean fContent; - - public MergeViewerAction(boolean mutable, boolean selection, boolean content) { - fMutable= mutable; - fSelection= selection; - fContent= content; - } - - public boolean isSelectionDependent() { - return fSelection; - } - - public boolean isContentDependent() { - return fContent; - } - - public boolean isEditableDependent() { - return fMutable; - } - - public void update() { - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java deleted file mode 100644 index 8002bb55f..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java +++ /dev/null @@ -1,162 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.compare.contentmergeviewer.IMergeViewerContentProvider; - -/** - * Adapts any <code>ContentMergeViewer</code> to work on an <code>ICompareInput</code> - * e.g. a <code>DiffNode</code>. - */ -public class MergeViewerContentProvider implements IMergeViewerContentProvider { - - private CompareConfiguration fCompareConfiguration; - - public MergeViewerContentProvider(CompareConfiguration cc) { - fCompareConfiguration= cc; - } - - public void dispose() { - } - - public void inputChanged(Viewer v, Object o1, Object o2) { - // we are not interested since we have no state - } - - //---- ancestor - - public String getAncestorLabel(Object element) { - return fCompareConfiguration.getAncestorLabel(element); - } - - public Image getAncestorImage(Object element) { - return fCompareConfiguration.getAncestorImage(element); - } - - public Object getAncestorContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getAncestor(); - return null; - } - - public boolean showAncestor(Object element) { - if (element instanceof ICompareInput) - return (((ICompareInput)element).getKind() & Differencer.DIRECTION_MASK) == Differencer.CONFLICTING; - return false; - } - - //---- left - - public String getLeftLabel(Object element) { - return fCompareConfiguration.getLeftLabel(element); - } - - public Image getLeftImage(Object element) { - return fCompareConfiguration.getLeftImage(element); - } - - public Object getLeftContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getLeft(); - return null; - } - - public boolean isLeftEditable(Object element) { - if (element instanceof ICompareInput) { - Object left= ((ICompareInput) element).getLeft(); - if (left == null) { - IDiffElement parent= ((IDiffElement)element).getParent(); - if (parent instanceof ICompareInput) - left= ((ICompareInput) parent).getLeft(); - } - if (left instanceof IEditableContent) - return ((IEditableContent)left).isEditable(); - } - return false; - } - - public void saveLeftContent(Object element, byte[] bytes) { - if (element instanceof ICompareInput) { - ICompareInput node= (ICompareInput) element; - if (bytes != null) { - ITypedElement left= node.getLeft(); - // #9869: problem if left is null (because no resource exists yet) nothing is done! - if (left == null) { - node.copy(false); - left= node.getLeft(); - } - if (left instanceof IEditableContent) - ((IEditableContent)left).setContent(bytes); - if (node instanceof ResourceCompareInput.MyDiffNode) - ((ResourceCompareInput.MyDiffNode)node).fireChange(); - } else { - node.copy(false); - } - } - } - - //---- right - - public String getRightLabel(Object element) { - return fCompareConfiguration.getRightLabel(element); - } - - public Image getRightImage(Object element) { - return fCompareConfiguration.getRightImage(element); - } - - public Object getRightContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getRight(); - return null; - } - - public boolean isRightEditable(Object element) { - if (element instanceof ICompareInput) { - Object right= ((ICompareInput) element).getRight(); - if (right == null) { - IDiffContainer parent= ((IDiffElement)element).getParent(); - if (parent instanceof ICompareInput) - right= ((ICompareInput) parent).getRight(); - } - if (right instanceof IEditableContent) - return ((IEditableContent)right).isEditable(); - } - return false; - } - - public void saveRightContent(Object element, byte[] bytes) { - if (element instanceof ICompareInput) { - ICompareInput node= (ICompareInput) element; - if (bytes != null) { - ITypedElement right= node.getRight(); - // #9869: problem if right is null (because no resource exists yet) nothing is done! - if (right == null) { - node.copy(true); - right= node.getRight(); - } - if (right instanceof IEditableContent) - ((IEditableContent)right).setContent(bytes); - if (node instanceof ResourceCompareInput.MyDiffNode) - ((ResourceCompareInput.MyDiffNode)node).fireChange(); - } else { - node.copy(true); - } - } - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java deleted file mode 100644 index e35b93acc..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.*; - -import org.eclipse.compare.CompareViewerSwitchingPane; - -/** - * Used whenever the input is null or no viewer can be found. - */ -public class NullViewer extends AbstractViewer { - - private Control fDummy; - - public NullViewer(Composite parent) { - - fDummy= new Tree(parent, SWT.NULL); - - CompareViewerSwitchingPane.clearToolBar(parent); - } - - public Control getControl() { - return fDummy; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java deleted file mode 100644 index 748435654..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java +++ /dev/null @@ -1,451 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceStore; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; - -/** - * An overlaying preference store. - */ -public class OverlayPreferenceStore implements IPreferenceStore { - - - public static final class TypeDescriptor { - private TypeDescriptor() { - } - }; - - public static final TypeDescriptor BOOLEAN= new TypeDescriptor(); - public static final TypeDescriptor DOUBLE= new TypeDescriptor(); - public static final TypeDescriptor FLOAT= new TypeDescriptor(); - public static final TypeDescriptor INT= new TypeDescriptor(); - public static final TypeDescriptor LONG= new TypeDescriptor(); - public static final TypeDescriptor STRING= new TypeDescriptor(); - - public static class OverlayKey { - - TypeDescriptor fDescriptor; - String fKey; - - public OverlayKey(TypeDescriptor descriptor, String key) { - fDescriptor= descriptor; - fKey= key; - } - }; - - private class PropertyListener implements IPropertyChangeListener { - - /* - * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - OverlayKey key= findOverlayKey(event.getProperty()); - if (key != null) - propagateProperty(fParent, key, fStore); - } - }; - - - private IPreferenceStore fParent; - private IPreferenceStore fStore; - private OverlayKey[] fOverlayKeys; - - private PropertyListener fPropertyListener; - - - public OverlayPreferenceStore(IPreferenceStore parent, OverlayKey[] overlayKeys) { - fParent= parent; - fOverlayKeys= overlayKeys; - fStore= new PreferenceStore(); - } - - private OverlayKey findOverlayKey(String key) { - for (int i= 0; i < fOverlayKeys.length; i++) { - if (fOverlayKeys[i].fKey.equals(key)) - return fOverlayKeys[i]; - } - return null; - } - - private boolean covers(String key) { - return (findOverlayKey(key) != null); - } - - private void propagateProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target) { - - if (orgin.isDefault(key.fKey)) { - if (!target.isDefault(key.fKey)) - target.setToDefault(key.fKey); - return; - } - - TypeDescriptor d= key.fDescriptor; - if (BOOLEAN == d) { - - boolean originValue= orgin.getBoolean(key.fKey); - boolean targetValue= target.getBoolean(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (DOUBLE == d) { - - double originValue= orgin.getDouble(key.fKey); - double targetValue= target.getDouble(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (FLOAT == d) { - - float originValue= orgin.getFloat(key.fKey); - float targetValue= target.getFloat(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (INT == d) { - - int originValue= orgin.getInt(key.fKey); - int targetValue= target.getInt(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (LONG == d) { - - long originValue= orgin.getLong(key.fKey); - long targetValue= target.getLong(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (STRING == d) { - - String originValue= orgin.getString(key.fKey); - String targetValue= target.getString(key.fKey); - if (targetValue != null && originValue != null && !targetValue.equals(originValue)) - target.setValue(key.fKey, originValue); - - } - } - - public void propagate() { - for (int i= 0; i < fOverlayKeys.length; i++) - propagateProperty(fStore, fOverlayKeys[i], fParent); - } - - private void loadProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target, boolean forceInitialization) { - TypeDescriptor d= key.fDescriptor; - if (BOOLEAN == d) { - - if (forceInitialization) - target.setValue(key.fKey, true); - target.setValue(key.fKey, orgin.getBoolean(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultBoolean(key.fKey)); - - } else if (DOUBLE == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1.0D); - target.setValue(key.fKey, orgin.getDouble(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultDouble(key.fKey)); - - } else if (FLOAT == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1.0F); - target.setValue(key.fKey, orgin.getFloat(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultFloat(key.fKey)); - - } else if (INT == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1); - target.setValue(key.fKey, orgin.getInt(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultInt(key.fKey)); - - } else if (LONG == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1L); - target.setValue(key.fKey, orgin.getLong(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultLong(key.fKey)); - - } else if (STRING == d) { - - if (forceInitialization) - target.setValue(key.fKey, "1"); //$NON-NLS-1$ - target.setValue(key.fKey, orgin.getString(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultString(key.fKey)); - - } - } - - public void load() { - for (int i= 0; i < fOverlayKeys.length; i++) - loadProperty(fParent, fOverlayKeys[i], fStore, true); - } - - public void loadDefaults() { - for (int i= 0; i < fOverlayKeys.length; i++) - setToDefault(fOverlayKeys[i].fKey); - } - - public void start() { - if (fPropertyListener == null) { - fPropertyListener= new PropertyListener(); - fParent.addPropertyChangeListener(fPropertyListener); - } - } - - public void stop() { - if (fPropertyListener != null) { - fParent.removePropertyChangeListener(fPropertyListener); - fPropertyListener= null; - } - } - - /* - * @see IPreferenceStore#addPropertyChangeListener(IPropertyChangeListener) - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - fStore.addPropertyChangeListener(listener); - } - - /* - * @see IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener) - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - fStore.removePropertyChangeListener(listener); - } - - /* - * @see IPreferenceStore#firePropertyChangeEvent(String, Object, Object) - */ - public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) { - fStore.firePropertyChangeEvent(name, oldValue, newValue); - } - - /* - * @see IPreferenceStore#contains(String) - */ - public boolean contains(String name) { - return fStore.contains(name); - } - - /* - * @see IPreferenceStore#getBoolean(String) - */ - public boolean getBoolean(String name) { - return fStore.getBoolean(name); - } - - /* - * @see IPreferenceStore#getDefaultBoolean(String) - */ - public boolean getDefaultBoolean(String name) { - return fStore.getDefaultBoolean(name); - } - - /* - * @see IPreferenceStore#getDefaultDouble(String) - */ - public double getDefaultDouble(String name) { - return fStore.getDefaultDouble(name); - } - - /* - * @see IPreferenceStore#getDefaultFloat(String) - */ - public float getDefaultFloat(String name) { - return fStore.getDefaultFloat(name); - } - - /* - * @see IPreferenceStore#getDefaultInt(String) - */ - public int getDefaultInt(String name) { - return fStore.getDefaultInt(name); - } - - /* - * @see IPreferenceStore#getDefaultLong(String) - */ - public long getDefaultLong(String name) { - return fStore.getDefaultLong(name); - } - - /* - * @see IPreferenceStore#getDefaultString(String) - */ - public String getDefaultString(String name) { - return fStore.getDefaultString(name); - } - - /* - * @see IPreferenceStore#getDouble(String) - */ - public double getDouble(String name) { - return fStore.getDouble(name); - } - - /* - * @see IPreferenceStore#getFloat(String) - */ - public float getFloat(String name) { - return fStore.getFloat(name); - } - - /* - * @see IPreferenceStore#getInt(String) - */ - public int getInt(String name) { - return fStore.getInt(name); - } - - /* - * @see IPreferenceStore#getLong(String) - */ - public long getLong(String name) { - return fStore.getLong(name); - } - - /* - * @see IPreferenceStore#getString(String) - */ - public String getString(String name) { - return fStore.getString(name); - } - - /* - * @see IPreferenceStore#isDefault(String) - */ - public boolean isDefault(String name) { - return fStore.isDefault(name); - } - - /* - * @see IPreferenceStore#needsSaving() - */ - public boolean needsSaving() { - return fStore.needsSaving(); - } - - /* - * @see IPreferenceStore#putValue(String, String) - */ - public void putValue(String name, String value) { - if (covers(name)) - fStore.putValue(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, double) - */ - public void setDefault(String name, double value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, float) - */ - public void setDefault(String name, float value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, int) - */ - public void setDefault(String name, int value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, long) - */ - public void setDefault(String name, long value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, String) - */ - public void setDefault(String name, String value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, boolean) - */ - public void setDefault(String name, boolean value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setToDefault(String) - */ - public void setToDefault(String name) { - fStore.setToDefault(name); - } - - /* - * @see IPreferenceStore#setValue(String, double) - */ - public void setValue(String name, double value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, float) - */ - public void setValue(String name, float value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, int) - */ - public void setValue(String name, int value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, long) - */ - public void setValue(String name, long value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, String) - */ - public void setValue(String name, String value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, boolean) - */ - public void setValue(String name, boolean value) { - if (covers(name)) - fStore.setValue(name, value); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java deleted file mode 100644 index fdcc7bf68..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ReplaceWithEditionAction extends EditionAction { - - public ReplaceWithEditionAction() { - super(true, "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$ - fHelpContextId= ICompareContextIds.REPLACE_WITH_EDITION_DIALOG; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties deleted file mode 100644 index db582dff6..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties +++ /dev/null @@ -1,40 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)ReplaceWithEditionAction.properties -# -# Resources for ReplaceWithEditionAction.java - -title= Replace from Local History - -treeTitleFormat= Local History of ''{0}'' -dateIcon= obj16/day_obj.gif -timeIcon= obj16/resource_obj.gif - -treeFormat= {0} -workspaceTreeFormat= {0} (Workspace File) -parseErrorFormat= {0} (Parse Error) - -editionLabel= Local History ({0}) -workspaceEditionLabel= Workspace File - -targetLabel= {0} - -todayFormat= Today ({0}) -yesterdayFormat= Yesterday ({0}) -dayFormat= {0} - -buttonLabel= Replace - -noLocalHistoryError= No local history available for selected resource. -replaceError=Can''t replace resource (reason: {0}). - -taskName=Replacing
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java deleted file mode 100644 index 3fa6b07aa..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ReplaceWithPreviousEditionAction extends EditionAction { - - public ReplaceWithPreviousEditionAction() { - super(true, - "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$ - fPrevious= true; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java deleted file mode 100644 index 423ba9711..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.DialogSettings; - - -/** - * Base class for resizable Dialogs with persistent window bounds. - */ -public abstract class ResizableDialog extends Dialog { - - // dialog store id constants - private final static String DIALOG_BOUNDS_KEY= "ResizableDialogBounds"; //$NON-NLS-1$ - private static final String X= "x"; //$NON-NLS-1$ - private static final String Y= "y"; //$NON-NLS-1$ - private static final String WIDTH= "width"; //$NON-NLS-1$ - private static final String HEIGHT= "height"; //$NON-NLS-1$ - - protected ResourceBundle fBundle; - private Rectangle fNewBounds; - private IDialogSettings fSettings; - private String fContextId; - - - public ResizableDialog(Shell parent, ResourceBundle bundle) { - super(parent); - setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX); - - fBundle= bundle; - - fSettings= CompareUIPlugin.getDefault().getDialogSettings(); - } - - public void setHelpContextId(String contextId) { - fContextId= contextId; - } - - /* - * @see org.eclipse.jface.window.Window#configureShell(Shell) - */ - protected void configureShell(Shell newShell) { - super.configureShell(newShell); - if (fContextId != null) - WorkbenchHelp.setHelp(newShell, fContextId); - } - - protected Point getInitialSize() { - - int width= 0; - int height= 0; - - final Shell s= getShell(); - if (s != null) { - s.addControlListener( - new ControlListener() { - public void controlMoved(ControlEvent arg0) { - fNewBounds= s.getBounds(); - } - public void controlResized(ControlEvent arg0) { - fNewBounds= s.getBounds(); - } - } - ); - } - - IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY); //$NON-NLS-1$ - if (bounds == null) { - if (fBundle != null) { - width= Utilities.getInteger(fBundle, WIDTH, 0); - height= Utilities.getInteger(fBundle, HEIGHT, 0); - Shell shell= getParentShell(); - if (shell != null) { - Point parentSize= shell.getSize(); - if (width <= 0) - width= parentSize.x-300; - if (height <= 0) - height= parentSize.y-200; - } - } else { - Shell shell= getParentShell(); - if (shell != null) { - Point parentSize= shell.getSize(); - width= parentSize.x-100; - height= parentSize.y-100; - } - } - if (width < 700) - width= 700; - if (height < 500) - height= 500; - } else { - try { - width= bounds.getInt(WIDTH); - } catch (NumberFormatException e) { - width= 700; - } - try { - height= bounds.getInt(HEIGHT); - } catch (NumberFormatException e) { - height= 500; - } - } - - return new Point(width, height); - } - - protected Point getInitialLocation(Point initialSize) { - Point loc= super.getInitialLocation(initialSize); - - IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY); - if (bounds != null) { - try { - loc.x= bounds.getInt(X); - } catch (NumberFormatException e) { - } - try { - loc.y= bounds.getInt(Y); - } catch (NumberFormatException e) { - } - } - return loc; - } - - public boolean close() { - boolean closed= super.close(); - if (closed && fNewBounds != null) - saveBounds(fNewBounds); - return closed; - } - - private void saveBounds(Rectangle bounds) { - IDialogSettings dialogBounds= fSettings.getSection(DIALOG_BOUNDS_KEY); - if (dialogBounds == null) { - dialogBounds= new DialogSettings(DIALOG_BOUNDS_KEY); - fSettings.addSection(dialogBounds); - } - dialogBounds.put(X, bounds.x); - dialogBounds.put(Y, bounds.y); - dialogBounds.put(WIDTH, bounds.width); - dialogBounds.put(HEIGHT, bounds.height); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java deleted file mode 100644 index e2dd325ca..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java +++ /dev/null @@ -1,341 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.text.MessageFormat; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * A two-way or three-way compare for arbitrary IResources. - */ -class ResourceCompareInput extends CompareEditorInput { - - private static final boolean NORMALIZE_CASE= true; - - private boolean fThreeWay= false; - private Object fRoot; - private IStructureComparator fAncestor; - private IStructureComparator fLeft; - private IStructureComparator fRight; - private IResource fAncestorResource; - private IResource fLeftResource; - private IResource fRightResource; - private DiffTreeViewer fDiffViewer; - private IAction fOpenAction; - - class MyDiffNode extends DiffNode { - - private boolean fDirty= false; - private ITypedElement fLastId; - private String fLastName; - - - public MyDiffNode(IDiffContainer parent, int description, ITypedElement ancestor, ITypedElement left, ITypedElement right) { - super(parent, description, ancestor, left, right); - } - public void fireChange() { - super.fireChange(); - setDirty(true); - fDirty= true; - if (fDiffViewer != null) - fDiffViewer.refresh(this); - } - void clearDirty() { - fDirty= false; - } - public String getName() { - if (fLastName == null) - fLastName= super.getName(); - if (fDirty) - return '<' + fLastName + '>'; - return fLastName; - } - - public ITypedElement getId() { - ITypedElement id= super.getId(); - if (id == null) - return fLastId; - fLastId= id; - return id; - } - } - - /** - * Creates an compare editor input for the given selection. - */ - ResourceCompareInput(CompareConfiguration config) { - super(config); - } - - public Viewer createDiffViewer(Composite parent) { - fDiffViewer= new DiffTreeViewer(parent, getCompareConfiguration()) { - protected void fillContextMenu(IMenuManager manager) { - - if (fOpenAction == null) { - fOpenAction= new Action() { - public void run() { - handleOpen(null); - } - }; - Utilities.initAction(fOpenAction, getBundle(), "action.CompareContents."); //$NON-NLS-1$ - } - - boolean enable= false; - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection)selection; - if (ss.size() == 1) { - Object element= ss.getFirstElement(); - if (element instanceof MyDiffNode) { - ITypedElement te= ((MyDiffNode) element).getId(); - if (te != null) - enable= !ITypedElement.FOLDER_TYPE.equals(te.getType()); - } else - enable= true; - } - } - fOpenAction.setEnabled(enable); - - manager.add(fOpenAction); - - super.fillContextMenu(manager); - } - }; - return fDiffViewer; - } - - /** - * Returns true if compare can be executed for the given selection. - */ - boolean setSelection(ISelection s) { - - IResource[] selection= Utilities.getResources(s); - if (selection.length < 2 || selection.length > 3) - return false; - - fThreeWay= selection.length == 3; - - fLeftResource= selection[0]; - fRightResource= selection[1]; - if (fThreeWay) { - fLeftResource= selection[1]; - fRightResource= selection[2]; - } - - fAncestor= null; - fLeft= getStructure(fLeftResource); - fRight= getStructure(fRightResource); - - if (incomparable(fLeft, fRight)) - return false; - - if (fThreeWay) { - fAncestorResource= selection[0]; - fAncestor= getStructure(fAncestorResource); - - if (incomparable(fAncestor, fRight)) - return false; - } - - return true; - } - - /** - * Initializes the images in the compare configuration. - */ - void initializeCompareConfiguration() { - CompareConfiguration cc= getCompareConfiguration(); - if (fLeftResource != null) { - cc.setLeftLabel(buildLabel(fLeftResource)); - cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource)); - } - if (fRightResource != null) { - cc.setRightLabel(buildLabel(fRightResource)); - cc.setRightImage(CompareUIPlugin.getImage(fRightResource)); - } - if (fThreeWay && fAncestorResource != null) { - cc.setAncestorLabel(buildLabel(fAncestorResource)); - cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource)); - } - } - - /** - * Returns true if the given arguments cannot be compared. - */ - private boolean incomparable(IStructureComparator c1, IStructureComparator c2) { - if (c1 == null || c2 == null) - return true; - return isLeaf(c1) != isLeaf(c2); - } - - /** - * Returns true if the given arguments is a leaf. - */ - private boolean isLeaf(IStructureComparator c) { - if (c instanceof ITypedElement) { - ITypedElement te= (ITypedElement) c; - return !ITypedElement.FOLDER_TYPE.equals(te.getType()); - } - return false; - } - - /** - * Creates a <code>IStructureComparator</code> for the given input. - * Returns <code>null</code> if no <code>IStructureComparator</code> - * can be found for the <code>IResource</code>. - */ - private IStructureComparator getStructure(IResource input) { - - if (input instanceof IContainer) - return new BufferedResourceNode(input); - - if (input instanceof IFile) { - IStructureComparator rn= new BufferedResourceNode(input); - IFile file= (IFile) input; - String type= normalizeCase(file.getFileExtension()); - if ("JAR".equals(type) || "ZIP".equals(type)) //$NON-NLS-2$ //$NON-NLS-1$ - return new ZipFileStructureCreator().getStructure(rn); - return rn; - } - return null; - } - - /** - * Performs a two-way or three-way diff on the current selection. - */ - public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException { - - try { - // fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty - fLeftResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - fRightResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - if (fThreeWay && fAncestorResource != null) - fAncestorResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - // end fix - - pm.beginTask(Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$ - - String leftLabel= fLeftResource.getName(); - String rightLabel= fRightResource.getName(); - - String title; - if (fThreeWay) { - String format= Utilities.getString("ResourceCompare.threeWay.title"); //$NON-NLS-1$ - String ancestorLabel= fAncestorResource.getName(); - title= MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel}); - } else { - String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$ - title= MessageFormat.format(format, new String[] {leftLabel, rightLabel}); - } - setTitle(title); - - Differencer d= new Differencer() { - protected Object visit(Object parent, int description, Object ancestor, Object left, Object right) { - return new MyDiffNode((IDiffContainer) parent, description, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right); - } - }; - - fRoot= d.findDifferences(fThreeWay, pm, null, fAncestor, fLeft, fRight); - return fRoot; - - } catch (CoreException ex) { - throw new InvocationTargetException(ex); - } finally { - pm.done(); - } - } - - public String getToolTipText() { - if (fLeftResource != null && fRightResource != null) { - String leftLabel= fLeftResource.getFullPath().makeRelative().toString(); - String rightLabel= fRightResource.getFullPath().makeRelative().toString(); - if (fThreeWay) { - String format= Utilities.getString("ResourceCompare.threeWay.tooltip"); //$NON-NLS-1$ - String ancestorLabel= fAncestorResource.getFullPath().makeRelative().toString(); - return MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel}); - } else { - String format= Utilities.getString("ResourceCompare.twoWay.tooltip"); //$NON-NLS-1$ - return MessageFormat.format(format, new String[] {leftLabel, rightLabel}); - } - } - // fall back - return super.getToolTipText(); - } - - private String buildLabel(IResource r) { - String n= r.getFullPath().toString(); - if (n.charAt(0) == IPath.SEPARATOR) - return n.substring(1); - return n; - } - - public void saveChanges(IProgressMonitor pm) throws CoreException { - super.saveChanges(pm); - if (fRoot instanceof DiffNode) { - try { - commit(pm, (DiffNode) fRoot); - } finally { - if (fDiffViewer != null) - fDiffViewer.refresh(); - setDirty(false); - } - } - } - - /* - * Recursively walks the diff tree and commits all changes. - */ - private static void commit(IProgressMonitor pm, DiffNode node) throws CoreException { - - if (node instanceof MyDiffNode) - ((MyDiffNode)node).clearDirty(); - - ITypedElement left= node.getLeft(); - if (left instanceof BufferedResourceNode) - ((BufferedResourceNode) left).commit(pm); - - ITypedElement right= node.getRight(); - if (right instanceof BufferedResourceNode) - ((BufferedResourceNode) right).commit(pm); - - IDiffElement[] children= node.getChildren(); - if (children != null) { - for (int i= 0; i < children.length; i++) { - IDiffElement element= children[i]; - if (element instanceof DiffNode) - commit(pm, (DiffNode) element); - } - } - } - - private static String normalizeCase(String s) { - if (NORMALIZE_CASE && s != null) - return s.toUpperCase(); - return s; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java deleted file mode 100644 index 581527039..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.compare.*; - -/** - * Toggles the <code>ICompareConfiguration.SHOW_PSEUDO_CONFLICTS</code> property of an - * <code>ICompareConfiguration</code>. - */ -public class ShowPseudoConflicts extends ChangePropertyAction { - - public ShowPseudoConflicts(ResourceBundle bundle, CompareConfiguration cc) { - super(bundle, cc, "action.ShowPseudoConflicts.", CompareConfiguration.SHOW_PSEUDO_CONFLICTS); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java deleted file mode 100644 index 1346348c1..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.jface.text.Document; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - - -public class SimpleTextViewer extends AbstractViewer { - - private SourceViewer fSourceViewer; - private ICompareInput fInput; - - - SimpleTextViewer(Composite parent) { - fSourceViewer= new SourceViewer(parent, null, SWT.H_SCROLL + SWT.V_SCROLL); - fSourceViewer.setEditable(false); - } - - public Control getControl() { - return fSourceViewer.getTextWidget(); - } - - public void setInput(Object input) { - if (input instanceof IStreamContentAccessor) { - fSourceViewer.setDocument(new Document(getString(input))); - } else if (input instanceof ICompareInput) { - fInput= (ICompareInput) input; - ITypedElement left= ((ICompareInput) fInput).getLeft(); - fSourceViewer.setDocument(new Document(getString(left))); - } - } - - public Object getInput() { - return fInput; - } - - private String getString(Object input) { - - if (input instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) input; - try { - return Utilities.readString(sca.getContents()); - } catch (CoreException ex) { - } - } - return ""; //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java deleted file mode 100644 index 739b82f0e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Layout; - -public class TabFolderLayout extends Layout { - - protected Point computeSize (Composite composite, int wHint, int hHint, boolean flushCache) { - if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) - return new Point(wHint, hHint); - - Control [] children = composite.getChildren (); - int count = children.length; - int maxWidth = 0, maxHeight = 0; - for (int i=0; i<count; i++) { - Control child = children [i]; - Point pt = child.computeSize (SWT.DEFAULT, SWT.DEFAULT, flushCache); - maxWidth = Math.max (maxWidth, pt.x); - maxHeight = Math.max (maxHeight, pt.y); - } - - if (wHint != SWT.DEFAULT) - maxWidth= wHint; - if (hHint != SWT.DEFAULT) - maxHeight= hHint; - - return new Point(maxWidth, maxHeight); - - } - - protected void layout (Composite composite, boolean flushCache) { - Rectangle rect= composite.getClientArea(); - - Control[] children = composite.getChildren(); - for (int i = 0; i < children.length; i++) { - children[i].setBounds(rect); - } - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java deleted file mode 100644 index 1a5d1d8be..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.TextMergeViewer; - -/** - * A factory object for the <code>TextMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class TextMergeViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new TextMergeViewer(parent, mp); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java deleted file mode 100644 index 66eaba9f8..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.IViewerCreator; - - -/** - * A factory object for the <code>TextMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class TextViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new SimpleTextViewer(parent); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java deleted file mode 100644 index efbfa3c50..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java +++ /dev/null @@ -1,384 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.operation.*; -import org.eclipse.jface.resource.JFaceResources; - -import org.eclipse.core.runtime.*; - -/** - * A modal dialog that displays progress during a long running operation. - */ -public class TimeoutContext { - - private static class ModalContextThread extends Thread { - - private boolean fWorking; - private IRunnableWithProgress fRunnable; - private Throwable fThrowable; - private IProgressMonitor fProgressMonitor; - private boolean fContinueEventDispatching= true; - private Display fDisplay; - - private ModalContextThread(IRunnableWithProgress operation, IProgressMonitor monitor) { - super("TimeoutContext"); //$NON-NLS-1$ - fRunnable= operation; - fProgressMonitor= monitor; - } - - synchronized boolean timeout(Display display) { - fDisplay= display; - return fWorking; - } - - public void run() { - try { - fWorking= true; - if (fRunnable != null) - fRunnable.run(fProgressMonitor); - } catch (InvocationTargetException e) { - fThrowable= e; - } catch (InterruptedException e) { - fThrowable= e; - } catch (RuntimeException e) { - fThrowable= e; - } catch (ThreadDeath e) { - // Make sure to propagate ThreadDeath, or threads will never fully terminate - throw e; - } catch (Error e) { - fThrowable= e; - } finally { - fWorking= false; - - if (fDisplay != null) { - // Make sure that all events in the asynchronous event queue - // are dispatched. - fDisplay.syncExec( - new Runnable() { - public void run() { - // do nothing - } - } - ); - - // Stop event dispatching - fContinueEventDispatching= false; - - // Force the event loop to return from sleep () so that - // it stops event dispatching. - fDisplay.asyncExec(null); - } - } - } - - public void block() { - while (fContinueEventDispatching) - if (!fDisplay.readAndDispatch()) - fDisplay.sleep(); - } - } - - static class ProgressMonitorDialog extends org.eclipse.jface.dialogs.Dialog { - - protected ProgressIndicator fProgressIndicator; - protected Label fTaskLabel; - protected Label fSubTaskLabel; - protected Button fCancel; - protected boolean fEnableCancelButton; - private ProgressMonitor fProgressMonitor; - private Cursor fArrowCursor; - private Cursor fWaitCursor; - private Shell fParentShell; - - private ProgressMonitorDialog(Shell parent, boolean cancelable, ProgressMonitor pm) { - super(parent); - fProgressMonitor= pm; - fParentShell= parent; - fEnableCancelButton= cancelable; - this.setBlockOnOpen(false); - setShellStyle(SWT.BORDER | SWT.TITLE | SWT.APPLICATION_MODAL); // no close button - } - - public boolean close() { - if (fCancel != null && !fCancel.isDisposed()) - fCancel.setCursor(null); - Shell shell= getShell(); - if (shell != null && !shell.isDisposed()) - shell.setCursor(null); - if (fArrowCursor != null) - fArrowCursor.dispose(); - if (fWaitCursor != null) - fWaitCursor.dispose(); - fArrowCursor= null; - fWaitCursor= null; - return super.close(); - } - - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(JFaceResources.getString("ProgressMonitorDialog.title")); //$NON-NLS-1$ - if (fWaitCursor == null) - fWaitCursor= new Cursor(shell.getDisplay(),SWT.CURSOR_WAIT); - shell.setCursor(fWaitCursor); - } - - protected void createButtonsForButtonBar(Composite parent) { - // cancel button - fCancel= createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true); - if(fArrowCursor == null) - fArrowCursor= new Cursor(fCancel.getDisplay(),SWT.CURSOR_ARROW); - fCancel.setCursor(fArrowCursor); - fCancel.addListener(SWT.Selection, - new Listener() { - public void handleEvent(Event e) { - if (fCancel != null && !fCancel.isDisposed()) - fCancel.setEnabled(false); - fProgressMonitor.setCanceled(true); - } - } - ); - fCancel.setEnabled(fEnableCancelButton); - } - - protected Control createDialogArea(Composite parent) { - - Composite c= (Composite)super.createDialogArea(parent); - ((GridLayout)c.getLayout()).numColumns= 2; - - // icon - Label iconLabel= new Label(c, SWT.LEFT); - GridData gd= new GridData(); - iconLabel.setLayoutData(gd); - iconLabel.setFont(parent.getFont()); - Image i= JFaceResources.getImageRegistry().get(org.eclipse.jface.dialogs.Dialog.DLG_IMG_INFO); - if (i != null) - iconLabel.setImage(i); - else - iconLabel.setText(JFaceResources.getString("Image_not_found")); //$NON-NLS-1$ - - // label on right hand side of icon - fTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP); - fTaskLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - fTaskLabel.setFont(parent.getFont()); - - // progress indicator - fProgressIndicator= new ProgressIndicator(c); - gd= new GridData(); - gd.heightHint= 15; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.horizontalSpan= 2; - fProgressIndicator.setLayoutData(gd); - - // label showing current task - fSubTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP); - gd= new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint= 35; - gd.horizontalSpan= 2; - fSubTaskLabel.setLayoutData(gd); - fSubTaskLabel.setFont(parent.getFont()); - - // update with values fProgressMonitor - String s= fProgressMonitor.fTask; - if (s == null) - s= ""; //$NON-NLS-1$ - fTaskLabel.setText(s); - - if (fProgressMonitor.fMaxWork == IProgressMonitor.UNKNOWN) - fProgressIndicator.beginAnimatedTask(); - else - fProgressIndicator.beginTask(fProgressMonitor.fMaxWork); - - if (fProgressMonitor.fSubTask != null) - fSubTaskLabel.setText(fProgressMonitor.fSubTask); - fProgressIndicator.worked(fProgressMonitor.fWorked); - - fProgressMonitor.activate(this); - applyDialogFont(c); - return c; - } - - void beginTask(final String name, final int totalWork) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - fTaskLabel.setText(name); - - if (fProgressIndicator != null && fProgressIndicator.isDisposed()) { - if (totalWork == IProgressMonitor.UNKNOWN) - fProgressIndicator.beginAnimatedTask(); - else - fProgressIndicator.beginTask(totalWork); - } - } - } - ); - } - - void setTaskName(final String name) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fTaskLabel != null && fTaskLabel.isDisposed()) - fTaskLabel.setText(name); - } - } - ); - } - - void setSubTaskName(final String name) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - String n= (name == null) ? "" : name; //$NON-NLS-1$ - if (fSubTaskLabel != null && !fSubTaskLabel.isDisposed()) - fSubTaskLabel.setText(n); - } - } - ); - } - - void done() { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) { - fProgressIndicator.sendRemainingWork(); - fProgressIndicator.done(); - } - } - } - ); - } - - void worked(final double work) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) - fProgressIndicator.worked(work); - } - } - ); - } - - protected Point getInitialSize() { - return getShell().computeSize(450, SWT.DEFAULT); - } - } - - private static class ProgressMonitor implements IProgressMonitor { - - private int fMaxWork; - private String fTask; - private String fSubTask; - private int fWorked; - private ProgressMonitorDialog fProgressMonitorDialog; - private boolean fIsCanceled; - - public void beginTask(String name, int totalWork) { - - fTask= name; - fMaxWork= totalWork; - fWorked= 0; - - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.beginTask(name, totalWork); - } - - void activate(ProgressMonitorDialog dialog) { - fProgressMonitorDialog= dialog; - } - - public void done() { - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.done(); - } - - public void setTaskName(String name) { - fTask= name; - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.setTaskName(name); - } - - public boolean isCanceled() { - return fIsCanceled; - } - - public void setCanceled(boolean b) { - fIsCanceled= b; - } - - public void subTask(String name) { - fSubTask= name; - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.setSubTaskName(name); - } - - public void worked(int work) { - if (fProgressMonitorDialog != null) - internalWorked(work); - else - fWorked+= work; - } - - public void internalWorked(double work) { - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.worked(work); - } - } - - public static void run(boolean cancelable, int timeout, Shell parent, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { - - Display display= parent.getDisplay(); - - ProgressMonitor pm= new ProgressMonitor(); - - ModalContextThread t= new ModalContextThread(runnable, pm); - t.start(); // start the long running operation - - // wait until long operations terminates or timeout - try { - t.join(timeout); - } catch (InterruptedException e) { - } - - if (t.timeout(display)) { // timeout - ProgressMonitorDialog dialog= new ProgressMonitorDialog(parent, cancelable, pm); - dialog.open(); - t.block(); - dialog.close(); - } - - Throwable throwable= t.fThrowable; - if (throwable != null) { - if (throwable instanceof InvocationTargetException) { - throw (InvocationTargetException) throwable; - } else if (throwable instanceof InterruptedException) { - throw (InterruptedException) throwable; - } else if (throwable instanceof OperationCanceledException) { - throw new InterruptedException(throwable.getMessage()); - } else { - throw new InvocationTargetException(throwable); - } - } - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java deleted file mode 100644 index e1aca48c9..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.compare.rangedifferencer.IRangeComparator; -import org.eclipse.compare.contentmergeviewer.ITokenComparator; - -/** - * Implements the <code>ITokenComparator</code> interface for words (or tokens) - * in a string. - * A <code>TokenComparator</code> is used as the input for the <code>RangeDifferencer</code> - * engine to perform a token oriented compare on strings. - */ -public class TokenComparator implements ITokenComparator { - - private boolean fShouldEscape= true; - private String fText; - private int fCount; - private int[] fStarts; - private int[] fLengths; - - /** - * Creates a <code>TokenComparator</code> for the given string. - * - * @param string the string that is split into token - */ - public TokenComparator(String text) { - - Assert.isNotNull(text); - - fText= text; - - int length= fText.length(); - fStarts= new int[length]; // pessimistic assumption! - fLengths= new int[length]; - fCount= 0; - - char lastCategory= 0; // 0: no category - for (int i= 0; i < length; i++) { - char c= fText.charAt(i); - - char category= '?'; // unspecified category - if (Character.isWhitespace(c)) - category= ' '; // white space category - else if (Character.isDigit(c)) - category= '0'; // digits - else if (Character.isLetter(c)) - category= 'a'; // letters - - if (category != lastCategory) { - // start a new token - fStarts[fCount++]= i; - lastCategory= category; - } - fLengths[fCount-1]++; - } - } - - /** - * Creates a <code>TokenComparator</code> for the given string. - * - * @param string the string that is split into token - * @param shouldEscape - */ - public TokenComparator(String s, boolean shouldEscape) { - this(s); - fShouldEscape= shouldEscape; - } - - /** - * Returns the number of token in the string. - * - * @return number of token in the string - */ - public int getRangeCount() { - return fCount; - } - - /* (non Javadoc) - * see ITokenComparator.getTokenStart - */ - public int getTokenStart(int index) { - if (index < fCount) - return fStarts[index]; - return fText.length(); - } - - /* (non Javadoc) - * see ITokenComparator.getTokenLength - */ - public int getTokenLength(int index) { - if (index < fCount) - return fLengths[index]; - return 0; - } - - /** - * Returns <code>true</code> if a token given by the first index - * matches a token specified by the other <code>IRangeComparator</code> and index. - * - * @param thisIndex the number of the token within this range comparator - * @param other the range comparator to compare this with - * @param otherIndex the number of the token within the other comparator - * @return <code>true</code> if the token are equal - */ - public boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex) { - if (other != null && getClass() == other.getClass()) { - TokenComparator tc= (TokenComparator) other; - int thisLen= getTokenLength(thisIndex); - int otherLen= tc.getTokenLength(otherIndex); - if (thisLen == otherLen) - return fText.regionMatches(false, getTokenStart(thisIndex), tc.fText, tc.getTokenStart(otherIndex), thisLen); - } - return false; - } - - /** - * Aborts the comparison if the number of tokens is too large. - * - * @return <code>true</code> to abort a token comparison - */ - public boolean skipRangeComparison(int length, int max, IRangeComparator other) { - - if (!fShouldEscape) - return false; - - if (getRangeCount() < 50 || other.getRangeCount() < 50) - return false; - - if (max < 100) - return false; - - if (length < 100) - return false; - - if (max > 800) - return true; - - if (length < max / 4) - return false; - - return true; - } - -// public static void main(String args[]) { -// //String in= "private static boolean isWhitespace(char c) {"; -// //String in= "for (int j= 0; j < l-1; j++) {"; -// String in= "for do i= 123; i++"; -// TokenComparator tc= new TokenComparator(in, false); -// -// System.out.println("n: " + tc.getRangeCount()); -// System.out.println(in); -// -// int p= 0; -// for (int i= 0; i < tc.getRangeCount(); i++) { -// int l= tc.getTokenLength(i); -// System.out.print("<"); -// -// for (int j= 0; j < l-1; j++) -// System.out.print(" "); -// } -// System.out.println(); -// -// //System.out.println("extract: <" + tc.extract(16, 1) + ">"); -// } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java deleted file mode 100644 index b73ab6b0c..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java +++ /dev/null @@ -1,401 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.text.MessageFormat; -import java.util.*; - -import org.eclipse.swt.widgets.*; - -import org.eclipse.core.resources.ResourcesPlugin; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.util.*; -import org.eclipse.jface.viewers.*; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IAdaptable; - -import org.eclipse.ui.*; - -import org.eclipse.compare.CompareConfiguration; - -/** - * Convenience and utility methods. - */ -public class Utilities { - - public static void registerAction(IKeyBindingService kbs, IAction a, String id) { - if (kbs != null) { - a.setActionDefinitionId(id); - kbs.registerAction(a); - } - } - - public static IWorkbenchPartSite findSite(Control c) { - while (c != null && !c.isDisposed()) { - Object data= c.getData(); - if (data instanceof IWorkbenchPart) - return ((IWorkbenchPart)data).getSite(); - c= c.getParent(); - } - return null; - } - - public static IActionBars findActionBars(Control c) { - while (c != null && !c.isDisposed()) { - Object data= c.getData(); - if (data instanceof CompareEditor) - return ((CompareEditor)data).getActionBars(); - - // PR 1GDVZV7: ITPVCM:WIN98 - CTRL + C does not work in Java source compare - if (data instanceof IViewPart) - return ((IViewPart)data).getViewSite().getActionBars(); - // end PR 1GDVZV7 - - c= c.getParent(); - } - return null; - } - - public static void setEnableComposite(Composite composite, boolean enable) { - Control[] children= composite.getChildren(); - for (int i= 0; i < children.length; i++) - children[i].setEnabled(enable); - } - - public static boolean getBoolean(CompareConfiguration cc, String key, boolean dflt) { - if (cc != null) { - Object value= cc.getProperty(key); - if (value instanceof Boolean) - return ((Boolean) value).booleanValue(); - } - return dflt; - } - - public static void firePropertyChange(ListenerList ll, Object source, String property, Object old, Object newValue) { - if (ll != null) { - PropertyChangeEvent event= null; - Object[] listeners= ll.getListeners(); - for (int i= 0; i < listeners.length; i++) { - IPropertyChangeListener l= (IPropertyChangeListener) listeners[i]; - if (event == null) - event= new PropertyChangeEvent(source, property, old, newValue); - l.propertyChange(event); - } - } - } - - public static boolean okToUse(Widget widget) { - return widget != null && !widget.isDisposed(); - } - - public static boolean isMotif() { - return false; - } - - /** - * Returns the elements of the given selection. - * Returns an empty array if the selection is empty or if - * the given selection is not of type <code>IStructuredSelection</code>. - * - * @param selection the selection - * @return the selected elements - */ - public static Object[] toArray(ISelection selection) { - if (!(selection instanceof IStructuredSelection)) { - return new Object[0]; - } - IStructuredSelection ss= (IStructuredSelection) selection; - return ss.toArray(); - } - - /** - * Convenience method: extract all <code>IResources</code> from given selection. - * Never returns null. - */ - public static IResource[] getResources(ISelection selection) { - - ArrayList tmp= new ArrayList(); - - if (selection instanceof IStructuredSelection) { - - Object[] s= ((IStructuredSelection)selection).toArray(); - - for (int i= 0; i < s.length; i++) { - Object o= s[i]; - if (o instanceof IResource) { - tmp.add(o); - continue; - } - if (o instanceof IAdaptable) { - IAdaptable a= (IAdaptable) o; - Object adapter= a.getAdapter(IResource.class); - if (adapter instanceof IResource) - tmp.add(adapter); - continue; - } - } - } - return (IResource[]) tmp.toArray(new IResource[tmp.size()]); - } - - public static byte[] readBytes(InputStream in) { - ByteArrayOutputStream bos= new ByteArrayOutputStream(); - try { - while (true) { - int c= in.read(); - if (c == -1) - break; - bos.write(c); - } - - } catch (IOException ex) { - return null; - - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException x) { - } - } - try { - bos.close(); - } catch (IOException x) { - } - } - - return bos.toByteArray(); - } - - /** - * Returns null if an error occurred. - */ - public static String readString(InputStream is) { - if (is == null) - return null; - BufferedReader reader= null; - try { - StringBuffer buffer= new StringBuffer(); - char[] part= new char[2048]; - int read= 0; - reader= new BufferedReader(new InputStreamReader(is, ResourcesPlugin.getEncoding())); - - while ((read= reader.read(part)) != -1) - buffer.append(part, 0, read); - - return buffer.toString(); - - } catch (IOException ex) { - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException ex) { - } - } - } - return null; - } - - public static byte[] getBytes(String s) { - try { - return s.getBytes(ResourcesPlugin.getEncoding()); - } catch (UnsupportedEncodingException e) { - return s.getBytes(); - } - } - - public static String getIconPath(Display display) { - return "icons/full/"; //$NON-NLS-1$ - } - - /** - * Initialize the given Action from a ResourceBundle. - */ - public static void initAction(IAction a, ResourceBundle bundle, String prefix) { - - String labelKey= "label"; //$NON-NLS-1$ - String tooltipKey= "tooltip"; //$NON-NLS-1$ - String imageKey= "image"; //$NON-NLS-1$ - String descriptionKey= "description"; //$NON-NLS-1$ - - if (prefix != null && prefix.length() > 0) { - labelKey= prefix + labelKey; - tooltipKey= prefix + tooltipKey; - imageKey= prefix + imageKey; - descriptionKey= prefix + descriptionKey; - } - - a.setText(getString(bundle, labelKey, labelKey)); - a.setToolTipText(getString(bundle, tooltipKey, null)); - a.setDescription(getString(bundle, descriptionKey, null)); - - String relPath= getString(bundle, imageKey, null); - if (relPath != null && relPath.trim().length() > 0) { - - String cPath; - String dPath; - String ePath; - - if (relPath.indexOf("/") >= 0) { //$NON-NLS-1$ - String path= relPath.substring(1); - cPath= 'c' + path; - dPath= 'd' + path; - ePath= 'e' + path; - } else { - cPath= "clcl16/" + relPath; //$NON-NLS-1$ - dPath= "dlcl16/" + relPath; //$NON-NLS-1$ - ePath= "elcl16/" + relPath; //$NON-NLS-1$ - } - - ImageDescriptor id= CompareUIPlugin.getImageDescriptor(dPath); // we set the disabled image first (see PR 1GDDE87) - if (id != null) - a.setDisabledImageDescriptor(id); - id= CompareUIPlugin.getImageDescriptor(cPath); - if (id != null) - a.setHoverImageDescriptor(id); - id= CompareUIPlugin.getImageDescriptor(ePath); - if (id != null) - a.setImageDescriptor(id); - } - } - - public static void initToggleAction(IAction a, ResourceBundle bundle, String prefix, boolean checked) { - - String tooltip= null; - if (checked) - tooltip= getString(bundle, prefix + "tooltip.checked", null); //$NON-NLS-1$ - else - tooltip= getString(bundle, prefix + "tooltip.unchecked", null); //$NON-NLS-1$ - if (tooltip == null) - tooltip= getString(bundle, prefix + "tooltip", null); //$NON-NLS-1$ - - if (tooltip != null) - a.setToolTipText(tooltip); - - String description= null; - if (checked) - description= getString(bundle, prefix + "description.checked", null); //$NON-NLS-1$ - else - description= getString(bundle, prefix + "description.unchecked", null); //$NON-NLS-1$ - if (description == null) - description= getString(bundle, prefix + "description", null); //$NON-NLS-1$ - - if (description != null) - a.setDescription(description); - - } - - public static String getString(ResourceBundle bundle, String key, String dfltValue) { - - if (bundle != null) { - try { - return bundle.getString(key); - } catch (MissingResourceException x) { - } - } - return dfltValue; - } - - public static String getFormattedString(ResourceBundle bundle, String key, String arg) { - - if (bundle != null) { - try { - return MessageFormat.format(bundle.getString(key), new String[] { arg }); - } catch (MissingResourceException x) { - } - } - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - - public static String getString(String key) { - try { - return CompareUIPlugin.getResourceBundle().getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } - - public static String getFormattedString(String key, String arg) { - try{ - return MessageFormat.format(CompareUIPlugin.getResourceBundle().getString(key), new String[] { arg }); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } - - public static String getString(ResourceBundle bundle, String key) { - return getString(bundle, key, key); - } - - public static int getInteger(ResourceBundle bundle, String key, int dfltValue) { - - if (bundle != null) { - try { - String s= bundle.getString(key); - if (s != null) - return Integer.parseInt(s); - } catch (NumberFormatException x) { - } catch (MissingResourceException x) { - } - } - return dfltValue; - } - - /** - * Answers <code>true</code> if the given selection contains resources that don't - * have overlapping paths and <code>false</code> otherwise. - */ - /* - public static boolean isSelectionNonOverlapping() throws TeamException { - IResource[] resources = getSelectedResources(); - // allow operation for non-overlapping resource selections - if(resources.length>0) { - List validPaths = new ArrayList(2); - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - - // only allow cvs resources to be selected - if(RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId()) == null) { - return false; - } - - // check if this resource overlaps other selections - IPath resourceFullPath = resource.getFullPath(); - if(!validPaths.isEmpty()) { - for (Iterator it = validPaths.iterator(); it.hasNext();) { - IPath path = (IPath) it.next(); - if(path.isPrefixOf(resourceFullPath) || - resourceFullPath.isPrefixOf(path)) { - return false; - } - } - } - validPaths.add(resourceFullPath); - - // ensure that resources are managed - ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource); - if(cvsResource.isFolder()) { - if( ! ((ICVSFolder)cvsResource).isCVSFolder()) return false; - } else { - if( ! cvsResource.isManaged()) return false; - } - } - return true; - } - return false; - } - */ -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java deleted file mode 100644 index c3b601c47..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.compare.*; - -import org.eclipse.jface.viewers.Viewer; - -/** - * Creates <code>Viewer</code>s from an <code>IConfigurationElement</code>. - */ -public class ViewerDescriptor implements IViewerDescriptor { - - private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$ - private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$ - - private IConfigurationElement fConfiguration; - private IViewerCreator fViewerCreator; - private Class fViewerClass; - - public ViewerDescriptor(IConfigurationElement config) { - fConfiguration= config; - } - - public Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration mp) { - - if (currentViewer != null && currentViewer.getClass() == fViewerClass) { - //System.out.println("reused viewer: " + currentViewer.getClass().getName()); - return currentViewer; - } - - if (fViewerCreator == null) { - try { - fViewerCreator= (IViewerCreator) fConfiguration.createExecutableExtension(CLASS_ATTRIBUTE); - } catch (CoreException e) { - } - } - - if (fViewerCreator != null) { - Viewer viewer= fViewerCreator.createViewer(parent, mp); - if (viewer != null) - fViewerClass= viewer.getClass(); - return viewer; - } - - return null; - } - - public String getExtension() { - return fConfiguration.getAttribute(EXTENSIONS_ATTRIBUTE); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java deleted file mode 100644 index 27e580c5e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java +++ /dev/null @@ -1,17 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ViewerSwitchingCancelled extends Error { - -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Attic/LineReader.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Attic/LineReader.java deleted file mode 100644 index 33b9ca582..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Attic/LineReader.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.util.*; - -import org.eclipse.jface.util.Assert; - -/* package */ class LineReader { - - private boolean fHaveChar= false; - private int fLastChar; - private boolean fSawEOF= false; - private BufferedReader fReader; - private boolean fIgnoreSingleCR= false; - - - /* package */ LineReader(BufferedReader reader) { - fReader= reader; - Assert.isNotNull(reader); - } - - void ignoreSingleCR() { - fIgnoreSingleCR= true; - } - - /** - * Reads a line of text. A line is considered to be terminated by any one - * of a line feed ('\n'), a carriage return ('\r'), or a carriage return - * followed immediately by a linefeed. - * @return A string containing the contents of the line including - * the line-termination characters, or <code>null</code> if the end of the - * stream has been reached - * @exception IOException If an I/O error occurs - */ - /* package */ String readLine() throws IOException { - StringBuffer sb= null; - - while (!fSawEOF) { - int c= readChar(); - if (c == -1) { - fSawEOF= true; - break; - } - if (sb == null) - sb= new StringBuffer(); - sb.append((char)c); - if (c == '\n') - break; - if (c == '\r') { - c= readChar(); - if (c == -1) { - fSawEOF= true; - break; // EOF - } - if (c != '\n') { - if (fIgnoreSingleCR) { - sb.append((char)c); - continue; - } else { - fHaveChar= true; - fLastChar= c; - } - } else - sb.append((char)c); - break; - } - } - - if (sb != null) - return sb.toString(); - return null; - } - - /* package */ void close() { - try { - fReader.close(); - } catch (IOException ex) { - } - } - - /* package */ List readLines() { - try { - List lines= new ArrayList(); - String line; - while ((line= readLine()) != null) - lines.add(line); - return lines; - } catch (IOException ex) { - //System.out.println("error while reading file: " + fileName + "(" + ex + ")"); - } finally { - close(); - } - return null; - } - /** - * Returns the number of characters in the given string without - * counting a trailing line separator. - */ - /* package */ int lineContentLength(String line) { - if (line == null) - return 0; - int length= line.length(); - for (int i= length-1; i >= 0; i--) { - char c= line.charAt(i); - if (c =='\n' || c == '\r') - length--; - else - break; - } - return length; - } - - //---- private - - private int readChar() throws IOException { - if (fHaveChar) { - fHaveChar= false; - return fLastChar; - } - return fReader.read(); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java deleted file mode 100644 index 04d5530bb..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java +++ /dev/null @@ -1,160 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.lang.reflect.InvocationTargetException; -import java.util.Arrays; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardDialog; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.ui.IActionDelegate; -import org.eclipse.ui.IEditorPart; - -import org.eclipse.compare.internal.*; - - -public class CompareWithPatchAction implements IActionDelegate { - - static class PatchWizardDialog extends WizardDialog { - - PatchWizardDialog(Shell parent, IWizard wizard) { - super(parent, wizard); - - setShellStyle(getShellStyle() | SWT.RESIZE); - setMinimumPageSize(700, 500); - } - } - - private ISelection fSelection; - private boolean fSavedFiles; - - - public void selectionChanged(IAction action, ISelection selection) { - fSelection= selection; - IResource[] resources= PatchWizard.getResource(fSelection); - action.setEnabled(resources != null && resources.length == 1); - } - - public void run(IAction action) { - PatchWizard wizard= new PatchWizard(fSelection); - - if (areAllEditorsSaved()) { - PatchWizardDialog dialog= new PatchWizardDialog(CompareUIPlugin.getShell(), wizard); - dialog.open(); - } - } - - private boolean areAllEditorsSaved(){ - if (CompareUIPlugin.getDirtyEditors().length == 0) - return true; - if (! saveAllDirtyEditors()) - return false; - Shell shell= CompareUIPlugin.getShell(); - try { - // Save isn't cancelable. - IWorkspace workspace= ResourcesPlugin.getWorkspace(); - IWorkspaceDescription description= workspace.getDescription(); - boolean autoBuild= description.isAutoBuilding(); - description.setAutoBuilding(false); - workspace.setDescription(description); - try { - new ProgressMonitorDialog(shell).run(false, false, createRunnable()); - fSavedFiles= true; - } finally { - description.setAutoBuilding(autoBuild); - workspace.setDescription(description); - } - return true; - } catch (InvocationTargetException e) { - ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception")); //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } catch (CoreException e) { - ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception")); //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } catch (InterruptedException e) { - Assert.isTrue(false); // Can't happen. Operation isn't cancelable. - return false; - } - } - - private IRunnableWithProgress createRunnable() { - return new IRunnableWithProgress() { - public void run(IProgressMonitor pm) { - IEditorPart[] editorsToSave= CompareUIPlugin.getDirtyEditors(); - pm.beginTask(PatchMessages.getString("PatchAction.SavingDirtyEditorsTask"), editorsToSave.length); //$NON-NLS-1$ - for (int i= 0; i < editorsToSave.length; i++) { - editorsToSave[i].doSave(new SubProgressMonitor(pm, 1)); - pm.worked(1); - } - pm.done(); - } - }; - } - - private boolean saveAllDirtyEditors() { - if (ComparePreferencePage.getSaveAllEditors()) //must save everything - return true; - ListDialog dialog= new ListDialog(CompareUIPlugin.getShell()) { - protected Control createDialogArea(Composite parent) { - Composite result= (Composite) super.createDialogArea(parent); - final Button check= new Button(result, SWT.CHECK); - check.setText(PatchMessages.getString("PatchAction.AlwaysSaveQuestion")); //$NON-NLS-1$ - check.setSelection(ComparePreferencePage.getSaveAllEditors()); - check.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - ComparePreferencePage.setSaveAllEditors(check.getSelection()); - } - } - ); - applyDialogFont(result); - return result; - } - }; - dialog.setTitle(PatchMessages.getString("PatchAction.SaveAllQuestion")); //$NON-NLS-1$ - dialog.setAddCancelButton(true); - dialog.setLabelProvider(createDialogLabelProvider()); - dialog.setMessage(PatchMessages.getString("PatchAction.SaveAllDescription")); //$NON-NLS-1$ - dialog.setContentProvider(new ListContentProvider()); - dialog.setInput(Arrays.asList(CompareUIPlugin.getDirtyEditors())); - return dialog.open() == Dialog.OK; - } - - private ILabelProvider createDialogLabelProvider() { - return new LabelProvider() { - public Image getImage(Object element) { - return ((IEditorPart) element).getTitleImage(); - } - public String getText(Object element) { - return ((IEditorPart) element).getTitle(); - } - }; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java deleted file mode 100644 index 12e7e2ca0..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.*; - -import org.eclipse.core.runtime.IPath; - -import org.eclipse.compare.structuremergeviewer.Differencer; - - -/* package */ class Diff { - - IPath fOldPath, fNewPath; - long fOldDate, fNewDate; // if 0: no file - List fHunks= new ArrayList(); - boolean fMatches= false; - private boolean fIsEnabled2= true; - String fRejected; - - - /* package */ Diff(IPath oldPath, long oldDate, IPath newPath, long newDate) { - fOldPath= oldPath; - fOldDate= oldPath == null ? 0 : oldDate; - fNewPath= newPath; - fNewDate= newPath == null ? 0 : newDate; - } - - boolean isEnabled() { - return fIsEnabled2; - } - - void setEnabled(boolean b) { - fIsEnabled2= b; - } - - void reverse() { - IPath tp= fOldPath; - fOldPath= fNewPath; - fNewPath= tp; - - long t= fOldDate; - fOldDate= fNewDate; - fNewDate= t; - - Iterator iter= fHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - hunk.reverse(); - } - } - - Hunk[] getHunks() { - return (Hunk[]) fHunks.toArray((Hunk[]) new Hunk[fHunks.size()]); - } - - IPath getPath() { - if (fOldPath != null) - return fOldPath; - return fNewPath; - } - - void finish() { - if (fHunks.size() == 1) { - Hunk h= (Hunk) fHunks.get(0); - if (h.fNewLength == 0) { - fNewDate= 0; - fNewPath= fOldPath; - } - } - } - - /* package */ void add(Hunk hunk) { - fHunks.add(hunk); - } - - /* package */ int getType() { - if (fOldDate == 0) - return Differencer.ADDITION; - if (fNewDate == 0) - return Differencer.DELETION; - return Differencer.CHANGE; - } - - /* package */ String getDescription(int strip) { - IPath path= fOldPath; - if (fOldDate == 0) - path= fNewPath; - if (strip > 0 && strip < path.segmentCount()) - path= path.removeFirstSegments(strip); - return path.toOSString(); - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java deleted file mode 100644 index ebd5a4961..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.List; - -/** - * A Hunk describes a range of changed lines and some context lines. - */ -/* package */ class Hunk { - - Diff fParent; - int fOldStart, fOldLength; - int fNewStart, fNewLength; - String[] fLines; - boolean fMatches= false; - private boolean fIsEnabled2= true; - - - /* package */ Hunk(Diff parent, int[] oldRange, int[] newRange, List lines) { - - fParent= parent; - if (fParent != null) - fParent.add(this); - - if (oldRange[0] > 0) - fOldStart= oldRange[0]-1; // line number start at 0! - else - fOldStart= 0; - fOldLength= oldRange[1]; - if (newRange[0] > 0) - fNewStart= newRange[0]-1; // line number start at 0! - else - fNewStart= 0; - fNewLength= newRange[1]; - - fLines= (String[]) lines.toArray(new String[lines.size()]); - } - - boolean isEnabled() { - return fIsEnabled2; - } - - void setEnabled(boolean b) { - fIsEnabled2= b; - } - - void reverse() { - int t= fOldStart; - fOldStart= fNewStart; - fNewStart= t; - - t= fOldLength; - fOldLength= fNewLength; - fNewLength= t; - - for (int i= 0; i < fLines.length; i++) { - String line= fLines[i]; - char c= line.charAt(0); - switch (c) { - case '+': - fLines[i]= '-' + line.substring(1); - break; - case '-': - fLines[i]= '+' + line.substring(1); - break; - default: - break; - } - } - } - - /** - * Returns the contents of this hunk. - * Each line starts with a control character. Their meaning is as follows: - * <ul> - * <li> - * '+': add the line - * <li> - * '-': delete the line - * <li> - * ' ': no change, context line - * </ul> - */ - String getContent() { - StringBuffer sb= new StringBuffer(); - for (int i= 0; i < fLines.length; i++) { - String line= fLines[i]; - sb.append(line.substring(0, Patcher.length(line))); - sb.append('\n'); - } - return sb.toString(); - } - - /** - * Returns a descriptive String for this hunk. - * It is in the form old_start,old_length -> new_start,new_length. - */ - String getDescription() { - StringBuffer sb= new StringBuffer(); - sb.append(Integer.toString(fOldStart)); - sb.append(','); - sb.append(Integer.toString(fOldLength)); - sb.append(" -> "); //$NON-NLS-1$ - sb.append(Integer.toString(fNewStart)); - sb.append(','); - sb.append(Integer.toString(fNewLength)); - return sb.toString(); - } - - String getRejectedDescription() { - StringBuffer sb= new StringBuffer(); - sb.append("@@ -"); //$NON-NLS-1$ - sb.append(Integer.toString(fOldStart)); - sb.append(','); - sb.append(Integer.toString(fOldLength)); - sb.append(" +"); //$NON-NLS-1$ - sb.append(Integer.toString(fNewStart)); - sb.append(','); - sb.append(Integer.toString(fNewLength)); - sb.append(" @@"); //$NON-NLS-1$ - return sb.toString(); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java deleted file mode 100644 index 1a3c09a54..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java +++ /dev/null @@ -1,522 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.text.MessageFormat; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.*; - -import org.eclipse.ui.help.*; -import org.eclipse.ui.model.*; - -import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - - -/* package */ class InputPatchPage extends WizardPage { - - // constants - protected static final int SIZING_TEXT_FIELD_WIDTH= 250; - protected static final int COMBO_HISTORY_LENGTH= 5; - - // dialog store id constants - private final static String PAGE_NAME= "PatchWizardPage1"; //$NON-NLS-1$ - private final static String STORE_PATCH_FILES_ID= PAGE_NAME + ".PATCH_FILES"; //$NON-NLS-1$ - private final static String STORE_USE_CLIPBOARD_ID= PAGE_NAME + ".USE_CLIPBOARD"; //$NON-NLS-1$ - - private boolean fShowError= false; - - // SWT widgets - private Button fUseClipboardButton; - private Combo fPatchFileNameField; - private Button fPatchFileBrowseButton; - private Button fUsePatchFileButton; - private Group fPatchFileGroup; - private CheckboxTreeViewer fPatchTargets; - private PatchWizard fPatchWizard; - - - InputPatchPage(PatchWizard pw) { - super("InputPatchPage", PatchMessages.getString("InputPatchPage.title"), null); //$NON-NLS-1$ //$NON-NLS-2$ - fPatchWizard= pw; - setMessage(PatchMessages.getString("InputPatchPage.message")); //$NON-NLS-1$ - } - - /** - * Get a path from the supplied text widget. - * @return org.eclipse.core.runtime.IPath - */ - protected IPath getPathFromText(Text textField) { - return (new Path(textField.getText())).makeAbsolute(); - } - - /* package */ String getPatchName() { - if (getUseClipboard()) - return PatchMessages.getString("InputPatchPage.Clipboard"); //$NON-NLS-1$ - return getPatchFilePath(); - } - - public void createControl(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout()); - composite.setLayoutData(new GridData(/* GridData.VERTICAL_ALIGN_FILL | */ GridData.HORIZONTAL_ALIGN_FILL)); - setControl(composite); - - Label l= new Label(composite, SWT.NONE); // a spacer - l.setText(PatchMessages.getString("InputPatchPage.SelectInput")); //$NON-NLS-1$ - buildInputGroup(composite); - - new Label(composite, SWT.NONE); // a spacer - - buildPatchFileGroup(composite); - - restoreWidgetValues(); - - updateWidgetEnablements(); - //updatePageCompletion(); - - Dialog.applyDialogFont(composite); - WorkbenchHelp.setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE); - } - - /* (non-JavaDoc) - * Method declared in IWizardPage. - */ - public IWizardPage getNextPage() { - - Patcher patcher= ((PatchWizard) getWizard()).getPatcher(); - - String source; - // Create a reader for the input - Reader reader= null; - if (getUseClipboard()) { - Control c= getControl(); - if (c != null) { - Clipboard clipboard= new Clipboard(c.getDisplay()); - Object o= clipboard.getContents(TextTransfer.getInstance()); - clipboard.dispose(); - if (o instanceof String) - reader= new StringReader((String)o); - } - source= PatchMessages.getString("InputPatchPage.Clipboard.title"); //$NON-NLS-1$ - } else { - String patchFilePath= getPatchFilePath(); - if (patchFilePath != null) { - try { - reader= new FileReader(patchFilePath); - } catch (FileNotFoundException ex) { - MessageDialog.openError(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), //$NON-NLS-1$ - PatchMessages.getString("InputPatchPage.PatchFileNotFound.message")); //$NON-NLS-1$ - } - } - source= PatchMessages.getString("InputPatchPage.PatchFile.title"); //$NON-NLS-1$ - } - - // parse the input - if (reader != null) { - try { - patcher.parse(new BufferedReader(reader)); - } catch (IOException ex) { - MessageDialog.openError(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), //$NON-NLS-1$ - PatchMessages.getString("InputPatchPage.ParseError.message")); //$NON-NLS-1$ - } - - try { - reader.close(); - } catch (IOException x) { - } - } - - Diff[] diffs= patcher.getDiffs(); - if (diffs == null || diffs.length == 0) { - String format= PatchMessages.getString("InputPatchPage.NoDiffsFound.format"); //$NON-NLS-1$ - String message= MessageFormat.format(format, new String[] { source }); - MessageDialog.openInformation(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), message); //$NON-NLS-1$ - return this; - } - - // if selected target is file ensure that patch file - // contains only a patch for a single file - IResource target= fPatchWizard.getTarget(); - if (target instanceof IFile && diffs.length > 1) { - String format= PatchMessages.getString("InputPatchPage.SingleFileError.format"); //$NON-NLS-1$ - String message= MessageFormat.format(format, new String[] { source }); - MessageDialog.openInformation(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), message); //$NON-NLS-1$ - return this; - } - - // guess prefix count - int guess= 0; // guessPrefix(diffs); - patcher.setStripPrefixSegments(guess); - - return super.getNextPage(); - } - - /* (non-JavaDoc) - * Method declared in IWizardPage. - */ - public boolean canFlipToNextPage() { - // we can't call getNextPage to determine if flipping is allowed since computing - // the next page is quite expensive. So we say yes if the page is complete. - return isPageComplete(); - } - - private void setEnablePatchFile(boolean enable) { - fPatchFileNameField.setEnabled(enable); - fPatchFileBrowseButton.setEnabled(enable); - } - - /** - * Create the group for selecting the patch file - */ - private void buildPatchFileGroup(Composite parent) { - - fPatchFileGroup= new Group(parent, SWT.NONE); - fPatchFileGroup.setText(PatchMessages.getString("InputPatchPage.SelectPatch.title")); //$NON-NLS-1$ - GridLayout layout= new GridLayout(); - layout.numColumns= 3; - fPatchFileGroup.setLayout(layout); - fPatchFileGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - // 1st row - fUsePatchFileButton= new Button(fPatchFileGroup, SWT.RADIO); - fUsePatchFileButton.setText(PatchMessages.getString("InputPatchPage.FileButton.text")); //$NON-NLS-1$ - - fPatchFileNameField= new Combo(fPatchFileGroup, SWT.BORDER); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - //gd.horizontalIndent= 8; - gd.widthHint= SIZING_TEXT_FIELD_WIDTH; - fPatchFileNameField.setLayoutData(gd); - - fPatchFileBrowseButton= new Button(fPatchFileGroup, SWT.PUSH); - fPatchFileBrowseButton.setText(PatchMessages.getString("InputPatchPage.ChooseFileButton.text")); //$NON-NLS-1$ - fPatchFileBrowseButton.setLayoutData(new GridData()); - - // 2nd row - fUseClipboardButton= new Button(fPatchFileGroup, SWT.RADIO); - fUseClipboardButton.setText(PatchMessages.getString("InputPatchPage.UseClipboardButton.text")); //$NON-NLS-1$ - gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - gd.horizontalSpan= 2; - fUseClipboardButton.setLayoutData(gd); - - - // Add listeners - fUsePatchFileButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - fShowError= true; - setEnablePatchFile(!getUseClipboard()); - updateWidgetEnablements(); - } - } - ); - fPatchFileNameField.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - setSourceName(fPatchFileNameField.getText()); - updateWidgetEnablements(); - } - } - ); - fPatchFileNameField.addModifyListener( - new ModifyListener() { - public void modifyText(ModifyEvent e) { - fShowError= true; - updateWidgetEnablements(); - } - } - ); - fPatchFileBrowseButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - handlePatchFileBrowseButtonPressed(); - updateWidgetEnablements(); - } - } - ); - - //fPatchFileNameField.setFocus(); - } - - private void buildInputGroup(Composite parent) { - - PatchWizard pw= (PatchWizard) getWizard(); - IResource target= pw.getTarget(); - IWorkspace workspace= target.getWorkspace(); - IWorkspaceRoot root= workspace.getRoot(); - - Tree tree= new Tree(parent, SWT.BORDER); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint= 200; - tree.setLayoutData(gd); - - fPatchTargets= new CheckboxTreeViewer(tree); - fPatchTargets.setLabelProvider(new WorkbenchLabelProvider()); - fPatchTargets.setContentProvider(new WorkbenchContentProvider()); - fPatchTargets.setSorter(new WorkbenchViewerSorter()); - fPatchTargets.setInput(root); - if (target != null) { - fPatchTargets.expandToLevel(target, 0); - fPatchTargets.setSelection(new StructuredSelection(target)); - } - - // register listeners - fPatchTargets.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - fPatchWizard.setTargets(PatchWizard.getResource(event.getSelection())); - updateWidgetEnablements(); - } - } - ); - } - - /** - * Updates the enable state of this page's controls. - */ - private void updateWidgetEnablements() { - - String error= null; - - ISelection selection= fPatchTargets.getSelection(); - boolean anySelected= selection != null && !selection.isEmpty(); - if (!anySelected) - error= PatchMessages.getString("InputPatchPage.NothingSelected.message"); //$NON-NLS-1$ - - boolean gotPatch= false; - if (getUseClipboard()) { - Control c= getControl(); - if (c != null) { - Clipboard clipboard= new Clipboard(c.getDisplay()); - Object o= clipboard.getContents(TextTransfer.getInstance()); - clipboard.dispose(); - if (o instanceof String) { - String s= ((String) o).trim(); - if (s.length() > 0) - gotPatch= true; - else - error= PatchMessages.getString("InputPatchPage.ClipboardIsEmpty.message"); //$NON-NLS-1$ - } else - error= PatchMessages.getString("InputPatchPage.NoTextInClipboard.message"); //$NON-NLS-1$ - } else - error= PatchMessages.getString("InputPatchPage.CouldNotReadClipboard.message"); //$NON-NLS-1$ - } else { - String path= fPatchFileNameField.getText(); - if (path != null && path.length() > 0) { - File file= new File(path); - gotPatch= file.exists() && file.isFile() && file.length() > 0; - if (!gotPatch) - error= PatchMessages.getString("InputPatchPage.CannotLocatePatch.message") + path; //$NON-NLS-1$ - } else { - error= PatchMessages.getString("InputPatchPage.NoFileName.message"); //$NON-NLS-1$ - } - } - - setPageComplete(anySelected && gotPatch); - if (fShowError) - setErrorMessage(error); - } - - protected void handlePatchFileBrowseButtonPressed() { - FileDialog dialog= new FileDialog(getShell(), SWT.NONE); - dialog.setText(PatchMessages.getString("InputPatchPage.SelectPatchFileDialog.title")); //$NON-NLS-1$ - dialog.setFilterPath(getPatchFilePath()); - String res= dialog.open(); - if (res == null) - return; - - String patchFilePath= dialog.getFileName(); - IPath filterPath= new Path(dialog.getFilterPath()); - IPath path= filterPath.append(patchFilePath).makeAbsolute(); - patchFilePath= path.toOSString(); - //fDialogSettings.put(IUIConstants.DIALOGSTORE_LASTEXTJAR, filterPath.toOSString()); - - fPatchFileNameField.setText(patchFilePath); - //setSourceName(patchFilePath); - } - - /** - * Sets the source name of the import to be the supplied path. - * Adds the name of the path to the list of items in the - * source combo and selects it. - * - * @param path the path to be added - */ - protected void setSourceName(String path) { - - if (path.length() > 0) { - - String[] currentItems= fPatchFileNameField.getItems(); - int selectionIndex= -1; - for (int i= 0; i < currentItems.length; i++) - if (currentItems[i].equals(path)) - selectionIndex= i; - - if (selectionIndex < 0) { // not found in history - int oldLength= currentItems.length; - String[] newItems= new String[oldLength + 1]; - System.arraycopy(currentItems, 0, newItems, 0, oldLength); - newItems[oldLength]= path; - fPatchFileNameField.setItems(newItems); - selectionIndex= oldLength; - } - fPatchFileNameField.select(selectionIndex); - - //resetSelection(); - } - } - - /** - * The Finish button was pressed. Try to do the required work now and answer - * a boolean indicating success. If false is returned then the wizard will - * not close. - * - * @return boolean - */ - public boolean finish() { -// if (!ensureSourceIsValid()) -// return false; - - saveWidgetValues(); - -// Iterator resourcesEnum = getSelectedResources().iterator(); -// List fileSystemObjects = new ArrayList(); -// while (resourcesEnum.hasNext()) { -// fileSystemObjects.add( -// ((FileSystemElement) resourcesEnum.next()).getFileSystemObject()); -// } -// -// if (fileSystemObjects.size() > 0) -// return importResources(fileSystemObjects); -// -// MessageDialog -// .openInformation( -// getContainer().getShell(), -// DataTransferMessages.getString("DataTransfer.information"), //$NON-NLS-1$ -// DataTransferMessages.getString("FileImport.noneSelected")); //$NON-NLS-1$ -// -// return false; - - return true; - } - - /** - * Use the dialog store to restore widget values to the values that they held - * last time this wizard was used to completion - */ - private void restoreWidgetValues() { - - boolean useClipboard= false; - - IDialogSettings settings= getDialogSettings(); - if (settings != null) { - - useClipboard= settings.getBoolean(STORE_USE_CLIPBOARD_ID); - - // set filenames history - String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID); - if (sourceNames != null) - for (int i= 0; i < sourceNames.length; i++) - if (sourceNames[i] != null && sourceNames[i].length() > 0) - fPatchFileNameField.add(sourceNames[i]); - - // set patch file path - String patchFilePath= settings.get(STORE_PATCH_FILES_ID); - if (patchFilePath != null) - setSourceName(patchFilePath); - } - - // set 'Use Clipboard' radio buttons - setUseClipboard(useClipboard); - } - - /** - * Since Finish was pressed, write widget values to the dialog store so that they - * will persist into the next invocation of this wizard page - */ - void saveWidgetValues() { - IDialogSettings settings= getDialogSettings(); - if (settings != null) { - - settings.put(STORE_USE_CLIPBOARD_ID, getUseClipboard()); - settings.put(STORE_PATCH_FILES_ID, getPatchFilePath()); - - // update source names history - String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID); - if (sourceNames == null) - sourceNames= new String[0]; - - sourceNames= addToHistory(sourceNames, getPatchFilePath()); - settings.put(STORE_PATCH_FILES_ID, sourceNames); - } - } - - // static helpers - - private void setUseClipboard(boolean useClipboard) { - if (useClipboard) - fUseClipboardButton.setSelection(true); - else - fUsePatchFileButton.setSelection(true); - setEnablePatchFile(!useClipboard); - } - - private boolean getUseClipboard() { - if (fUseClipboardButton != null) - return fUseClipboardButton.getSelection(); - return false; - } - - private String getPatchFilePath() { - if (fPatchFileNameField != null) - return fPatchFileNameField.getText(); - return ""; //$NON-NLS-1$ - } - - /** - * Adds an entry to a history, while taking care of duplicate history items - * and excessively long histories. The assumption is made that all histories - * should be of length <code>COMBO_HISTORY_LENGTH</code>. - * - * @param history the current history - * @param newEntry the entry to add to the history - */ - protected static String[] addToHistory(String[] history, String newEntry) { - java.util.ArrayList l= new java.util.ArrayList(java.util.Arrays.asList(history)); - - l.remove(newEntry); - l.add(0,newEntry); - - // since only one new item was added, we can be over the limit - // by at most one item - if (l.size() > COMBO_HISTORY_LENGTH) - l.remove(COMBO_HISTORY_LENGTH); - - return (String[]) l.toArray(new String[l.size()]); - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java deleted file mode 100644 index 33b9ca582..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.util.*; - -import org.eclipse.jface.util.Assert; - -/* package */ class LineReader { - - private boolean fHaveChar= false; - private int fLastChar; - private boolean fSawEOF= false; - private BufferedReader fReader; - private boolean fIgnoreSingleCR= false; - - - /* package */ LineReader(BufferedReader reader) { - fReader= reader; - Assert.isNotNull(reader); - } - - void ignoreSingleCR() { - fIgnoreSingleCR= true; - } - - /** - * Reads a line of text. A line is considered to be terminated by any one - * of a line feed ('\n'), a carriage return ('\r'), or a carriage return - * followed immediately by a linefeed. - * @return A string containing the contents of the line including - * the line-termination characters, or <code>null</code> if the end of the - * stream has been reached - * @exception IOException If an I/O error occurs - */ - /* package */ String readLine() throws IOException { - StringBuffer sb= null; - - while (!fSawEOF) { - int c= readChar(); - if (c == -1) { - fSawEOF= true; - break; - } - if (sb == null) - sb= new StringBuffer(); - sb.append((char)c); - if (c == '\n') - break; - if (c == '\r') { - c= readChar(); - if (c == -1) { - fSawEOF= true; - break; // EOF - } - if (c != '\n') { - if (fIgnoreSingleCR) { - sb.append((char)c); - continue; - } else { - fHaveChar= true; - fLastChar= c; - } - } else - sb.append((char)c); - break; - } - } - - if (sb != null) - return sb.toString(); - return null; - } - - /* package */ void close() { - try { - fReader.close(); - } catch (IOException ex) { - } - } - - /* package */ List readLines() { - try { - List lines= new ArrayList(); - String line; - while ((line= readLine()) != null) - lines.add(line); - return lines; - } catch (IOException ex) { - //System.out.println("error while reading file: " + fileName + "(" + ex + ")"); - } finally { - close(); - } - return null; - } - /** - * Returns the number of characters in the given string without - * counting a trailing line separator. - */ - /* package */ int lineContentLength(String line) { - if (line == null) - return 0; - int length= line.length(); - for (int i= length-1; i >= 0; i--) { - char c= line.charAt(i); - if (c =='\n' || c == '\r') - length--; - else - break; - } - return length; - } - - //---- private - - private int readChar() throws IOException { - if (fHaveChar) { - fHaveChar= false; - return fLastChar; - } - return fReader.read(); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java deleted file mode 100644 index c4aee6382..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -public class PatchErrorDialog { - - private PatchErrorDialog() { - // no instance. - } - -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java deleted file mode 100644 index 569b875f6..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class PatchMessages { - - private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.patch.PatchMessages";//$NON-NLS-1$ - - private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); - - private PatchMessages() { - } - - public static String getString(String key) { - try { - return fgResourceBundle.getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties deleted file mode 100644 index 20c86331f..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties +++ /dev/null @@ -1,90 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# -# 'Compare with Patch' Action -# -PatchAction.ExceptionTitle=Saving Resources -PatchAction.Exception=Unexpected exception. See log for details -PatchAction.SavingDirtyEditorsTask=Saving dirty editors -PatchAction.AlwaysSaveQuestion=&Always save all modified resources automatically prior to patching -PatchAction.SaveAllQuestion=Save all modified resources -PatchAction.SaveAllDescription=All modified resources have to be saved before this operation.\nClick 'OK' to confirm or click 'Cancel'. - -# -# PatchWizard -# -PatchWizard.title=Apply Patch -PatchWizard.unexpectedException.message= Unexpected exception while applying the patch. See log for a detailed error description. - -# -# InputPatchPage -# -InputPatchPage.title= Patch Input Specification -InputPatchPage.message= Define the resource to patch and the patch to apply -InputPatchPage.Clipboard=Clipboard -InputPatchPage.SelectInput=Select a single file or folder to patch: -InputPatchPage.PatchErrorDialog.title=Patch Error -InputPatchPage.PatchErrorDialog=Patch Error -InputPatchPage.SelectPatch.title=Select Patch -InputPatchPage.FileButton.text=Fil&e -InputPatchPage.ChooseFileButton.text=&Browse... -InputPatchPage.UseClipboardButton.text=&Clipboard -InputPatchPage.NothingSelected.message=Select a file or folder to be patched -InputPatchPage.ClipboardIsEmpty.message=Clipboard is empty -InputPatchPage.NoTextInClipboard.message=Clipboard does not contain text -InputPatchPage.CouldNotReadClipboard.message=Couldn't retrieve clipboard contents -InputPatchPage.CannotLocatePatch.message=Can't locate patch file: -InputPatchPage.NoFileName.message=No file name -InputPatchPage.SelectPatchFileDialog.title=Select Patch File -InputPatchPage.PatchFileNotFound.message=Patch file not found. -InputPatchPage.ParseError.message=Error while parsing patch -InputPatchPage.Clipboard.title=Clipboard -InputPatchPage.PatchFile.title=Patch file -InputPatchPage.NoDiffsFound.format={0} does not contain valid patch. -InputPatchPage.SingleFileError.format={0} contains multiple patches. You cannot apply them to a single file. - -# -# PreviewPatchPage -# -PreviewPatchPage.title= Verify Patch -PreviewPatchPage.message= The tree shows the contents of the patch.\nA checked item indicates that a patch can be applied successfully. To remove an item, clear its checkbox. -PreviewPatchPage.Left.title= Original -PreviewPatchPage.Right.title= Result -PreviewPatchPage.PatchOptions.title=Patch Options -PreviewPatchPage.IgnoreSegments.text=&Ignore leading path name segments: -PreviewPatchPage.ReversePatch.text=&Reverse patch -PreviewPatchPage.FuzzFactor.text=&Maximum fuzz factor: -PreviewPatchPage.FuzzFactor.tooltip=Allow context to shift this number of lines from the original place -PreviewPatchPage.IgnoreWhitespace.text=Ignore &white space -PreviewPatchPage.NoName.text=no name -PreviewPatchPage.FileExists.error=(file already exists) -PreviewPatchPage.FileDoesNotExist.error=(file doesn't exist) -PreviewPatchPage.NoMatch.error=(no match) -PreviewPatchPage.FileIsReadOnly.error=(file is read only) -PreviewPatchPage.GuessFuzz.text= &Guess -PreviewPatchPage.GuessFuzzProgress.text= Guessing Fuzz Factor... -PreviewPatchPage.GuessFuzzProgress.format= {0} (hunk #{1}) - -# -# Patcher -# -Patcher.ErrorDialog.title=title -Patcher.DeleteError.message=Error while deleting resource -Patcher.UpdateError.message=Error while updating resource -Patcher.RefreshError.message=Error while refreshing from local -Patcher.Marker.message=Rejected patch -Patcher.Task.message=Patching - -# -# PatchCompareInput -# -PatchCompareInput.RightTitle.format= Patch: {0} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java deleted file mode 100644 index 52ad23e2d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; - -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.Wizard; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -import org.eclipse.compare.internal.*; - - -/* package */ class PatchWizard extends Wizard { - - // dialog store id constants - private final static String DIALOG_SETTINGS_KEY= "PatchWizard"; //$NON-NLS-1$ - - private boolean fHasNewDialogSettings; - - private InputPatchPage fPatchWizardPage; - private PreviewPatchPage fPreviewPatchPage; - - private Patcher fPatcher; - private IResource fTarget; - - - /** - * Creates a wizard for applying a patch file to the workspace. - */ - /* package */ PatchWizard(ISelection selection) { - - setTargets(getResource(selection)); - - fPatcher= new Patcher(); - - setWindowTitle(PatchMessages.getString("PatchWizard.title")); //$NON-NLS-1$ - - IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings(); - IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY); //$NON-NLS-1$ - if (section == null) - fHasNewDialogSettings= true; - else { - fHasNewDialogSettings= false; - setDialogSettings(section); - } - } - - static IResource[] getResource(ISelection selection) { - IResource[] rs= Utilities.getResources(selection); - ArrayList list= null; - for (int i= 0; i < rs.length; i++) { - IResource r= rs[i]; - if (r != null && r.isAccessible()) { - if (list == null) - list= new ArrayList(); - list.add(r); - } - } - if (list != null && list.size() > 0) - return (IResource[]) list.toArray(new IResource[list.size()]); - return null; - } - - Patcher getPatcher() { - return fPatcher; - } - - IResource getTarget() { - return fTarget; - } - - void setTargets(IResource[] targets) { - if (targets != null) - fTarget= targets[0]; // right now we can only deal with a single selection - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public void addPages() { - super.addPages(); - - addPage(fPatchWizardPage= new InputPatchPage(this)); - addPage(fPreviewPatchPage= new PreviewPatchPage(this)); - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public boolean needsProgressMonitor() { - return true; - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public boolean performFinish() { - - fPatcher.setName(fPatchWizardPage.getPatchName()); - - try { - WorkspaceModifyOperation op= new WorkspaceModifyOperation() { - protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - fPatcher.applyAll(getTarget(), monitor); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } - } - }; - getContainer().run(true, false, op); - - } catch (InvocationTargetException e) { - ExceptionHandler.handle(e, - PatchMessages.getString("PatchWizard.title"), //$NON-NLS-1$ - PatchMessages.getString("PatchWizard.unexpectedException.message")); //$NON-NLS-1$ - } catch (InterruptedException e) { - // cannot happen - } - - // Save the dialog settings - if (fHasNewDialogSettings) { - IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings(); - IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY); - section= workbenchSettings.addNewSection(DIALOG_SETTINGS_KEY); - setDialogSettings(section); - } - - fPatchWizardPage.saveWidgetValues(); - //fPreviewPatchPage.saveWidgetValues(); - - return true; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java deleted file mode 100644 index df071917e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java +++ /dev/null @@ -1,1055 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.text.*; -import java.util.*; - -import org.eclipse.swt.SWT; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.*; -import org.eclipse.core.resources.*; - -import org.eclipse.compare.structuremergeviewer.Differencer; - -/** - * A Patcher - * - knows how to parse various patch file formats into some in-memory structure, - * - holds onto the parsed data and the options to use when applying the patches, - * - knows how to apply the patches to files and folders. - */ -public class Patcher { - - private static final boolean DEBUG= false; - - private static final String DEV_NULL= "/dev/null"; //$NON-NLS-1$ - - private static final String REJECT_FILE_EXTENSION= ".rej"; //$NON-NLS-1$ - - private static final String MARKER_TYPE= "org.eclipse.compare.rejectedPatchMarker"; //$NON-NLS-1$ - - // diff formats -// private static final int CONTEXT= 0; -// private static final int ED= 1; -// private static final int NORMAL= 2; -// private static final int UNIFIED= 3; - - // we recognize the following date/time formats - private static DateFormat[] DATE_FORMATS= new DateFormat[] { - new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy"), //$NON-NLS-1$ - new SimpleDateFormat("yyyy/MM/dd kk:mm:ss"), //$NON-NLS-1$ - new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy", Locale.US) //$NON-NLS-1$ - }; - - private String fName; - private Diff[] fDiffs; - // patch options - private int fStripPrefixSegments; - private int fFuzz; - private boolean fIgnoreWhitespace= false; - private boolean fIgnoreLineDelimiter= true; - private boolean fPreserveLineDelimiters= false; - private boolean fReverse= false; - private boolean fAdjustShift= true; - - - Patcher() { - } - - //---- options - - void setName(String name) { - fName= name; - } - - String getName() { - return fName; - } - - /** - * Returns an array of Diffs after a sucessfull call to <code>parse</code>. - * If <code>parse</code> hasn't been called returns <code>null</code>. - */ - Diff[] getDiffs() { - return fDiffs; - } - - IPath getPath(Diff diff) { - IPath path= diff.getPath(); - if (fStripPrefixSegments > 0 && fStripPrefixSegments < path.segmentCount()) - path= path.removeFirstSegments(fStripPrefixSegments); - return path; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setStripPrefixSegments(int strip) { - if (strip != fStripPrefixSegments) { - fStripPrefixSegments= strip; - return true; - } - return false; - } - - int getStripPrefixSegments() { - return fStripPrefixSegments; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setFuzz(int fuzz) { - if (fuzz != fFuzz) { - fFuzz= fuzz; - return true; - } - return false; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setReversed(boolean reverse) { - if (fReverse != reverse) { - fReverse= reverse; - - for (int i= 0; i < fDiffs.length; i++) - fDiffs[i].reverse(); - - return true; - } - return false; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setIgnoreWhitespace(boolean ignoreWhitespace) { - if (ignoreWhitespace != fIgnoreWhitespace) { - fIgnoreWhitespace= ignoreWhitespace; - return true; - } - return false; - } - - //---- parsing patch files - - /* package */ void parse(BufferedReader reader) throws IOException { - List diffs= new ArrayList(); - String line= null; - boolean reread= false; - String diffArgs= null; - String fileName= null; - - LineReader lr= new LineReader(reader); - if (!"carbon".equals(SWT.getPlatform())) //$NON-NLS-1$ - lr.ignoreSingleCR(); - - // read leading garbage - while (true) { - if (!reread) - line= lr.readLine(); - reread= false; - if (line == null) - break; - if (line.length() < 4) - continue; // too short - - // remember some infos - if (line.startsWith("Index: ")) { //$NON-NLS-1$ - fileName= line.substring(7).trim(); - continue; - } - if (line.startsWith("diff")) { //$NON-NLS-1$ - diffArgs= line.substring(4).trim(); - continue; - } - - if (line.startsWith("--- ")) { //$NON-NLS-1$ - line= readUnifiedDiff(diffs, lr, line, diffArgs, fileName); - diffArgs= fileName= null; - reread= true; - } else if (line.startsWith("*** ")) { //$NON-NLS-1$ - line= readContextDiff(diffs, lr, line, diffArgs, fileName); - diffArgs= fileName= null; - reread= true; - } - } - - lr.close(); - - fDiffs= (Diff[]) diffs.toArray((Diff[]) new Diff[diffs.size()]); - } - - /** - * Returns the next line that does not belong to this diff - */ - private String readUnifiedDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException { - - String[] oldArgs= split(line.substring(4)); - - // read info about new file - line= reader.readLine(); - if (line == null || !line.startsWith("+++ ")) //$NON-NLS-1$ - return line; - - String[] newArgs= split(line.substring(4)); - - Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1), - extractPath(newArgs, 0, fileName), extractDate(newArgs, 1)); - diffs.add(diff); - - int[] oldRange= new int[2]; - int[] newRange= new int[2]; - List lines= new ArrayList(); - - try { - // read lines of hunk - while (true) { - - line= reader.readLine(); - if (line == null) - return null; - - if (reader.lineContentLength(line) == 0) { - //System.out.println("Warning: found empty line in hunk; ignored"); - //lines.add(' ' + line); - continue; - } - - char c= line.charAt(0); - switch (c) { - case '@': - if (line.startsWith("@@ ")) { //$NON-NLS-1$ - // flush old hunk - if (lines.size() > 0) { - new Hunk(diff, oldRange, newRange, lines); - lines.clear(); - } - - // format: @@ -oldStart,oldLength +newStart,newLength @@ - extractPair(line, '-', oldRange); - extractPair(line, '+', newRange); - continue; - } - break; - case ' ': - case '+': - case '-': - lines.add(line); - continue; - case '\\': - if (line.startsWith("No newline at end of file", 2)) { //$NON-NLS-1$ - int lastIndex= lines.size(); - if (lastIndex > 0) { - line= (String) lines.get(lastIndex-1); - int end= line.length()-1; - char lc= line.charAt(end); - if (lc == '\n') { - end--; - if (end > 0 && line.charAt(end-1) == '\r') - end--; - } else if (lc == '\r') { - end--; - } - line= line.substring(0, end); - lines.set(lastIndex-1, line); - } - continue; - } - break; - default: - if (DEBUG) { - int a1= c, a2= 0; - if (line.length() > 1) - a2= line.charAt(1); - System.out.println("char: " + a1 + " " + a2); //$NON-NLS-1$ //$NON-NLS-2$ - } - break; - } - return line; - } - } finally { - if (lines.size() > 0) - new Hunk(diff, oldRange, newRange, lines); - diff.finish(); - } - } - - /** - * Returns the next line that does not belong to this diff - */ - private String readContextDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException { - - String[] oldArgs= split(line.substring(4)); - - // read info about new file - line= reader.readLine(); - if (line == null || !line.startsWith("--- ")) //$NON-NLS-1$ - return line; - - String[] newArgs= split(line.substring(4)); - - Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1), - extractPath(newArgs, 0, fileName), extractDate(newArgs, 1)); - diffs.add(diff); - - int[] oldRange= new int[2]; - int[] newRange= new int[2]; - List oldLines= new ArrayList(); - List newLines= new ArrayList(); - List lines= oldLines; - - try { - // read lines of hunk - while (true) { - - line= reader.readLine(); - if (line == null) - return line; - - int l= line.length(); - if (l == 0) - continue; - if (l > 1) { - switch (line.charAt(0)) { - case '*': - if (line.startsWith("***************")) { // new hunk //$NON-NLS-1$ - // flush old hunk - if (oldLines.size() > 0 || newLines.size() > 0) { - new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines)); - oldLines.clear(); - newLines.clear(); - } - continue; - } - if (line.startsWith("*** ")) { // old range //$NON-NLS-1$ - // format: *** oldStart,oldEnd *** - extractPair(line, ' ', oldRange); - oldRange[1]= oldRange[1]-oldRange[0]+1; - lines= oldLines; - continue; - } - break; - case ' ': // context line - case '+': // addition - case '!': // change - if (line.charAt(1) == ' ') { - lines.add(line); - continue; - } - break; - case '-': - if (line.charAt(1) == ' ') { // deletion - lines.add(line); - continue; - } - if (line.startsWith("--- ")) { // new range //$NON-NLS-1$ - // format: *** newStart,newEnd *** - extractPair(line, ' ', newRange); - newRange[1]= newRange[1]-newRange[0]+1; - lines= newLines; - continue; - } - break; - default: - break; - } - } - return line; - } - } finally { - // flush last hunk - if (oldLines.size() > 0 || newLines.size() > 0) - new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines)); - diff.finish(); - } - } - - /** - * Creates a List of lines in the unified format from - * two Lists of lines in the 'classic' format. - */ - private List unifyLines(List oldLines, List newLines) { - List result= new ArrayList(); - - String[] ol= (String[]) oldLines.toArray(new String[oldLines.size()]); - String[] nl= (String[]) newLines.toArray(new String[newLines.size()]); - - int oi= 0, ni= 0; - - while (true) { - - char oc= 0; - String o= null; - if (oi < ol.length) { - o= ol[oi]; - oc= o.charAt(0); - } - - char nc= 0; - String n= null; - if (ni < nl.length) { - n= nl[ni]; - nc= n.charAt(0); - } - - // EOF - if (oc == 0 && nc == 0) - break; - - // deletion in old - if (oc == '-') { - do { - result.add('-' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == '-'); - continue; - } - - // addition in new - if (nc == '+') { - do { - result.add('+' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == '+'); - continue; - } - - // differing lines on both sides - if (oc == '!' && nc == '!') { - // remove old - do { - result.add('-' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == '!'); - - // add new - do { - result.add('+' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == '!'); - - continue; - } - - // context lines - if (oc == ' ' && nc == ' ') { - do { - Assert.isTrue(o.equals(n), "non matching context lines"); //$NON-NLS-1$ - result.add(' ' + o.substring(2)); - oi++; - ni++; - if (oi >= ol.length || ni >= nl.length) - break; - o= ol[oi]; - n= nl[ni]; - } while (o.charAt(0) == ' ' && n.charAt(0) == ' '); - continue; - } - - if (oc == ' ') { - do { - result.add(' ' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == ' '); - continue; - } - - if (nc == ' ') { - do { - result.add(' ' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == ' '); - continue; - } - - Assert.isTrue(false, "unexpected char <" + oc + "> <" + nc + ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - return result; - } - - /** - * Breaks the given string into tab separated substrings. - * Leading and trailing whitespace is removed from each token. - */ - private String[] split(String line) { - List l= new ArrayList(); - StringTokenizer st= new StringTokenizer(line, "\t"); //$NON-NLS-1$ - while (st.hasMoreElements()) { - String token= st.nextToken().trim(); - if (token.length() > 0) - l.add(token); - } - return (String[]) l.toArray(new String[l.size()]); - } - - /** - * @return the parsed time/date in milliseconds or -1 on error - */ - private long extractDate(String[] args, int n) { - if (n < args.length) { - String line= args[n]; - for (int i= 0; i < DATE_FORMATS.length; i++) { - DATE_FORMATS[i].setLenient(true); - try { - Date date= DATE_FORMATS[i].parse(line); - return date.getTime(); - } catch (ParseException ex) { - } - } - // System.err.println("can't parse date: <" + line + ">"); - } - return -1; - } - - /** - * Returns null if file name is "/dev/null". - */ - private IPath extractPath(String[] args, int n, String path2) { - if (n < args.length) { - String path= args[n]; - if (DEV_NULL.equals(path)) - return null; - int pos= path.lastIndexOf(':'); - if (pos >= 0) - path= path.substring(0, pos); - if (path2 != null && !path2.equals(path)) { - if (DEBUG) System.out.println("path mismatch: " + path2); //$NON-NLS-1$ - path= path2; - } - return new Path(path); - } - return null; - } - - /** - * Tries to extract two integers separated by a comma. - * The parsing of the line starts at the position after - * the first occurrence of the given character start an ends - * at the first blank (or the end of the line). - * If only a single number is found this is assumed to be the length of the range. - * In this case the start of the range is set to 1. - * If an error occurs the range -1,-1 is returned. - */ - private void extractPair(String line, char start, int[] pair) { - pair[0]= pair[1]= -1; - int startPos= line.indexOf(start); - if (startPos < 0) { - if (DEBUG) System.out.println("parsing error in extractPair: couldn't find \'" + start + "\'"); //$NON-NLS-1$ //$NON-NLS-2$ - return; - } - line= line.substring(startPos+1); - int endPos= line.indexOf(' '); - if (endPos < 0) { - if (DEBUG) System.out.println("parsing error in extractPair: couldn't find end blank"); //$NON-NLS-1$ - return; - } - line= line.substring(0, endPos); - int comma= line.indexOf(','); - if (comma >= 0) { - pair[0]= Integer.parseInt(line.substring(0, comma)); - pair[1]= Integer.parseInt(line.substring(comma+1)); - } else { - pair[0]= 1; - pair[1]= Integer.parseInt(line.substring(comma+1)); - } - } - - //---- applying a patch file - - /** - * Tries to patch the given lines with the specified Diff. - * Any hunk that couldn't be applied is returned in the list failedHunks. - */ - /* package */ void patch(Diff diff, List lines, List failedHunks) { - - int shift= 0; - Iterator iter= diff.fHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - hunk.fMatches= false; - shift= patch(hunk, lines, shift, failedHunks); - } - } - - /** - * Tries to apply the specified hunk to the given lines. - * If the hunk cannot be applied at the original position - * the methods tries Fuzz lines before and after. - * If this fails the Hunk is added to the given list of failed hunks. - */ - private int patch(Hunk hunk, List lines, int shift, List failedHunks) { - if (tryPatch(hunk, lines, shift)) { - shift+= doPatch(hunk, lines, shift); - } else { - boolean found= false; - int oldShift= shift; - - for (int i= 1; i <= fFuzz; i++) { - if (tryPatch(hunk, lines, shift-i)) { - if (fAdjustShift) - shift-= i; - found= true; - break; - } - } - - if (! found) { - for (int i= 1; i <= fFuzz; i++) { - if (tryPatch(hunk, lines, shift+i)) { - if (fAdjustShift) - shift+= i; - found= true; - break; - } - } - } - - if (found) { - if (DEBUG) System.out.println("patched hunk at offset: " + (shift-oldShift)); //$NON-NLS-1$ - shift+= doPatch(hunk, lines, shift); - } else { - if (failedHunks != null) { - if (DEBUG) System.out.println("failed hunk"); //$NON-NLS-1$ - failedHunks.add(hunk); - } - } - } - return shift; - } - - /** - * Tries to apply the given hunk on the specified lines. - * The parameter shift is added to the line numbers given - * in the hunk. - */ - private boolean tryPatch(Hunk hunk, List lines, int shift) { - int pos= hunk.fOldStart + shift; - //int contextMatches= 0; - int deleteMatches= 0; - for (int i= 0; i < hunk.fLines.length; i++) { - String s= hunk.fLines[i]; - Assert.isTrue(s.length() > 0); - String line= s.substring(1); - char controlChar= s.charAt(0); - if (controlChar == ' ') { // context lines - while (true) { - if (pos < 0 || pos >= lines.size()) - return false; - if (linesMatch(line, (String) lines.get(pos))) { - //contextMatches++; - pos++; - break; - } - //if (contextMatches <= 0) - return false; - //pos++; - } - } else if (controlChar == '-') { - // deleted lines - while (true) { - if (pos < 0 || pos >= lines.size()) - return false; - if (linesMatch(line, (String) lines.get(pos))) { - deleteMatches++; - pos++; - break; - } - if (deleteMatches <= 0) - return false; - pos++; - } - } else if (controlChar == '+') { - // added lines - // we don't have to do anything for a 'try' - } else - Assert.isTrue(false, "tryPatch: unknown control charcter: " + controlChar); //$NON-NLS-1$ - } - return true; - } - - private int doPatch(Hunk hunk, List lines, int shift) { - int pos= hunk.fOldStart + shift; - for (int i= 0; i < hunk.fLines.length; i++) { - String s= hunk.fLines[i]; - Assert.isTrue(s.length() > 0); - String line= s.substring(1); - char controlChar= s.charAt(0); - if (controlChar == ' ') { // context lines - while (true) { - Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in context"); //$NON-NLS-1$ - if (linesMatch(line, (String) lines.get(pos))) { - pos++; - break; - } - pos++; - } - } else if (controlChar == '-') { - // deleted lines - while (true) { - Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in deleted lines"); //$NON-NLS-1$ - if (linesMatch(line, (String) lines.get(pos))) { - break; - } - pos++; - } - lines.remove(pos); - } else if (controlChar == '+') { - // added lines - lines.add(pos, line); - pos++; - } else - Assert.isTrue(false, "doPatch: unknown control character: " + controlChar); //$NON-NLS-1$ - } - hunk.fMatches= true; - return hunk.fNewLength - hunk.fOldLength; - } - - public void applyAll(IResource target, IProgressMonitor pm) throws CoreException { - - final int WORK_UNIT= 10; - - IFile singleFile= null; // file to be patched - IContainer container= null; - if (target instanceof IContainer) - container= (IContainer) target; - else if (target instanceof IFile) { - singleFile= (IFile) target; - container= singleFile.getParent(); - } else { - Assert.isTrue(false); - } - - if (pm != null) { - String message= PatchMessages.getString("Patcher.Task.message"); //$NON-NLS-1$ - pm.beginTask(message, fDiffs.length*WORK_UNIT); - } - - for (int i= 0; i < fDiffs.length; i++) { - - int workTicks= WORK_UNIT; - - Diff diff= fDiffs[i]; - if (diff.isEnabled()) { - - IPath path= getPath(diff); - if (pm != null) - pm.subTask(path.toString()); - - IFile file= singleFile != null - ? singleFile - : createPath(container, path); - - List failed= new ArrayList(); - List result= null; - - int type= diff.getType(); - switch (type) { - case Differencer.ADDITION: - // patch it and collect rejected hunks - result= apply(diff, file, true, failed); - store(createString(result), file, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - case Differencer.DELETION: - file.delete(true, true, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - case Differencer.CHANGE: - // patch it and collect rejected hunks - result= apply(diff, file, false, failed); - store(createString(result), file, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - } - - if (failed.size() > 0) { - IPath pp= null; - if (path.segmentCount() > 1) { - pp= path.removeLastSegments(1); - pp= pp.append(path.lastSegment() + REJECT_FILE_EXTENSION); - } else - pp= new Path(path.lastSegment() + REJECT_FILE_EXTENSION); - file= createPath(container, pp); - if (file != null) { - store(getRejected(failed), file, pm); - try { - IMarker marker= file.createMarker(MARKER_TYPE); - marker.setAttribute(IMarker.MESSAGE, PatchMessages.getString("Patcher.Marker.message")); //$NON-NLS-1$ - marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH); - } catch (CoreException ex) { - } - } - } - } - - if (pm != null) { - if (pm.isCanceled()) - break; - if (workTicks > 0) - pm.worked(workTicks); - } - } - } - - /** - * Reads the contents from the given file and returns them as - * a List of lines. - */ - List load(IFile file, boolean create) { - List lines= null; - if (!create && file != null) { - // read current contents - InputStream is= null; - try { - is= file.getContents(); - - Reader streamReader= null; - try { - streamReader= new InputStreamReader(is, ResourcesPlugin.getEncoding()); - } catch (UnsupportedEncodingException x) { - // use default encoding - streamReader= new InputStreamReader(is); - } - - BufferedReader reader= new BufferedReader(streamReader); - LineReader lr= new LineReader(reader); - if (!"carbon".equals(SWT.getPlatform())) //$NON-NLS-1$ - lr.ignoreSingleCR(); - lines= lr.readLines(); - } catch(CoreException ex) { - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - } - } - } - - if (lines == null) - lines= new ArrayList(); - return lines; - } - - List apply(Diff diff, IFile file, boolean create, List failedHunks) { - List lines= load(file, create); - patch(diff, lines, failedHunks); - return lines; - } - - /** - * Converts the string into bytes and stores them in the given file. - */ - private void store(String contents, IFile file, IProgressMonitor pm) throws CoreException { - - byte[] bytes; - try { - bytes= contents.getBytes(ResourcesPlugin.getEncoding()); - } catch (UnsupportedEncodingException x) { - // uses default encoding - bytes= contents.getBytes(); - } - - InputStream is= new ByteArrayInputStream(bytes); - try { - if (file.exists()) { - file.setContents(is, false, true, pm); - } else { - file.create(is, false, pm); - } - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - } - } - } - - /** - * Concatenates all strings found in the given List. - */ - private String createString(List lines) { - StringBuffer sb= new StringBuffer(); - Iterator iter= lines.iterator(); - if (fPreserveLineDelimiters) { - while (iter.hasNext()) - sb.append((String)iter.next()); - } else { - String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$ - while (iter.hasNext()) { - String line= (String)iter.next(); - int l= length(line); - if (l < line.length()) { // line has delimiter - sb.append(line.substring(0, l)); - sb.append(lineSeparator); - } else { - sb.append(line); - } - } - } - return sb.toString(); - } - - String getRejected(List failedHunks) { - if (failedHunks.size() <= 0) - return null; - - String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$ - StringBuffer sb= new StringBuffer(); - Iterator iter= failedHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - sb.append(hunk.getRejectedDescription()); - sb.append(lineSeparator); - sb.append(hunk.getContent()); - } - return sb.toString(); - } - - /** - * Ensures that a file with the given path exists in - * the given container. Folder are created as necessary. - */ - private IFile createPath(IContainer container, IPath path) throws CoreException { - if (path.segmentCount() > 1) { - IFolder f= container.getFolder(path.uptoSegment(1)); - if (!f.exists()) - f.create(false, true, null); - return createPath(f, path.removeFirstSegments(1)); - } - // a leaf - return container.getFile(path); - } - - /** - * Returns the given string with all whitespace characters removed. - * Whitespace is defined by <code>Character.isWhitespace(...)</code>. - */ - private static String stripWhiteSpace(String s) { - StringBuffer sb= new StringBuffer(); - int l= s.length(); - for (int i= 0; i < l; i++) { - char c= s.charAt(i); - if (!Character.isWhitespace(c)) - sb.append(c); - } - return sb.toString(); - } - - /** - * Compares two strings. - * If fIgnoreWhitespace is true whitespace is ignored. - */ - private boolean linesMatch(String line1, String line2) { - if (fIgnoreWhitespace) - return stripWhiteSpace(line1).equals(stripWhiteSpace(line2)); - if (fIgnoreLineDelimiter) { - int l1= length(line1); - int l2= length(line2); - if (l1 != l2) - return false; - return line1.regionMatches(0, line2, 0, l1); - } - return line1.equals(line2); - } - - /** - * Returns the length (exluding a line delimiter CR, LF, CR/LF) - * of the given string. - */ - /* package */ static int length(String s) { - int l= s.length(); - if (l > 0) { - char c= s.charAt(l-1); - if (c == '\r') - return l-1; - if (c == '\n') { - if (l > 1 && s.charAt(l-2) == '\r') - return l-2; - return l-1; - } - } - return l; - } - - int calculateFuzz(Hunk hunk, List lines, int shift, IProgressMonitor pm, int[] fuzz) { - - hunk.fMatches= false; - if (tryPatch(hunk, lines, shift)) { - shift+= doPatch(hunk, lines, shift); - fuzz[0]= 0; - } else { - boolean found= false; - int hugeFuzz= lines.size(); // the maximum we need for this file - fuzz[0]= -2; // not found - - for (int i= 1; i <= hugeFuzz; i++) { - if (pm.isCanceled()) { - fuzz[0]= -1; - return 0; - } - if (tryPatch(hunk, lines, shift-i)) { - fuzz[0]= i; - if (fAdjustShift) - shift-= i; - found= true; - break; - } - } - - if (! found) { - for (int i= 1; i <= hugeFuzz; i++) { - if (pm.isCanceled()) { - fuzz[0]= -1; - return 0; - } - if (tryPatch(hunk, lines, shift+i)) { - fuzz[0]= i; - if (fAdjustShift) - shift+= i; - found= true; - break; - } - } - } - - if (found) - shift+= doPatch(hunk, lines, shift); - } - return shift; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java deleted file mode 100644 index fe43b86e0..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java +++ /dev/null @@ -1,729 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.lang.reflect.InvocationTargetException; -import java.text.MessageFormat; -import java.util.Iterator; -import java.util.List; -import java.util.ArrayList; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.resource.ImageDescriptor; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.internal.DiffImage; -import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.compare.internal.TimeoutContext; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * Shows the parsed patch file and any mismatches - * between files, hunks and the currently selected - * resources. - */ -/* package */ class PreviewPatchPage extends WizardPage { - - static final int GUESS_TIMEOUT= 1500; // show progress after 1.5sec of fuzz factor guessing - - /** - * Used with CompareInput - */ - static class HunkInput implements ITypedElement, IStreamContentAccessor { - String fContent; - String fType; - - HunkInput(String type, String s) { - fType= type; - fContent= s; - } - public Image getImage() { - return null; - } - public String getName() { - return PatchMessages.getString("PreviewPatchPage.NoName.text"); //$NON-NLS-1$ - } - public String getType() { - return fType; - } - public InputStream getContents() { - return new ByteArrayInputStream(fContent.getBytes()); - } - }; - - private PatchWizard fPatchWizard; - - private Tree fTree; - private Combo fStripPrefixSegments; - private CompareViewerSwitchingPane fHunkViewer; - private Button fIgnoreWhitespaceButton; - private Button fReversePatchButton; - private Text fFuzzField; - - private Image fNullImage; - private Image fAddImage; - private Image fDelImage; - private Image fErrorImage; - private Image fErrorAddImage; - private Image fErrorDelImage; - - private CompareConfiguration fCompareConfiguration; - - - /* package */ PreviewPatchPage(PatchWizard pw) { - super("PreviewPatchPage", //$NON-NLS-1$ - PatchMessages.getString("PreviewPatchPage.title"), null); //$NON-NLS-1$ - - setMessage(PatchMessages.getString("PreviewPatchPage.message")); //$NON-NLS-1$ - - fPatchWizard= pw; - //setPageComplete(false); - - int w= 16; - - ImageDescriptor addId= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$ - ImageDescriptor delId= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$ - - ImageDescriptor errId= CompareUIPlugin.getImageDescriptor("ovr16/error_ov.gif"); //$NON-NLS-1$ - Image errIm= errId.createImage(); - - fNullImage= new DiffImage(null, null, w).createImage(); - fAddImage= new DiffImage(null, addId, w).createImage(); - fDelImage= new DiffImage(null, delId, w).createImage(); - - fErrorImage= new DiffImage(errIm, null, w).createImage(); - fErrorAddImage= new DiffImage(errIm, addId, w).createImage(); - fErrorDelImage= new DiffImage(errIm, delId, w).createImage(); - - fCompareConfiguration= new CompareConfiguration(); - - fCompareConfiguration.setLeftEditable(false); - fCompareConfiguration.setLeftLabel(PatchMessages.getString("PreviewPatchPage.Left.title")); //$NON-NLS-1$ - - fCompareConfiguration.setRightEditable(false); - fCompareConfiguration.setRightLabel(PatchMessages.getString("PreviewPatchPage.Right.title")); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * Method declared in WizardPage - */ - public void setVisible(boolean visible) { - if (visible) - buildTree(); - super.setVisible(visible); - } - - Image getImage(Diff diff) { - if (diff.fMatches) { - switch (diff.getType()) { - case Differencer.ADDITION: - return fAddImage; - case Differencer.DELETION: - return fDelImage; - } - return fNullImage; - } - switch (diff.getType()) { - case Differencer.ADDITION: - return fErrorAddImage; - case Differencer.DELETION: - return fErrorDelImage; - } - return fErrorImage; - } - - Image getImage(Hunk hunk) { - if (hunk.fMatches) - return fNullImage; - return fErrorImage; - } - - public void createControl(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout()); - composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); - - WorkbenchHelp.setHelp(composite, ICompareContextIds.PATCH_PREVIEW_WIZARD_PAGE); - - setControl(composite); - - buildPatchOptionsGroup(composite); - - Splitter splitter= new Splitter(composite, SWT.VERTICAL); - splitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL - | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); - - - // top pane showing diffs and hunks in a check box tree - fTree= new Tree(splitter, SWT.CHECK | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - GridData gd= new GridData(); - gd.verticalAlignment= GridData.FILL; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.grabExcessVerticalSpace= true; - fTree.setLayoutData(gd); - - // bottom pane showing hunks in compare viewer - fHunkViewer= new CompareViewerSwitchingPane(splitter, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - return CompareUI.findContentViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration); - } - }; - gd= new GridData(); - gd.verticalAlignment= GridData.FILL; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.grabExcessVerticalSpace= true; - fHunkViewer.setLayoutData(gd); - - // register listeners - - fTree.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - TreeItem ti= (TreeItem) e.item; - Object data= e.item.getData(); - if (e.detail == SWT.CHECK) { - boolean checked= ti.getChecked(); - if (data instanceof Hunk) { - Hunk hunk= (Hunk) data; - checked= checked && hunk.fMatches; - //hunk.setEnabled(checked); - ti.setChecked(checked); - updateGrayedState(ti); - } else if (data instanceof Diff) { - updateCheckedState(ti); - } - } else { - if (data instanceof Hunk) - PreviewPatchPage.this.fHunkViewer.setInput(createInput((Hunk)data)); - else - PreviewPatchPage.this.fHunkViewer.setInput(null); - } - } - } - ); - - // creating tree's content - buildTree(); - Dialog.applyDialogFont(composite); - } - - /** - * Create the group for setting various patch options - */ - private void buildPatchOptionsGroup(Composite parent) { - - GridLayout gl; - GridData gd; - Label l; - - final Patcher patcher= fPatchWizard.getPatcher(); - - Group group= new Group(parent, SWT.NONE); - group.setText(PatchMessages.getString("PreviewPatchPage.PatchOptions.title")); //$NON-NLS-1$ - gl= new GridLayout(); gl.numColumns= 4; gl.marginHeight= 0; - group.setLayout(gl); - group.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); - - // 1st row - - Composite pair= new Composite(group, SWT.NONE); - gl= new GridLayout(); gl.numColumns= 2; gl.marginHeight= gl.marginWidth= 0; - pair.setLayout(gl); - gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL); - pair.setLayoutData(gd); - - l= new Label(pair, SWT.NONE); - l.setText(PatchMessages.getString("PreviewPatchPage.IgnoreSegments.text")); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL); - l.setLayoutData(gd); - - fStripPrefixSegments= new Combo(pair, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.SIMPLE); - int prefixCnt= patcher.getStripPrefixSegments(); - String prefix= Integer.toString(prefixCnt); - fStripPrefixSegments.add(prefix); - fStripPrefixSegments.setText(prefix); - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_END); - fStripPrefixSegments.setLayoutData(gd); - - addSpacer(group); - - fReversePatchButton= new Button(group, SWT.CHECK); - fReversePatchButton.setText(PatchMessages.getString("PreviewPatchPage.ReversePatch.text")); //$NON-NLS-1$ - - addSpacer(group); - - // 2nd row - pair= new Composite(group, SWT.NONE); - gl= new GridLayout(); gl.numColumns= 3; gl.marginHeight= gl.marginWidth= 0; - pair.setLayout(gl); - gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL); - pair.setLayoutData(gd); - - l= new Label(pair, SWT.NONE); - l.setText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.text")); //$NON-NLS-1$ - l.setToolTipText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.tooltip")); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL); - l.setLayoutData(gd); - - fFuzzField= new Text(pair, SWT.BORDER); - fFuzzField.setText("2"); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_END); gd.widthHint= 30; - fFuzzField.setLayoutData(gd); - - Button b= new Button(pair, SWT.PUSH); - b.setText(PatchMessages.getString("PreviewPatchPage.GuessFuzz.text")); //$NON-NLS-1$ - b.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - int fuzz= guessFuzzFactor(patcher); - if (fuzz >= 0) - fFuzzField.setText(Integer.toString(fuzz)); - } - } - ); - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER); - b.setLayoutData(gd); - - addSpacer(group); - - fIgnoreWhitespaceButton= new Button(group, SWT.CHECK); - fIgnoreWhitespaceButton.setText(PatchMessages.getString("PreviewPatchPage.IgnoreWhitespace.text")); //$NON-NLS-1$ - - addSpacer(group); - - // register listeners - - if (fStripPrefixSegments != null) - fStripPrefixSegments.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setStripPrefixSegments(getStripPrefixSegments())) - updateTree(); - } - } - ); - fReversePatchButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setReversed(fReversePatchButton.getSelection())) - updateTree(); - } - } - ); - fIgnoreWhitespaceButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setIgnoreWhitespace(fIgnoreWhitespaceButton.getSelection())) - updateTree(); - } - } - ); - - fFuzzField.addModifyListener( - new ModifyListener() { - public void modifyText(ModifyEvent e) { - if (patcher.setFuzz(getFuzzFactor())) - updateTree(); - } - } - ); - } - - private int guessFuzzFactor(final Patcher patcher) { - final int strip= getStripPrefixSegments(); - final int[] result= new int[1]; - try { - TimeoutContext.run(true, GUESS_TIMEOUT, getControl().getShell(), - new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - result[0]= guess(patcher, monitor, strip); - } - } - ); - return result[0]; - } catch (InvocationTargetException ex) { - } catch (InterruptedException ex) { - } - return -1; - } - - private int guess(Patcher patcher, IProgressMonitor pm, int strip) { - - Diff[] diffs= patcher.getDiffs(); - if (diffs == null || diffs.length <= 0) - return -1; - - // now collect files and determine "work" - IFile[] files= new IFile[diffs.length]; - int work= 0; - for (int i= 0; i < diffs.length; i++) { - Diff diff= diffs[i]; - if (diff == null) - continue; - if (diff.getType() != Differencer.ADDITION) { - IPath p= diff.fOldPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - IFile file= existsInSelection(p); - if (file != null) { - files[i]= file; - work+= diff.fHunks.size(); - } - } - } - - // do the "work" - int[] fuzzRef= new int[1]; - String format= PatchMessages.getString("PreviewPatchPage.GuessFuzzProgress.format"); //$NON-NLS-1$ - pm.beginTask(PatchMessages.getString("PreviewPatchPage.GuessFuzzProgress.text"), work); //$NON-NLS-1$ - try { - int fuzz= 0; - for (int i= 0; i < diffs.length; i++) { - Diff d= diffs[i]; - IFile file= files[i]; - if (d != null && file != null) { - List lines= patcher.load(file, false); - String name= d.getPath().lastSegment(); - Iterator iter= d.fHunks.iterator(); - int shift= 0; - for (int hcnt= 1; iter.hasNext(); hcnt++) { - pm.subTask(MessageFormat.format(format, new String[] { name, Integer.toString(hcnt) } )); - Hunk h= (Hunk) iter.next(); - shift= patcher.calculateFuzz(h, lines, shift, pm, fuzzRef); - int f= fuzzRef[0]; - if (f == -1) // cancel - return -1; - if (f > fuzz) - fuzz= f; - pm.worked(1); - } - } - } - return fuzz; - } finally { - pm.done(); - } - } - - ICompareInput createInput(Hunk hunk) { - - String[] lines= hunk.fLines; - StringBuffer left= new StringBuffer(); - StringBuffer right= new StringBuffer(); - - for (int i= 0; i < lines.length; i++) { - String line= lines[i]; - String rest= line.substring(1); - switch (line.charAt(0)) { - case ' ': - left.append(rest); - right.append(rest); - break; - case '-': - left.append(rest); - break; - case '+': - right.append(rest); - break; - } - } - - Diff diff= hunk.fParent; - IPath path= diff.getPath(); - String type= path.getFileExtension(); - - return new DiffNode(new HunkInput(type, left.toString()), new HunkInput(type, right.toString())); - } - - /** - * Builds a tree from list of Diffs. - * As a side effect it calculates the maximum number of segments - * in all paths. - */ - private void buildTree() { - setPageComplete(true); - if (fTree != null && !fTree.isDisposed()) { - fTree.removeAll(); - fHunkViewer.setInput(null); - - int length= 99; - - Diff[] diffs= fPatchWizard.getPatcher().getDiffs(); - if (diffs != null) { - for (int i= 0; i < diffs.length; i++) { - Diff diff= diffs[i]; - TreeItem d= new TreeItem(fTree, SWT.NULL); - d.setData(diff); - d.setImage(getImage(diff)); - - if (diff.fOldPath != null) - length= Math.min(length, diff.fOldPath.segmentCount()); - if (diff.fNewPath != null) - length= Math.min(length, diff.fNewPath.segmentCount()); - - java.util.List hunks= diff.fHunks; - java.util.Iterator iter= hunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - TreeItem h= new TreeItem(d, SWT.NULL); - h.setData(hunk); - h.setText(hunk.getDescription()); - } - } - } - if (fStripPrefixSegments != null && length != 99) - for (int i= 1; i < length; i++) - fStripPrefixSegments.add(Integer.toString(i)); - } - - updateTree(); - } - - private IFile existsInSelection(IPath path) { - IResource target= fPatchWizard.getTarget(); - if (target instanceof IFile) { // special case - IFile file= (IFile) target; - if (matches(file.getFullPath(), path)) - return file; - } else if (target instanceof IContainer) { - IContainer c= (IContainer) target; - if (c.exists(path)) - return c.getFile(path); - } - return null; - } - - /** - * Returns true if path completely matches the end of fullpath - */ - private boolean matches(IPath fullpath, IPath path) { - - for (IPath p= fullpath; path.segmentCount() <= p.segmentCount(); - p= p.removeFirstSegments(1)) { - if (p.equals(path)) - return true; - } - return false; - } - - /** - * Updates label and checked state of tree items. - */ - private void updateTree() { - if (fTree == null || fTree.isDisposed()) - return; - int strip= getStripPrefixSegments(); - TreeItem[] children= fTree.getItems(); - for (int i= 0; i < children.length; i++) { - TreeItem item= children[i]; - Diff diff= (Diff) item.getData(); - diff.fMatches= false; - String error= null; - - boolean create= false; - IFile file= null; - if (diff.getType() == Differencer.ADDITION) { - IPath p= diff.fNewPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - file= existsInSelection(p); - if (file == null) { - diff.fMatches= true; - } else { - // file already exists - error= PatchMessages.getString("PreviewPatchPage.FileExists.error"); //$NON-NLS-1$ - } - create= true; - } else { - IPath p= diff.fOldPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - file= existsInSelection(p); - diff.fMatches= false; - if (file != null) { - if (file.isReadOnly()) { - // file is readonly - error= PatchMessages.getString("PreviewPatchPage.FileIsReadOnly.error"); //$NON-NLS-1$ - file= null; - } else { - diff.fMatches= true; - } - } else { - // file doesn't exist - error= PatchMessages.getString("PreviewPatchPage.FileDoesNotExist.error"); //$NON-NLS-1$ - } - } - - ArrayList failedHunks= new ArrayList(); - Patcher patcher= fPatchWizard.getPatcher(); - patcher.setFuzz(getFuzzFactor()); - patcher.apply(diff, file, create, failedHunks); - - if (failedHunks.size() > 0) - diff.fRejected= fPatchWizard.getPatcher().getRejected(failedHunks); - - int checkedSubs= 0; // counts checked hunk items - TreeItem[] hunkItems= item.getItems(); - for (int h= 0; h < hunkItems.length; h++) { - Hunk hunk= (Hunk) hunkItems[h].getData(); - boolean failed= failedHunks.contains(hunk); - String hunkError= null; - if (failed) - hunkError= PatchMessages.getString("PreviewPatchPage.NoMatch.error"); //$NON-NLS-1$ - - boolean check= !failed; - hunkItems[h].setChecked(check); - if (check) - checkedSubs++; - - String hunkLabel= hunk.getDescription(); - if (hunkError != null) - hunkLabel+= " " + hunkError; //$NON-NLS-1$ - hunkItems[h].setText(hunkLabel); - hunkItems[h].setImage(getImage(hunk)); - } - - String label= diff.getDescription(strip); - if (error != null) - label+= " " + error; //$NON-NLS-1$ - item.setText(label); - item.setImage(getImage(diff)); - item.setChecked(checkedSubs > 0); - boolean gray= (checkedSubs > 0 && checkedSubs < hunkItems.length); - item.setGrayed(gray); - item.setExpanded(gray); - } - setPageComplete(updateModel()); - } - - /** - * Updates the gray state of the given diff and the checked state of its children. - */ - private void updateCheckedState(TreeItem diffItem) { - boolean checked= diffItem.getChecked(); - // check whether we can enable all hunks - TreeItem[] hunks= diffItem.getItems(); - int checkedCount= 0; - for (int i= 0; i < hunks.length; i++) { - Hunk hunk= (Hunk) hunks[i].getData(); - if (checked) { - if (hunk.fMatches) { - hunks[i].setChecked(true); - checkedCount++; - } - } else { - hunks[i].setChecked(false); - } - } - diffItem.setGrayed(checkedCount > 0 && checkedCount < hunks.length); - diffItem.setChecked(checkedCount > 0); - - setPageComplete(updateModel()); - } - - /** - * Updates the gray state of the given items parent. - */ - private void updateGrayedState(TreeItem hunk) { - TreeItem diff= hunk.getParentItem(); - TreeItem[] hunks= diff.getItems(); - int checked= 0; - for (int i= 0; i < hunks.length; i++) - if (hunks[i].getChecked()) - checked++; - diff.setChecked(checked > 0); - diff.setGrayed(checked > 0 && checked < hunks.length); - - setPageComplete(updateModel()); - } - - private void addSpacer(Composite parent) { - Label label= new Label(parent, SWT.NONE); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint= 20; - label.setLayoutData(gd); - } - - private int getStripPrefixSegments() { - int stripPrefixSegments= 0; - if (fStripPrefixSegments != null) { - String s= fStripPrefixSegments.getText(); - try { - stripPrefixSegments= Integer.parseInt(s); - } catch(NumberFormatException ex) { - } - } - return stripPrefixSegments; - } - - private int getFuzzFactor() { - int fuzzFactor= 0; - if (fFuzzField != null) { - String s= fFuzzField.getText(); - try { - fuzzFactor= Integer.parseInt(s); - } catch(NumberFormatException ex) { - } - } - return fuzzFactor; - } - - public boolean updateModel() { - boolean atLeastOneIsEnabled= false; - if (fTree != null && !fTree.isDisposed()) { - TreeItem [] diffItems= fTree.getItems(); - for (int i= 0; i < diffItems.length; i++) { - TreeItem diffItem= diffItems[i]; - Object data= diffItem.getData(); - if (data instanceof Diff) { - Diff diff= (Diff) data; - boolean b= diffItem.getChecked(); - diff.setEnabled(b); - if (b) { - TreeItem [] hunkItems= diffItem.getItems(); - for (int j= 0; j < hunkItems.length; j++) { - TreeItem hunkItem= hunkItems[j]; - data= hunkItem.getData(); - if (data instanceof Hunk) { - Hunk hunk= (Hunk) data; - b= hunkItem.getChecked(); - hunk.setEnabled(b); - if (b) { - atLeastOneIsEnabled= true; - } - } - } - } - } - } - } - return atLeastOneIsEnabled; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt deleted file mode 100644 index fbc5599cd..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt +++ /dev/null @@ -1,6 +0,0 @@ -1 -2 -3 -conflict -4 -5
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt deleted file mode 100644 index b1849b6fa..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt +++ /dev/null @@ -1,8 +0,0 @@ -1 -2 -outgoing addition -3 -outgoing change -4 -pseudo conflict -5
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt deleted file mode 100644 index acbf082c0..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 -incoming addition -incoming addition -2 -3 -incoming change -4 -pseudo conflict -5
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/package.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/package.html deleted file mode 100644 index 1963dd462..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/package.html +++ /dev/null @@ -1,99 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="Author" content="IBM"> - <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]"> - <title>Package-level Javadoc</title> -</head> -<body> -Provides support for performing structural and textual -compare operations on arbitrary data and displaying the results. -<h2> -Package Specification</h2> - -The class <b>CompareUI</b> defines the entry point to initiate a configurable -compare operation on arbitrary resources. The result of the compare is -opened into a compare editor where the details can be browsed and edited -in dynamically selected structure and content viewers. -<p> - -A compare operation must be implemented as a subclass of <b>CompareEditorInput</b>. -A <b>CompareEditorInput</b> runs a (potentially lengthy) compare operation -under progress monitor control, creates a UI for drilling-down into the -compare results, tracks the dirty state of the result in case of merge, -and saves any changes that occured during a merge. -<p> - -The <b>NavigationAction</b> is used to navigate (step) through the individual -differences of a <b>CompareEditorInput</b>. -<p> - -An instance of <b>CompareConfiguration</b> configures various UI aspects -of compare/merge viewers like title labels and images, or whether a side -of a merge viewer is editable. It is passed to the <b>CompareEditorInput</b> -on creation. -<p> - -When implementing a hierarchical compare operation as a subclass of -<b>CompareEditorInput</b> clients have to provide a tree of objects where each -node implements the interface -<b>org.eclipse.compare.structuremergeviewer.IStructureComparator</b>. -This interface is used by the hierarchical differencing engine -(<b>org.eclipse.compare.structuremergeviewer.Differencer</b>) to walk the tree. -<br> -In addition every leaf of the tree must implement the <b>IStreamContentAccessor</b> -interface in order to give the differencing engine access to its stream content. -<p> - -The abstract class <b>BufferedContent</b> provides a default implementation -for the <b>IStreamContentAccessor</b> and <b>IContentChangeNotifier</b> interfaces. -Its subclass <b>ResourceNode</b> adds an implementation for the -<b>IStructureComparator</b> and <b>ITypedElement</b> interfaces -based on Eclipse workbench resources (org.eclipse.core.resources.IResource). -It can be used without modification as the input to the differencing engine. -<p> - -The <b>ZipFileStructureCreator</b> is an implementation of the -<b>org.eclipse.compare.structuremergeviewer.IStructureCreator</b> interface -and makes the contents of a zip archive available as a -hierarchical structure of <b>IStructureComparator</b>s which can be easily compared -by the differencing engine (<b>org.eclipse.compare.structuremergeviewer.Differencer</b>). -It is a good example for how to make structured files available to the hierarchical -compare functionality of the Compare plugin. -<p> - -The <b>EditionSelectionDialog</b> is a simple selection dialog where -one input element can be compared against a list of historic variants (<i>editions</i>) -of the same input element. The dialog can be used to implement functions -like <i>"Replace with Version"</i> or <i>"Replace with Edition"</i> on workbench resources. -<p> - -In addition it is possible to specify a subsection of the input element -(e.g. a method in a Java source file) by means of a <i>path</i>. In this -case the dialog compares only the subsection (as specified by the path) -with the corresponding subsection in the list of editions. This functionality -can be used to implement <i>"Replace with Method Edition"</i> for the Java -language. -<p> - -The <b>EditionSelectionDialog</b> requires that the editions implement -the <b>IStreamContentAccessor</b> and <b>IModificationDate</b> interfaces. -The <b>HistoryItem</b> is a convenience class that implements these interfaces -for <b>IFileState</b> objects. -<p> - - -The <b>CompareViewerPane</b> is a convenience class which provides -a label and local toolbar for a compare viewer (or any other subclass of a -JFace <b>Viewer</b>). -<br> -Its abstract subclass <b>CompareViewerSwitchingPane</b> supports <i>dynamic -viewer switching</i>, that is the viewer installed in the pane is dynamically -determined by the pane's input object. -Both classes are useful if you want to use compare viewers outside the context of -a compare editor, for example in a dialog or wizard. - - -</body> -</html> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java deleted file mode 100644 index bab434292..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -import java.util.ArrayList; -import java.util.List; - -/** - * A custom iterator to iterate over a List of <code>RangeDifferences</code>. - * It is used internally by the <code>RangeDifferencer</code>. - */ -/* package */ class DifferencesIterator { - - List fRange; - int fIndex; - RangeDifference[] fArray; - RangeDifference fDifference; - - /** - * Creates a differences iterator on an array of <code>RangeDifference</code>s. - */ - DifferencesIterator(RangeDifference[] differenceRanges) { - - fArray= differenceRanges; - fIndex= 0; - fRange= new ArrayList(); - if (fIndex < fArray.length) - fDifference= fArray[fIndex++]; - else - fDifference= null; - } - - /** - * Returns the number of RangeDifferences - */ - int getCount() { - return fRange.size(); - } - - /** - * Appends the edit to its list and moves to the next <code>RangeDifference</code>. - */ - void next() { - fRange.add(fDifference); - if (fDifference != null) { - if (fIndex < fArray.length) - fDifference= fArray[fIndex++]; - else - fDifference= null; - } - } - - /** - * Difference iterators are used in pairs. - * This method returns the other iterator. - */ - DifferencesIterator other(DifferencesIterator right, DifferencesIterator left) { - if (this == right) - return left; - return right; - } - - /** - * Removes all <code>RangeDifference</code>s - */ - void removeAll() { - fRange.clear(); - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java deleted file mode 100644 index e4f87ad7b..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -/** - * For breaking an object to compare into a sequence of comparable entities. - * <p> - * It is used by <code>RangeDifferencer</code> to find longest sequences of - * matching and non-matching ranges. - * <p> - * For example, to compare two text documents and find longest common sequences - * of matching and non-matching lines, the implementation must break the document - * into lines. <code>getRangeCount</code> would return the number of lines in the - * document, and <code>rangesEqual</code> would compare a specified line given - * with one in another <code>IRangeComparator</code>. - * </p> - * <p> - * Clients should implement this interface; there is no standard implementation. - * </p> - */ -public interface IRangeComparator { - - /** - * Returns the number of comparable entities. - * - * @return the number of comparable entities - */ - int getRangeCount(); - - /** - * Returns whether the comparable entity given by the first index - * matches an entity specified by the other <code>IRangeComparator</code> and index. - * - * @param thisIndex the index of the comparable entity within this <code>IRangeComparator</code> - * @param other the IRangeComparator to compare this with - * @param otherIndex the index of the comparable entity within the other <code>IRangeComparator</code> - * @return <code>true</code> if the comparable entities are equal - */ - boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex); - - /** - * Returns whether a comparison should be skipped because it would be too costly (or lengthy). - * - * @param length a number on which to base the decision whether to return - * <code>true</code> or <code>false</code> - * @param maxLength another number on which to base the decision whether to return - * <code>true</code> or <code>false</code> - * @param other the other <code>IRangeComparator</code> to compare with - * @return <code>true</code> to avoid a too lengthy range comparison - */ - boolean skipRangeComparison(int length, int maxLength, IRangeComparator other); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java deleted file mode 100644 index 30fb0b081..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -/* package */ class LinkedRangeDifference extends RangeDifference { - - static final int INSERT= 0; - static final int DELETE= 1; - static final int CHANGE= 2; - static final int ERROR= 3; - - LinkedRangeDifference fNext; - - /** - * Creates a LinkedRangeDifference an initializes it to the error state - */ - LinkedRangeDifference() { - super(ERROR); - fNext= null; - } - - /** - * Constructs and links a LinkeRangeDifference to another LinkedRangeDifference - */ - LinkedRangeDifference(LinkedRangeDifference next, int operation) { - super(operation); - fNext= next; - } - - /** - * Follows the next link - */ - LinkedRangeDifference getNext() { - return fNext; - } - - boolean isDelete() { - return kind() == DELETE; - } - - boolean isInsert() { - return kind() == INSERT; - } - - /** - * Sets the next link of this LinkedRangeDifference - */ - void setNext(LinkedRangeDifference next) { - fNext= next; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java deleted file mode 100644 index 296cb9662..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -/** - * Description of a change between two or three ranges of comparable entities. - * <p> - * <code>RangeDifference</code> objects are the elements of a compare result returned from - * the <code>RangeDifferencer</code> <code>find* </code> methods. - * Clients use these objects as they are returned from the differencer. - * This class is not intended to be instantiated or subclassed. - * <p> - * Note: A range in the <code>RangeDifference</code> object is given as a start index - * and length in terms of comparable entities. However, these entity indices and counts - * are not necessarily character positions. For example, if an entity represents a line - * in a document, the start index would be a line number and the count would be in lines. - * </p> - * - * @see RangeDifferencer - */ -public class RangeDifference { - - /** Two-way change constant indicating no change. */ - public final static int NOCHANGE= 0; - /** Two-way change constant indicating two-way change (same as <code>RIGHT</code>) */ - public final static int CHANGE= 2; - - /** Three-way change constant indicating a change in both right and left. */ - public final static int CONFLICT= 1; - /** Three-way change constant indicating a change in right. */ - public final static int RIGHT= 2; - /** Three-way change constant indicating a change in left. */ - public final static int LEFT= 3; - /** - * Three-way change constant indicating the same change in both right and left, - * that is only the ancestor is different. - */ - public final static int ANCESTOR= 4; - - /** Constant indicating an unknown change kind. */ - public final static int ERROR= 5; - - /** the kind of change: NOCHANGE, CHANGE, LEFT, RIGHT, ANCESTOR, CONFLICT, ERROR */ - int fKind; - - int fLeftStart; - int fLeftLength; - int fRightStart; - int fRightLength; - int lAncestorStart; - int lAncestorLength; - - /** - * Creates a new range difference with the given change kind. - * - * @param changeKind the kind of change - */ - /* package */ RangeDifference(int changeKind) { - fKind= changeKind; - } - - /** - * Creates a new <code>RangeDifference</code> with the given change kind - * and left and right ranges. - * - * @param changeKind the kind of change - * @param rightStart start index of entity on right side - * @param rightLength number of entities on right side - * @param leftStart start index of entity on left side - * @param leftLength number of entities on left side - */ - /* package */ RangeDifference(int kind, int rightStart, int rightLength, int leftStart, int leftLength) { - fKind= kind; - fRightStart= rightStart; - fRightLength= rightLength; - fLeftStart= leftStart; - fLeftLength= leftLength; - } - - /** - * Creates a new <code>RangeDifference</code> with the given change kind - * and left, right, and ancestor ranges. - * - * @param changeKind the kind of change - * @param rightStart start index of entity on right side - * @param rightLength number of entities on right side - * @param leftStart start index of entity on left side - * @param leftLength number of entities on left side - * @param ancestorStart start index of entity on ancestor side - * @param ancestorLength number of entities on ancestor side - */ - /* package */ RangeDifference(int kind, int rightStart, int rightLength, int leftStart, int leftLength, - int ancestorStart, int ancestorLength) { - this(kind, rightStart, rightLength, leftStart, leftLength); - lAncestorStart= ancestorStart; - lAncestorLength= ancestorLength; - } - - /** - * Returns the kind of difference. - * - * @return the kind of difference, one of - * <code>NOCHANGE</code>, <code>CHANGE</code>, <code>LEFT</code>, <code>RIGHT</code>, - * <code>ANCESTOR</code>, <code>CONFLICT</code>, <code>ERROR</code> - */ - public int kind() { - return fKind; - } - - /** - * Returns the start index of the entity range on the ancestor side. - * - * @return the start index of the entity range on the ancestor side - */ - public int ancestorStart() { - return lAncestorStart; - } - - /** - * Returns the number of entities on the ancestor side. - * - * @return the number of entities on the ancestor side - */ - public int ancestorLength() { - return lAncestorLength; - } - - /** - * Returns the end index of the entity range on the ancestor side. - * - * @return the end index of the entity range on the ancestor side - */ - public int ancestorEnd() { - return lAncestorStart + lAncestorLength; - } - - /** - * Returns the start index of the entity range on the right side. - * - * @return the start index of the entity range on the right side - */ - public int rightStart() { - return fRightStart; - } - - /** - * Returns the number of entities on the right side. - * - * @return the number of entities on the right side - */ - public int rightLength() { - return fRightLength; - } - - /** - * Returns the end index of the entity range on the right side. - * - * @return the end index of the entity range on the right side - */ - public int rightEnd() { - return fRightStart + fRightLength; - } - - /** - * Returns the start index of the entity range on the left side. - * - * @return the start index of the entity range on the left side - */ - public int leftStart() { - return fLeftStart; - } - - /** - * Returns the number of entities on the left side. - * - * @return the number of entities on the left side - */ - public int leftLength() { - return fLeftLength; - } - - /** - * Returns the end index of the entity range on the left side. - * - * @return the end index of the entity range on the left side - */ - public int leftEnd() { - return fLeftStart + fLeftLength; - } - - /** - * Returns the maximum number of entities in the left, right, and ancestor sides of this range. - * - * @return the maximum number of entities in the left, right, and ancestor sides of this range - */ - public int maxLength() { - return Math.max(fRightLength, Math.max(fLeftLength, lAncestorLength)); - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java deleted file mode 100644 index 9d5eb1886..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java +++ /dev/null @@ -1,542 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.rangedifferencer; - -import java.util.*; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.IProgressMonitor; - -/** - * A <code>RangeDifferencer</code> finds the differences between two or three <code>IRangeComparator</code>s. - * <p> - * To use the differencer, clients provide an <code>IRangeComparator</code> - * that breaks their input data into a sequence of comparable entities. The differencer - * returns the differences among these sequences as an array of <code>RangeDifference</code> objects - * (<code>findDifferences</code> methods). - * Every <code>RangeDifference</code> represents a single kind of difference - * and the corresponding ranges of the underlying comparable entities in the - * left, right, and optionally ancestor sides. - * <p> - * Alternatively, the <code>findRanges</code> methods not only return objects for - * the differing ranges but for non-differing ranges too. - * <p> - * The algorithm used is an objectified version of one described in: - * <it>A File Comparison Program,</it> by Webb Miller and Eugene W. Myers, - * Software Practice and Experience, Vol. 15, Nov. 1985. - * - * @see IRangeComparator - * @see RangeDifference - */ -public final class RangeDifferencer { - - private static final RangeDifference[] EMPTY_RESULT= new RangeDifference[0]; - - /* (non Javadoc) - * Non instantiatiable! - */ - private RangeDifferencer() { - } - - /** - * Finds the differences between two <code>IRangeComparator</code>s. - * The differences are returned as an array of <code>RangeDifference</code>s. - * If no differences are detected an empty array is returned. - * - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences, or an empty array if no differences were found - */ - public static RangeDifference[] findDifferences(IRangeComparator left, IRangeComparator right) { - return findDifferences((IProgressMonitor)null, left, right); - } - - /** - * Finds the differences between two <code>IRangeComparator</code>s. - * The differences are returned as an array of <code>RangeDifference</code>s. - * If no differences are detected an empty array is returned. - * - * @param pm if not <code>null</code> used to report progress - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences, or an empty array if no differences were found - * @since 2.0 - */ - public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) { - - // assert that both IRangeComparators are of the same class - Assert.isTrue(right.getClass().equals(left.getClass())); - - int rightSize= right.getRangeCount(); - int leftSize= left.getRangeCount(); - // - // Differences matrix: - // only the last d of each diagonal is stored, i.e., lastDiagonal[k] = row of d - // - int diagLen= 2 * Math.max(rightSize, leftSize); // bound on the size of edit script - int maxDiagonal= diagLen; - int lastDiagonal[]= new int[diagLen + 1]; // the row containing the last d - // on diagonal k (lastDiagonal[k] = row) - int origin= diagLen / 2; // origin of diagonal 0 - - // script corresponding to d[k] - LinkedRangeDifference script[]= new LinkedRangeDifference[diagLen + 1]; - int row, col; - - // find common prefix - for (row= 0; row < rightSize && row < leftSize && rangesEqual(right, row, left, row) == true; ++row) - ; - - lastDiagonal[origin]= row; - script[origin]= null; - int lower= (row == rightSize) ? origin + 1 : origin - 1; - int upper= (row == leftSize) ? origin - 1 : origin + 1; - - if (lower > upper) - return EMPTY_RESULT; - - //System.out.println("findDifferences: " + maxDiagonal + " " + lower + " " + upper); - - // for each value of the edit distance - for (int d= 1; d <= maxDiagonal; ++d) { // d is the current edit distance - - if (pm != null) - pm.worked(1); - - if (right.skipRangeComparison(d, maxDiagonal, left)) - return EMPTY_RESULT; // should be something we already found - - // for each relevant diagonal (-d, -d+2 ..., d-2, d) - for (int k= lower; k <= upper; k += 2) { // k is the current diagonal - LinkedRangeDifference edit; - - if (pm != null && pm.isCanceled()) - return EMPTY_RESULT; - - if (k == origin - d || k != origin + d && lastDiagonal[k + 1] >= lastDiagonal[k - 1]) { - // - // move down - // - row= lastDiagonal[k + 1] + 1; - edit= new LinkedRangeDifference(script[k + 1], LinkedRangeDifference.DELETE); - } else { - // - // move right - // - row= lastDiagonal[k - 1]; - edit= new LinkedRangeDifference(script[k - 1], LinkedRangeDifference.INSERT); - } - col= row + k - origin; - edit.fRightStart= row; - edit.fLeftStart= col; - Assert.isTrue(k >= 0 && k <= maxDiagonal); - script[k]= edit; - - // slide down the diagonal as far as possible - while (row < rightSize && col < leftSize && rangesEqual(right, row, left, col) == true) { - ++row; - ++col; - } - - Assert.isTrue(k >= 0 && k <= maxDiagonal); // Unreasonable value for diagonal index - lastDiagonal[k]= row; - - if (row == rightSize && col == leftSize) { - //showScript(script[k], right, left); - return createDifferencesRanges(script[k]); - } - if (row == rightSize) - lower= k + 2; - if (col == leftSize) - upper= k - 2; - } - --lower; - ++upper; - } - // too many differences - Assert.isTrue(false); - return null; - } - - /** - * Finds the differences among three <code>IRangeComparator</code>s. - * The differences are returned as a list of <code>RangeDifference</code>s. - * If no differences are detected an empty list is returned. - * If the ancestor range comparator is <code>null</code>, a two-way - * comparison is performed. - * - * @param ancestor the ancestor range comparator or <code>null</code> - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences, or an empty array if no differences were found - */ - public static RangeDifference[] findDifferences(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) { - return findDifferences(null, ancestor, left, right); - } - - /** - * Finds the differences among three <code>IRangeComparator</code>s. - * The differences are returned as a list of <code>RangeDifference</code>s. - * If no differences are detected an empty list is returned. - * If the ancestor range comparator is <code>null</code>, a two-way - * comparison is performed. - * - * @param pm if not <code>null</code> used to report progress - * @param ancestor the ancestor range comparator or <code>null</code> - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences, or an empty array if no differences were found - * @since 2.0 - */ - public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) { - - if (ancestor == null) - return findDifferences(pm, left, right); - - RangeDifference[] leftAncestorScript= null; - RangeDifference[] rightAncestorScript= findDifferences(pm, ancestor, right); - if (rightAncestorScript != null) - leftAncestorScript= findDifferences(pm, ancestor, left); - if (rightAncestorScript == null || leftAncestorScript == null) - return null; - - DifferencesIterator myIter= new DifferencesIterator(rightAncestorScript); - DifferencesIterator yourIter= new DifferencesIterator(leftAncestorScript); - - List diff3= new ArrayList(); - diff3.add(new RangeDifference(RangeDifference.ERROR)); // add a sentinel - - int changeRangeStart= 0; - int changeRangeEnd= 0; - // - // Combine the two two-way edit scripts into one - // - while (myIter.fDifference != null || yourIter.fDifference != null) { - - DifferencesIterator startThread; - myIter.removeAll(); - yourIter.removeAll(); - // - // take the next diff that is closer to the start - // - if (myIter.fDifference == null) - startThread= yourIter; - else if (yourIter.fDifference == null) - startThread= myIter; - else { // not at end of both scripts take the lowest range - if (myIter.fDifference.fLeftStart <= yourIter.fDifference.fLeftStart) // 2 -> common (Ancestor) change range - startThread= myIter; - else - startThread= yourIter; - } - changeRangeStart= startThread.fDifference.fLeftStart; - changeRangeEnd= startThread.fDifference.leftEnd(); - - startThread.next(); - // - // check for overlapping changes with other thread - // merge overlapping changes with this range - // - DifferencesIterator other= startThread.other(myIter, yourIter); - while (other.fDifference != null && other.fDifference.fLeftStart <= changeRangeEnd) { - int newMax= other.fDifference.leftEnd(); - other.next(); - if (newMax >= changeRangeEnd) { - changeRangeEnd= newMax; - other= other.other(myIter, yourIter); - } - } - diff3.add(createRangeDifference3(myIter, yourIter, diff3, right, left, changeRangeStart, changeRangeEnd)); - } - - // remove sentinel - diff3.remove(0); - return (RangeDifference[]) diff3.toArray(EMPTY_RESULT); - } - - /** - * Finds the differences among two <code>IRangeComparator</code>s. - * In contrast to <code>findDifferences</code>, the result - * contains <code>RangeDifference</code> elements for non-differing ranges too. - * - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences - */ - public static RangeDifference[] findRanges(IRangeComparator left, IRangeComparator right) { - return findRanges((IProgressMonitor)null, left, right); - } - - /** - * Finds the differences among two <code>IRangeComparator</code>s. - * In contrast to <code>findDifferences</code>, the result - * contains <code>RangeDifference</code> elements for non-differing ranges too. - * - * @param pm if not <code>null</code> used to report progress - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences - * @since 2.0 - */ - public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) { - RangeDifference[] in= findDifferences(pm, left, right); - List out= new ArrayList(); - - RangeDifference rd; - - int mstart= 0; - int ystart= 0; - - for (int i= 0; i < in.length; i++) { - RangeDifference es= in[i]; - - rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, es.rightStart() - mstart, ystart, es.leftStart() - ystart); - if (rd.maxLength() != 0) - out.add(rd); - - out.add(es); - - mstart= es.rightEnd(); - ystart= es.leftEnd(); - } - rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, right.getRangeCount() - mstart, ystart, left.getRangeCount() - ystart); - if (rd.maxLength() > 0) - out.add(rd); - - return (RangeDifference[]) out.toArray(EMPTY_RESULT); - } - - /** - * Finds the differences among three <code>IRangeComparator</code>s. - * In contrast to <code>findDifferences</code>, the result - * contains <code>RangeDifference</code> elements for non-differing ranges too. - * If the ancestor range comparator is <code>null</code>, a two-way - * comparison is performed. - * - * @param pm if not <code>null</code> used to report progress - * @param ancestor the ancestor range comparator or <code>null</code> - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences - */ - public static RangeDifference[] findRanges(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) { - return findRanges(null, ancestor, left, right); - } - - /** - * Finds the differences among three <code>IRangeComparator</code>s. - * In contrast to <code>findDifferences</code>, the result - * contains <code>RangeDifference</code> elements for non-differing ranges too. - * If the ancestor range comparator is <code>null</code>, a two-way - * comparison is performed. - * - * @param pm if not <code>null</code> used to report progress - * @param ancestor the ancestor range comparator or <code>null</code> - * @param left the left range comparator - * @param right the right range comparator - * @return an array of range differences - * @since 2.0 - */ - public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) { - - if (ancestor == null) - return findRanges(pm, left, right); - - RangeDifference[] in= findDifferences(pm, ancestor, left, right); - List out= new ArrayList(); - - RangeDifference rd; - - int mstart= 0; - int ystart= 0; - int astart= 0; - - for (int i= 0; i < in.length; i++) { - RangeDifference es= (RangeDifference) in[i]; - - rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, es.rightStart() - mstart, ystart, es.leftStart() - ystart, astart, es.ancestorStart() - astart); - if (rd.maxLength() > 0) - out.add(rd); - - out.add(es); - - mstart= es.rightEnd(); - ystart= es.leftEnd(); - astart= es.ancestorEnd(); - } - rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, right.getRangeCount() - mstart, ystart, left.getRangeCount() - ystart, astart, ancestor.getRangeCount() - astart); - if (rd.maxLength() > 0) - out.add(rd); - - return (RangeDifference[]) out.toArray(EMPTY_RESULT); - } - - //---- private methods - - /** - * Creates a Vector of DifferencesRanges out of the LinkedRangeDifference. - * It coalesces adjacent changes. - * In addition, indices are changed such that the ranges are 1) open, i.e, - * the end of the range is not included, and 2) are zero based. - */ - private static RangeDifference[] createDifferencesRanges(LinkedRangeDifference start) { - - LinkedRangeDifference ep= reverseDifferences(start); - ArrayList result= new ArrayList(); - RangeDifference es= null; - - while (ep != null) { - es= new RangeDifference(RangeDifference.CHANGE); - - if (ep.isInsert()) { - es.fRightStart= ep.fRightStart + 1; - es.fLeftStart= ep.fLeftStart; - RangeDifference b= ep; - do { - ep= ep.getNext(); - es.fLeftLength++; - } while (ep != null && ep.isInsert() && ep.fRightStart == b.fRightStart); - } else { - es.fRightStart= ep.fRightStart; - es.fLeftStart= ep.fLeftStart; - - RangeDifference a= ep; - // - // deleted lines - // - do { - a= ep; - ep= ep.getNext(); - es.fRightLength++; - } while (ep != null && ep.isDelete() && ep.fRightStart == a.fRightStart + 1); - - boolean change= (ep != null && ep.isInsert() && ep.fRightStart == a.fRightStart); - - if (change) { - RangeDifference b= ep; - // - // replacement lines - // - do { - ep= ep.getNext(); - es.fLeftLength++; - } while (ep != null && ep.isInsert() && ep.fRightStart == b.fRightStart); - } else { - es.fLeftLength= 0; - } - es.fLeftStart++; // meaning of range changes from "insert after", to "replace with" - - } - // - // the script commands are 1 based, subtract one to make them zero based - // - es.fRightStart--; - es.fLeftStart--; - result.add(es); - } - return (RangeDifference[]) result.toArray(EMPTY_RESULT); - } - - /** - * Creates a <code>RangeDifference3</code> given the - * state of two DifferenceIterators. - */ - private static RangeDifference createRangeDifference3( - DifferencesIterator myIter, - DifferencesIterator yourIter, - List diff3, - IRangeComparator right, - IRangeComparator left, - int changeRangeStart, - int changeRangeEnd) { - - int rightStart, rightEnd; - int leftStart, leftEnd; - int kind= RangeDifference.ERROR; - RangeDifference last= (RangeDifference) diff3.get(diff3.size() - 1); - - Assert.isTrue((myIter.getCount() != 0 || yourIter.getCount() != 0)); // At least one range array must be non-empty - // - // find corresponding lines to fChangeRangeStart/End in right and left - // - if (myIter.getCount() == 0) { // only left changed - rightStart= changeRangeStart - last.ancestorEnd() + last.rightEnd(); - rightEnd= changeRangeEnd - last.ancestorEnd() + last.rightEnd(); - kind= RangeDifference.LEFT; - } else { - RangeDifference f= (RangeDifference) myIter.fRange.get(0); - RangeDifference l= (RangeDifference) myIter.fRange.get(myIter.fRange.size() - 1); - rightStart= changeRangeStart - f.fLeftStart + f.fRightStart; - rightEnd= changeRangeEnd - l.leftEnd() + l.rightEnd(); - } - - if (yourIter.getCount() == 0) { // only right changed - leftStart= changeRangeStart - last.ancestorEnd() + last.leftEnd(); - leftEnd= changeRangeEnd - last.ancestorEnd() + last.leftEnd(); - kind= RangeDifference.RIGHT; - } else { - RangeDifference f= (RangeDifference) yourIter.fRange.get(0); - RangeDifference l= (RangeDifference) yourIter.fRange.get(yourIter.fRange.size() - 1); - leftStart= changeRangeStart - f.fLeftStart + f.fRightStart; - leftEnd= changeRangeEnd - l.leftEnd() + l.rightEnd(); - } - - if (kind == RangeDifference.ERROR) { // overlapping change (conflict) -> compare the changed ranges - if (rangeSpansEqual(right, rightStart, rightEnd - rightStart, left, leftStart, leftEnd - leftStart)) - kind= RangeDifference.ANCESTOR; - else - kind= RangeDifference.CONFLICT; - } - return new RangeDifference(kind, rightStart, rightEnd - rightStart, leftStart, leftEnd - leftStart, changeRangeStart, changeRangeEnd - changeRangeStart); - } - - /** - * Tests if two ranges are equal - */ - private static boolean rangesEqual(IRangeComparator a, int ai, IRangeComparator b, int bi) { - return a.rangesEqual(ai, b, bi); - } - - /** - * Tests whether <code>right</code> and <code>left</left> changed in the same way - */ - private static boolean rangeSpansEqual(IRangeComparator right, int rightStart, int rightLen, IRangeComparator left, int leftStart, int leftLen) { - if (rightLen == leftLen) { - int i= 0; - for (i= 0; i < rightLen; i++) { - if (!rangesEqual(right, rightStart + i, left, leftStart + i)) - break; - } - if (i == rightLen) - return true; - } - return false; - } - - /** - * Reverses the range differences - */ - private static LinkedRangeDifference reverseDifferences(LinkedRangeDifference start) { - LinkedRangeDifference ep, behind, ahead; - - ahead= start; - ep= null; - while (ahead != null) { - behind= ep; - ep= ahead; - ahead= ahead.getNext(); - ep.setNext(behind); - } - return ep; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html deleted file mode 100644 index 368068b3b..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html +++ /dev/null @@ -1,44 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="Author" content="IBM"> - <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]"> - <title>Package-level Javadoc</title> -</head> -<body> -Provides support for finding the differences between -two or three sequences of comparable entities. -<h2> -Package Specification</h2> - -The class <b>RangeDifferencer</b> finds longest sequences of matching and -non-matching comparable entities. Its implementation is based on -an objectified version of the algorithm described in: -<i>A File Comparison Program,</i> by Webb Miller and Eugene W. Myers, -Software Practice and Experience, Vol. 15, Nov. 1985. -<p> - -Clients must supply the input to the differencer as an implementation -of the <b>IRangeComparator</b> interface. -An <b>IRangeComparator</b> breaks the input data into a sequence -of entities and provides a method for comparing -one entity with the entity in another <b>IRangeComparator</b>. -<p> - -For example, to compare two text documents and find longest common -sequences of matching and non-matching lines, -the implementation of <b>IRangeComparator</b> -must break the document into lines and provide a method for testing -whether two lines are considered equal. -See <b>org.eclipse.compare.internal.DocLineComparator</b> for how this can be done. -<p> - -The differencer returns the differences among these sequences as an -array of <b>RangeDifference</b> objects. -Every single <b>RangeDifference</b> describes the kind of difference -(no change, change, addition, deletion) and the corresponding ranges -of the underlying comparable entities in the two or three inputs. - -</body> -</html> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java deleted file mode 100644 index 0d013988a..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.util.ArrayList; - -/** - * The standard implementation of a diff container element. - * <p> - * This class may be instantiated, or further subclassed. - * </p> - */ -public abstract class DiffContainer extends DiffElement implements IDiffContainer { - - private static IDiffElement[] fgEmptyArray= new IDiffElement[0]; - private ArrayList fChildren; - - /** - * Creates a new container with the specified kind under the given parent. - * - * @param parent under which the new container is added as a child or <code>null</code>. - * @param name of the container - * @param kind of difference (defined in <code>Differencer</code>). - */ - public DiffContainer(IDiffContainer parent, int kind) { - super(parent, kind); - } - - /** - * Tries to find the child with the given name. - * Returns <code>null</code> if no such child exists. - * - * @param name of the child to find - * @return the first element with a matching name - */ - public IDiffElement findChild(String name) { - Object[] children= getChildren(); - for (int i= 0; i < children.length; i++) { - IDiffElement child= (IDiffElement) children[i]; - if (name.equals(child.getName())) - return child; - } - return null; - } - - /* (non Javadoc) - * see IDiffContainer.add - */ - public void add(IDiffElement diff) { - if (fChildren == null) - fChildren= new ArrayList(); - fChildren.add(diff); - diff.setParent(this); - } - - /** - * Removes the given child from this container. - * If the container becomes empty it is removed from its container. - */ - /* (non Javadoc) - * see IDiffContainer.removeToRoot - */ - public void removeToRoot(IDiffElement child) { - if (fChildren != null) { - fChildren.remove(child); - child.setParent(null); - if (fChildren.size() == 0) { - IDiffContainer p= getParent(); - if (p != null) - p.removeToRoot(this); - } - } - } - - /** - * Removes the given child (non-recursively) from this container. - * - * @param child to remove - */ - public void remove(IDiffElement child) { - if (fChildren != null) { - fChildren.remove(child); - child.setParent(null); - } - } - - /* (non Javadoc) - * see IDiffContainer.hasChildren - */ - public boolean hasChildren() { - return fChildren != null && fChildren.size() > 0; - } - - /* (non Javadoc) - * see IDiffContainer.getChildren - */ - public IDiffElement[] getChildren() { - if (fChildren != null) - return (IDiffElement[]) fChildren.toArray(fgEmptyArray); - return fgEmptyArray; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java deleted file mode 100644 index 2630ac52e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.compare.ITypedElement; - -/** - * An abstract base implementation of the <code>IDiffElement</code> interface. - * <p> - * Subclasses may add behavior and state, and may override <code>getImage</code> - * and <code>getType</code> to suit. - * </p> - */ -public abstract class DiffElement implements IDiffElement { - - private int fKind; - private IDiffContainer fParent; - - /** - * Creates a new <code>DiffElement</code> as a child of the given parent. - * If parent is not <code>null</code> the new element is added to the parent. - * - * @param parent the parent of this child; if not <code>null</code> this element is automatically added as a child - * @param kind the kind of change - */ - public DiffElement(IDiffContainer parent, int kind) { - fParent= parent; - fKind= kind; - if (parent != null) - parent.add(this); - } - - /** - * The <code>DiffElement</code> implementation of this <code>ITypedInput</code> - * method returns <code>null</code>. Subclasses may re-implement to provide - * an image for this element. - */ - public Image getImage() { - return null; - } - - /** - * The <code>DiffElement</code> implementation of this <code>ITypedElement</code> - * method returns <code>ITypedElement.UNKNOWN_TYPE</code>. Subclasses may - * re-implement to provide a type for this element. - */ - public String getType() { - return ITypedElement.UNKNOWN_TYPE; - } - - /** - * Sets the kind of difference for this element. - * - * @param kind set the kind of difference this element represents - * @see Differencer - */ - public void setKind(int kind) { - fKind= kind; - } - - /* (non Javadoc) - * see IDiffElement.getKind - */ - public int getKind() { - return fKind; - } - - /* (non Javadoc) - * see IDiffElement.getParent - */ - public IDiffContainer getParent() { - return fParent; - } - - /* (non Javadoc) - * see IDiffElement.setParent - */ - public void setParent(IDiffContainer parent) { - fParent= parent; - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java deleted file mode 100644 index 9d8624231..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java +++ /dev/null @@ -1,357 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.text.MessageFormat; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.util.ListenerList; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.Utilities; - -/** - * Diff node are used as the compare result of the differencing engine. - * Since it implements the <code>ITypedElement</code> and <code>ICompareInput</code> - * interfaces it can be used directly to display the - * compare result in a <code>DiffTreeViewer</code> and as the input to any other - * compare/merge viewer. - * <p> - * <code>DiffNode</code>s are typically created as the result of performing - * a compare with the <code>Differencer</code>. - * <p> - * Clients typically use this class as is, but may subclass if required. - * - * @see DiffTreeViewer - * @see Differencer - */ -public class DiffNode extends DiffContainer implements ITypedElement, ICompareInput { - - private ITypedElement fAncestor; - private ITypedElement fLeft; - private ITypedElement fRight; - private boolean fDontExpand; - private ListenerList fListener; - private boolean fSwapSides; - - - /** - * Creates a new <code>DiffNode</code> and initializes with the given values. - * - * @param parent under which the new container is added as a child or <code>null</code> - * @param kind of difference (defined in <code>Differencer</code>) - * @param ancestor the common ancestor input to a compare - * @param left the left input to a compare - * @param right the right input to a compare - */ - public DiffNode(IDiffContainer parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) { - this(parent, kind); - fAncestor= ancestor; - fLeft= left; - fRight= right; - } - - /** - * Creates a new <code>DiffNode</code> with diff kind <code>Differencer.CHANGE</code> - * and initializes with the given values. - * - * @param left the left input to a compare - * @param right the right input to a compare - */ - public DiffNode(ITypedElement left, ITypedElement right) { - this(null, Differencer.CHANGE, null, left, right); - } - - /** - * Creates a new <code>DiffNode</code> and initializes with the given values. - * - * @param kind of difference (defined in <code>Differencer</code>) - * @param ancestor the common ancestor input to a compare - * @param left the left input to a compare - * @param right the right input to a compare - */ - public DiffNode(int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) { - this(null, kind, ancestor, left, right); - } - - /** - * Creates a new <code>DiffNode</code> with the given diff kind. - * - * @param kind of difference (defined in <code>Differencer</code>) - */ - public DiffNode(int kind) { - super(null, kind); - } - - /** - * Creates a new <code>DiffNode</code> and initializes with the given values. - * - * @param parent under which the new container is added as a child or <code>null</code> - * @param kind of difference (defined in <code>Differencer</code>) - */ - public DiffNode(IDiffContainer parent, int kind) { - super(parent, kind); - } - - /** - * Registers a listener for changes of this <code>ICompareInput</code>. - * Has no effect if an identical listener is already registered. - * - * @param listener the listener to add - */ - public void addCompareInputChangeListener(ICompareInputChangeListener listener) { - if (fListener == null) - fListener= new ListenerList(); - fListener.add(listener); - } - - /** - * Unregisters a <code>ICompareInput</code> listener. - * Has no effect if listener is not registered. - * - * @param listener the listener to remove - */ - public void removeCompareInputChangeListener(ICompareInputChangeListener listener) { - if (fListener != null) { - fListener.remove(listener); - if (fListener.isEmpty()) - fListener= null; - } - } - - /** - * Sends out notification that a change has occured on the <code>ICompareInput</code>. - */ - protected void fireChange() { - if (fListener != null) { - Object[] listeners= fListener.getListeners(); - for (int i= 0; i < listeners.length; i++) - ((ICompareInputChangeListener) listeners[i]).compareInputChanged(this); - } - } - - //---- getters & setters - - /** - * Returns <code>true</code> if this node shouldn't automatically be expanded in - * a </code>DiffTreeViewer</code>. - * - * @return <code>true</code> if node shouldn't automatically be expanded - */ - public boolean dontExpand() { - return fDontExpand; - } - - /** - * Controls whether this node is not automatically expanded when displayed in - * a </code>DiffTreeViewer</code>. - * - * @param dontExpand if <code>true</code> this node is not automatically expanded in </code>DiffTreeViewer</code> - */ - public void setDontExpand(boolean dontExpand) { - fDontExpand= dontExpand; - } - - /** - * Returns the first not-<code>null</code> input of this node. - * Method checks the three inputs in the order: ancestor, right, left. - * - * @return the first not-<code>null</code> input of this node - */ - public ITypedElement getId() { - if (fAncestor != null) - return fAncestor; - if (fRight != null) - return fRight; - return fLeft; - } - - /** - * Returns the (non-<code>null</code>) name of the left or right side if they are identical. - * Otherwise both names are concatenated (separated with a slash ('/')). - * <p> - * Subclasses may re-implement to provide a different name for this node. - */ - /* (non Javadoc) - * see ITypedElement.getName - */ - public String getName() { - String right= null; - if (fRight != null) - right= fRight.getName(); - - String left= null; - if (fLeft != null) - left= fLeft.getName(); - - if (right == null && left == null) { - if (fAncestor != null) - return fAncestor.getName(); - return Utilities.getString("DiffNode.noName"); //$NON-NLS-1$ - } - - if (right == null) - return left; - if (left == null) - return right; - - if (right.equals(left)) - return right; - - String s1; - String s2; - - if (fSwapSides) { - s1= left; - s2= right; - } else { - s1= right; - s2= left; - } - - String fmt= Utilities.getString("DiffNode.nameFormat"); //$NON-NLS-1$ - return MessageFormat.format(fmt, new String[] { s1, s2 }); - } - - void swapSides(boolean swap) { - fSwapSides= swap; - } - - /* (non Javadoc) - * see ITypedElement.getImage - */ - public Image getImage() { - ITypedElement id= getId(); - if (id != null) - return id.getImage(); - return null; - } - - /* (non Javadoc) - * see ITypedElement.getType - */ - public String getType() { - ITypedElement id= getId(); - if (id != null) - return id.getType(); - return ITypedElement.UNKNOWN_TYPE; - } - - /* (non Javadoc) - * see ICompareInput.getAncestor - */ - public ITypedElement getAncestor() { - return fAncestor; - } - - /** - * Sets the left input to the given value. - * - * @param left the new value for the left input - */ - public void setLeft(ITypedElement left) { - fLeft= left; - } - - /* (non Javadoc) - * see ICompareInput.getLeft - */ - public ITypedElement getLeft() { - return fLeft; - } - - /** - * Sets the right input to the given value. - * - * @param right the new value for the right input - */ - public void setRight(ITypedElement right) { - fRight= right; - } - - /* (non Javadoc) - * see ICompareInput.getRight - */ - public ITypedElement getRight() { - return fRight; - } - - /* (non Javadoc) - * see ICompareInput.copy - */ - public void copy(boolean leftToRight) { - //System.out.println("DiffNode.copy: " + leftToRight); - - IDiffContainer pa= getParent(); - if (pa instanceof ICompareInput) { - ICompareInput parent= (ICompareInput) pa; - Object dstParent= leftToRight ? parent.getRight() : parent.getLeft(); - - if (dstParent instanceof IEditableContent) { - ITypedElement dst= leftToRight ? getRight() : getLeft(); - ITypedElement src= leftToRight ? getLeft() : getRight(); - dst= ((IEditableContent)dstParent).replace(dst, src); - if (leftToRight) - setRight(dst); - else - setLeft(dst); - - //setKind(Differencer.NO_CHANGE); - - fireChange(); - } - } - } - - /* (non Javadoc) - * see Object.hashCode - */ - public int hashCode() { - String[] path= getPath(this, 0); - int hashCode= 1; - for (int i= 0; i < path.length; i++) { - String s= path[i]; - hashCode= (31*hashCode) + (s != null ? s.hashCode() : 0); - } - return hashCode; - } - - /* (non Javadoc) - * see Object.equals - */ - public boolean equals(Object other) { - if (other != null && getClass() == other.getClass()) { - String[] path1= getPath(this, 0); - String[] path2= getPath((DiffNode) other, 0); - if (path1.length != path2.length) - return false; - for (int i= 0; i < path1.length; i++) - if (! path1[i].equals(path2[i])) - return false; - return true; - } - return super.equals(other); - } - - private static String[] getPath(ITypedElement el, int level) { - String[] path= null; - if (el instanceof IDiffContainer) { - IDiffContainer parent= ((IDiffContainer)el).getParent(); - if (parent instanceof ITypedElement) - path= getPath((ITypedElement)parent, level+1); - } - if (path == null) - path= new String[level+1]; - path[(path.length-1)-level]= el.getName(); - return path; - } -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java deleted file mode 100644 index 5e63ab230..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java +++ /dev/null @@ -1,719 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.util.Iterator; -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.util.*; -import org.eclipse.jface.action.*; -import org.eclipse.jface.viewers.*; - -import org.eclipse.compare.internal.*; -import org.eclipse.compare.*; - -/** - * A tree viewer that works on objects implementing - * the <code>IDiffContainer</code> and <code>IDiffElement</code> interfaces. - * <p> - * This class may be instantiated; it is not intended to be subclassed outside - * this package. - * </p> - * - * @see IDiffContainer - * @see IDiffElement - */ -public class DiffTreeViewer extends TreeViewer { - - static class DiffViewerSorter extends ViewerSorter { - - public boolean isSorterProperty(Object element, Object property) { - return false; - } - - public int category(Object node) { - if (node instanceof DiffNode) { - Object o= ((DiffNode) node).getId(); - if (o instanceof DocumentRangeNode) - return ((DocumentRangeNode) o).getTypeCode(); - } - return 0; - } - } - - class DiffViewerContentProvider implements ITreeContentProvider { - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - public boolean isDeleted(Object element) { - return false; - } - - public void dispose() { - inputChanged(DiffTreeViewer.this, getInput(), null); - } - - public Object getParent(Object element) { - if (element instanceof IDiffElement) - return ((IDiffElement)element).getParent(); - return null; - } - - public final boolean hasChildren(Object element) { - if (element instanceof IDiffContainer) - return ((IDiffContainer)element).hasChildren(); - return false; - } - - public final Object[] getChildren(Object element) { - if (element instanceof IDiffContainer) - return ((IDiffContainer)element).getChildren(); - return new Object[0]; - } - - public Object[] getElements(Object element) { - return getChildren(element); - } - } - - /* - * Takes care of swapping left and right if fLeftIsLocal - * is true. - */ - class DiffViewerLabelProvider extends LabelProvider { - - public String getText(Object element) { - - if (element instanceof IDiffElement) - return ((IDiffElement)element).getName(); - - return Utilities.getString(fBundle, "defaultLabel"); //$NON-NLS-1$ - } - - public Image getImage(Object element) { - if (element instanceof IDiffElement) { - IDiffElement input= (IDiffElement) element; - - int kind= input.getKind(); - if (fLeftIsLocal) { - switch (kind & Differencer.DIRECTION_MASK) { - case Differencer.LEFT: - kind= (kind &~ Differencer.LEFT) | Differencer.RIGHT; - break; - case Differencer.RIGHT: - kind= (kind &~ Differencer.RIGHT) | Differencer.LEFT; - break; - } - } - - return fCompareConfiguration.getImage(input.getImage(), kind); - } - return null; - } - } - - static class FilterSame extends ViewerFilter { - public boolean select(Viewer viewer, Object parentElement, Object element) { - if (element instanceof IDiffElement) - return (((IDiffElement)element).getKind() & Differencer.PSEUDO_CONFLICT) == 0; - return true; - } - public boolean isFilterProperty(Object element, Object property) { - return false; - } - } - - private ResourceBundle fBundle; - private CompareConfiguration fCompareConfiguration; - /* package */ boolean fLeftIsLocal; - private IPropertyChangeListener fPropertyChangeListener; - - private Action fCopyLeftToRightAction; - private Action fCopyRightToLeftAction; - private Action fEmptyMenuAction; - private Action fExpandAllAction; - - /** - * Creates a new viewer for the given SWT tree control with the specified configuration. - * - * @param tree the tree control - * @param configuration the configuration for this viewer - */ - public DiffTreeViewer(Tree tree, CompareConfiguration configuration) { - super(tree); - initialize(configuration); - } - - /** - * Creates a new viewer under the given SWT parent and with the specified configuration. - * - * @param parent the SWT control under which to create the viewer - * @param configuration the configuration for this viewer - */ - public DiffTreeViewer(Composite parent, CompareConfiguration configuration) { - super(new Tree(parent, SWT.MULTI)); - initialize(configuration); - } - - private void initialize(CompareConfiguration configuration) { - - Control tree= getControl(); - - INavigatable nav= new INavigatable() { - public boolean gotoDifference(boolean next) { - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - return internalNavigate(next, true); - } - }; - tree.setData(INavigatable.NAVIGATOR_PROPERTY, nav); - - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - IOpenable openable= new IOpenable() { - public void openSelected() { - internalOpen(); - } - }; - tree.setData(IOpenable.OPENABLE_PROPERTY, openable); - - fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false); //$NON-NLS-1$ - - tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle()); - - Composite parent= tree.getParent(); - - fBundle= ResourceBundle.getBundle("org.eclipse.compare.structuremergeviewer.DiffTreeViewerResources"); //$NON-NLS-1$ - - // register for notification with the CompareConfiguration - fCompareConfiguration= configuration; - if (fCompareConfiguration != null) { - fPropertyChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - DiffTreeViewer.this.propertyChange(event); - } - }; - fCompareConfiguration.addPropertyChangeListener(fPropertyChangeListener); - } - - setContentProvider(new DiffViewerContentProvider()); - setLabelProvider(new DiffViewerLabelProvider()); - - addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent se) { - updateActions(); - } - } - ); - - setSorter(new DiffViewerSorter()); - - ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(parent); - if (tbm != null) { - tbm.removeAll(); - - tbm.add(new Separator("merge")); //$NON-NLS-1$ - tbm.add(new Separator("modes")); //$NON-NLS-1$ - tbm.add(new Separator("navigation")); //$NON-NLS-1$ - - createToolItems(tbm); - updateActions(); - - tbm.update(true); - } - - MenuManager mm= new MenuManager(); - mm.setRemoveAllWhenShown(true); - mm.addMenuListener( - new IMenuListener() { - public void menuAboutToShow(IMenuManager mm) { - fillContextMenu(mm); - if (mm.isEmpty()) { - if (fEmptyMenuAction == null) { - fEmptyMenuAction= - new Action(Utilities.getString(fBundle, "emptyMenuItem")) {}; //$NON-NLS-1$ - fEmptyMenuAction.setEnabled(false); - } - mm.add(fEmptyMenuAction); - } - } - } - ); - tree.setMenu(mm.createContextMenu(tree)); - } - - /** - * Returns the viewer's name. - * - * @return the viewer's name - */ - public String getTitle() { - String title= Utilities.getString(fBundle, "title", null); //$NON-NLS-1$ - if (title == null) - title= Utilities.getString("DiffTreeViewer.title"); //$NON-NLS-1$ - return title; - } - - /** - * Returns the resource bundle. - * - * @return the viewer's resource bundle - */ - protected ResourceBundle getBundle() { - return fBundle; - } - - /** - * Returns the compare configuration of this viewer. - * - * @return the compare configuration of this viewer - */ - public CompareConfiguration getCompareConfiguration() { - return fCompareConfiguration; - } - - /** - * Called on the viewer disposal. - * Unregisters from the compare configuration. - * Clients may extend if they have to do additional cleanup. - */ - protected void handleDispose(DisposeEvent event) { - - if (fCompareConfiguration != null) { - if (fPropertyChangeListener != null) - fCompareConfiguration.removePropertyChangeListener(fPropertyChangeListener); - fCompareConfiguration= null; - } - fPropertyChangeListener= null; - - super.handleDispose(event); - } - - /** - * Tracks property changes of the configuration object. - * Clients may extend to track their own property changes. - */ - protected void propertyChange(PropertyChangeEvent event) { - } - - protected void inputChanged(Object in, Object oldInput) { - super.inputChanged(in, oldInput); - - if (in != oldInput) { - initialSelection(); - updateActions(); - } - } - - /** - * This hook method is called from within <code>inputChanged</code> - * after a new input has been set but before any controls are updated. - * This default implementation calls <code>navigate(true)</code> - * to select and expand the first leaf node. - * Clients can override this method and are free to decide whether - * they want to call the inherited method. - * - * @since 2.0 - */ - protected void initialSelection() { - navigate(true); - } - - /** - * Overridden to avoid expanding <code>DiffNode</code>s that shouldn't expand. - */ - protected void internalExpandToLevel(Widget node, int level) { - - Object data= node.getData(); - - if (dontExpand(data)) - return; - - super.internalExpandToLevel(node, level); - } - - /** - * This hook method is called from within <code>internalExpandToLevel</code> - * to control whether a given model node should be expanded or not. - * This default implementation checks whether the object is a <code>DiffNode</code> and - * calls <code>dontExpand()</code> on it. - * Clients can override this method and are free to decide whether - * they want to call the inherited method. - * - * @param o the model object to be expanded - * @return <code>false</code> if a node should be expanded, <code>true</code> to prevent expanding - * @since 2.0 - */ - protected boolean dontExpand(Object o) { - return o instanceof DiffNode && ((DiffNode)o).dontExpand(); - } - - //---- merge action support - - /** - * This factory method is called after the viewer's controls have been created. - * It installs four actions in the given <code>ToolBarManager</code>. Two actions - * allow for copying one side of a <code>DiffNode</code> to the other side. - * Two other actions are for navigating from one node to the next (previous). - * <p> - * Clients can override this method and are free to decide whether they want to call - * the inherited method. - * - * @param toolbarManager the toolbar manager for which to add the actions - */ - protected void createToolItems(ToolBarManager toolbarManager) { - -// fCopyLeftToRightAction= new Action() { -// public void run() { -// copySelected(true); -// } -// }; -// Utilities.initAction(fCopyLeftToRightAction, fBundle, "action.TakeLeft."); -// toolbarManager.appendToGroup("merge", fCopyLeftToRightAction); - -// fCopyRightToLeftAction= new Action() { -// public void run() { -// copySelected(false); -// } -// }; -// Utilities.initAction(fCopyRightToLeftAction, fBundle, "action.TakeRight."); -// toolbarManager.appendToGroup("merge", fCopyRightToLeftAction); - -// fNextAction= new Action() { -// public void run() { -// navigate(true); -// } -// }; -// Utilities.initAction(fNextAction, fBundle, "action.NextDiff."); //$NON-NLS-1$ -// toolbarManager.appendToGroup("navigation", fNextAction); //$NON-NLS-1$ - -// fPreviousAction= new Action() { -// public void run() { -// navigate(false); -// } -// }; -// Utilities.initAction(fPreviousAction, fBundle, "action.PrevDiff."); //$NON-NLS-1$ -// toolbarManager.appendToGroup("navigation", fPreviousAction); //$NON-NLS-1$ - } - - /** - * This method is called to add actions to the viewer's context menu. - * It installs actions for expanding tree nodes, copying one side of a <code>DiffNode</code> to the other side. - * Clients can override this method and are free to decide whether they want to call - * the inherited method. - * - * @param manager the menu manager for which to add the actions - */ - protected void fillContextMenu(IMenuManager manager) { - if (fExpandAllAction == null) { - fExpandAllAction= new Action() { - public void run() { - expandSelection(); - } - }; - Utilities.initAction(fExpandAllAction, fBundle, "action.ExpandAll."); //$NON-NLS-1$ - } - - boolean enable= false; - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - Iterator elements= ((IStructuredSelection)selection).iterator(); - while (elements.hasNext()) { - Object element= elements.next(); - if (element instanceof IDiffContainer) { - if (((IDiffContainer)element).hasChildren()) { - enable= true; - break; - } - } - } - } - fExpandAllAction.setEnabled(enable); - - manager.add(fExpandAllAction); - - if (fCopyLeftToRightAction != null) - manager.add(fCopyLeftToRightAction); - if (fCopyRightToLeftAction != null) - manager.add(fCopyRightToLeftAction); - } - - /** - * Expands to infinity all items in the selection. - * - * @since 2.0 - */ - protected void expandSelection() { - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - Iterator elements= ((IStructuredSelection)selection).iterator(); - while (elements.hasNext()) { - Object next= elements.next(); - expandToLevel(next, ALL_LEVELS); - } - } - } - - /** - * Copies one side of all <code>DiffNode</code>s in the current selection to the other side. - * Called from the (internal) actions for copying the sides of a <code>DiffNode</code>. - * Clients may override. - * - * @param leftToRight if <code>true</code> the left side is copied to the right side. - * If <code>false</code> the right side is copied to the left side - */ - protected void copySelected(boolean leftToRight) { - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - Iterator e= ((IStructuredSelection) selection).iterator(); - while (e.hasNext()) { - Object element= e.next(); - if (element instanceof ICompareInput) - copyOne((ICompareInput) element, leftToRight); - } - } - } - - /** - * Called to copy one side of the given node to the other. - * This default implementation delegates the call to <code>ICompareInput.copy(...)</code>. - * Clients may override. - * - * @param leftToRight if <code>true</code> the left side is copied to the right side. - * If <code>false</code> the right side is copied to the left side - */ - protected void copyOne(ICompareInput node, boolean leftToRight) { - - node.copy(leftToRight); - - // update node's image - update(new Object[] { node }, null); - } - - /** - * Selects the next (or previous) node of the current selection. - * If there is no current selection the first (last) node in the tree is selected. - * Wraps around at end or beginning. - * Clients may override. - * - * @param next if <code>true</code> the next node is selected, otherwise the previous node - */ - protected void navigate(boolean next) { - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - internalNavigate(next, false); - } - - //---- private - - /** - * Selects the next (or previous) node of the current selection. - * If there is no current selection the first (last) node in the tree is selected. - * Wraps around at end or beginning. - * Clients may override. - * - * @param next if <code>true</code> the next node is selected, otherwise the previous node - * @return <code>true</code> if at end (or beginning) - */ - private boolean internalNavigate(boolean next, boolean fireOpen) { - - Control c= getControl(); - if (!(c instanceof Tree)) - return false; - - Tree tree= (Tree) c; - TreeItem item= null; - TreeItem children[]= tree.getSelection(); - if (children != null && children.length > 0) - item= children[0]; - if (item == null) { - children= tree.getItems(); - if (children != null && children.length > 0) { - item= children[0]; - if (item != null && item.getItemCount() <= 0) { - internalSetSelection(item, fireOpen); // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - return false; - } - } - } - - while (true) { - item= findNextPrev(item, next); - if (item == null) - break; - if (item.getItemCount() <= 0) - break; - } - - if (item != null) { - internalSetSelection(item, fireOpen); // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - return false; - } - return true; - } - - private TreeItem findNextPrev(TreeItem item, boolean next) { - - if (item == null) - return null; - - TreeItem children[]= null; - - if (!next) { - - TreeItem parent= item.getParentItem(); - if (parent != null) - children= parent.getItems(); - else - children= item.getParent().getItems(); - - if (children != null && children.length > 0) { - // goto previous child - int index= 0; - for (; index < children.length; index++) - if (children[index] == item) - break; - - if (index > 0) { - - item= children[index-1]; - - while (true) { - createChildren(item); - int n= item.getItemCount(); - if (n <= 0) - break; - - item.setExpanded(true); - item= item.getItems()[n-1]; - } - - // previous - return item; - } - } - - // go up - return parent; - - } else { - item.setExpanded(true); - createChildren(item); - - if (item.getItemCount() > 0) { - // has children: go down - children= item.getItems(); - return children[0]; - } - - while (item != null) { - children= null; - TreeItem parent= item.getParentItem(); - if (parent != null) - children= parent.getItems(); - else - children= item.getParent().getItems(); - - if (children != null && children.length > 0) { - // goto next child - int index= 0; - for (; index < children.length; index++) - if (children[index] == item) - break; - - if (index < children.length-1) { - // next - return children[index+1]; - } - } - - // go up - item= parent; - } - } - - return item; - } - - private void internalSetSelection(TreeItem ti, boolean fireOpen) { - if (ti != null) { - Object data= ti.getData(); - if (data != null) { - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - ISelection selection= new StructuredSelection(data); - setSelection(selection, true); - ISelection currentSelection= getSelection(); - if (fireOpen && currentSelection != null && selection.equals(currentSelection)) { - fireOpen(new OpenEvent(this, selection)); - } - } - } - } - - private final boolean isEditable(Object element, boolean left) { - if (element instanceof ICompareInput) { - ICompareInput diff= (ICompareInput) element; - Object side= left ? diff.getLeft() : diff.getRight(); - if (side == null && diff instanceof IDiffElement) { - IDiffContainer container= ((IDiffElement)diff).getParent(); - if (container instanceof ICompareInput) { - ICompareInput parent= (ICompareInput) container; - side= left ? parent.getLeft() : parent.getRight(); - } - } - if (side instanceof IEditableContent) - return ((IEditableContent) side).isEditable(); - } - return false; - } - - private void updateActions() { - int leftToRight= 0; - int rightToLeft= 0; - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection) selection; - Iterator e= ss.iterator(); - while (e.hasNext()) { - Object element= e.next(); - if (element instanceof ICompareInput) { - if (isEditable(element, false)) - leftToRight++; - if (isEditable(element, true)) - rightToLeft++; - if (leftToRight > 0 && rightToLeft > 0) - break; - } - } - if (fExpandAllAction != null) - fExpandAllAction.setEnabled(selection.isEmpty()); - } - if (fCopyLeftToRightAction != null) - fCopyLeftToRightAction.setEnabled(leftToRight > 0); - if (fCopyRightToLeftAction != null) - fCopyRightToLeftAction.setEnabled(rightToLeft > 0); - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private void internalOpen() { - ISelection selection= getSelection(); - if (selection != null && !selection.isEmpty()) { - fireOpen(new OpenEvent(this, selection)); - } - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties deleted file mode 100644 index 1691840e2..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties +++ /dev/null @@ -1,53 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)DiffTreeViewerResources.properties -# -# Resource strings for DiffTreeViewer.java - -title= Structure Compare -defaultLabel= <no name> - -##################################################### -# Dummy menu item for empty context menu -##################################################### - -emptyMenuItem= <Empty Menu> - -##################################################### -# Actions -##################################################### - -action.Smart.label=Smart -action.Smart.tooltip=Guess Similar Elements -action.Smart.image=smartmode_co.gif - -action.ExpandAll.label=Expand All -action.ExpandAll.tooltip=Expand All Nodes - -action.CompareContents.label= Show Content Comparison -action.CompareContents.tooltip= Show content comparison - -action.NextDiff.label=Next -action.NextDiff.tooltip=Select Next Change -action.NextDiff.image=next_nav.gif - -action.PrevDiff.label=Previous -action.PrevDiff.tooltip=Select Previous Change -action.PrevDiff.image=prev_nav.gif - -action.TakeLeft.label=Copy Left to Right -action.TakeLeft.tooltip=Copy Selected Nodes from Left to Right -action.TakeLeft.image=copycont_r_co.gif - -action.TakeRight.label=Copy Right to Left -action.TakeRight.tooltip=Copy Selected Nodes from Right to Left -action.TakeRight.image=copycont_l_co.gif diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java deleted file mode 100644 index e71152b6a..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java +++ /dev/null @@ -1,522 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.io.*; -import java.util.*; -import java.text.MessageFormat; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.Utilities; - - -/** - * A generic two-way or three-way differencing engine. - * <p> - * The engine is used by calling one of the <code>findDifferences</code> methods and passing - * in the objects to compare. - * The engine calls the following methods on the input objects to perform the compare: - * <UL> - * <LI><code>getChildren</code>: for enumerating the children of an object (if any), - * <LI><code>contentsEqual</code>: for comparing the content of leaf objects, that is, objects without children, - * <LI><code>visit</code>: for every pair of compared object the compare result is passed in. - * </UL> - * Clients may use as is, or subclass to provide a custom implementation for the three hooks. - * However the default implementation already deals with the typical case: - * <UL> - * <LI><code>getChildren</code>: tries to apply the <code>IStructureComparator</code> - * interface to enumerate the children, - * <LI><code>contentsEqual</code>: tries to apply the <code>IStreamContentAccessor</code> interface - * to perform a byte-wise content comparison, - * <LI><code>visit</code>: creates a <code>DiffNode</code> for any detected difference between the compared objects and - * links it under a parent node effectively creating a tree of differences. - * </UL> - * The different kind of changes detected by the engine are decoded as follows: - * In the two-way case only NO_CHANGE, ADDITION, DELETION, and CHANGE are used. - * In the three-way case these constants are bitwise ORed with one of directional constants - * LEFT, RIGHT, and CONFLICTING. - */ -public class Differencer { - - // The kind of differences. - /** - * Difference constant (value 0) indicating no difference. - */ - public static final int NO_CHANGE= 0; - /** - * Difference constant (value 1) indicating one side was added. - */ - public static final int ADDITION= 1; - /** - * Difference constant (value 2) indicating one side was removed. - */ - public static final int DELETION= 2; - /** - * Difference constant (value 3) indicating side changed. - */ - public static final int CHANGE= 3; - - /** - * Bit mask (value 3) for extracting the kind of difference. - */ - public static final int CHANGE_TYPE_MASK= 3; - - // The direction of a three-way change. - /** - * Three-way change constant (value 4) indicating a change on left side. - */ - public static final int LEFT= 4; - - /** - * Three-way change constant (value 8) indicating a change on right side. - */ - public static final int RIGHT= 8; - - /** - * Three-way change constant (value 12) indicating a change on left and - * right sides. - */ - public static final int CONFLICTING= 12; - - /** - * Bit mask (value 12) for extracting the direction of a three-way change. - */ - public static final int DIRECTION_MASK= 12; - - /** - * Constant (value 16) indicating a change on left and - * right side (with respect to ancestor) but left and right are identical. - */ - public static final int PSEUDO_CONFLICT= 16; - - - static class Node { - List fChildren; - int fCode; - Object fAncestor; - Object fLeft; - Object fRight; - - Node() { - } - Node(Node parent, Object ancestor, Object left, Object right) { - parent.add(this); - fAncestor= ancestor; - fLeft= left; - fRight= right; - } - void add(Node child) { - if (fChildren == null) - fChildren= new ArrayList(); - fChildren.add(child); - } - Object visit(Differencer d, Object parent, int level) { - if (fCode == NO_CHANGE) - return null; - //dump(level); - Object data= d.visit(parent, fCode, fAncestor, fLeft, fRight); - if (fChildren != null) { - Iterator i= fChildren.iterator(); - while (i.hasNext()) { - Node n= (Node) i.next(); - n.visit(d, data, level+1); - } - } - return data; - } -// private void dump(int level) { -// String name= null; -// if (fAncestor instanceof ITypedElement) -// name= ((ITypedElement)fAncestor).getName(); -// if (name == null && fLeft instanceof ITypedElement) -// name= ((ITypedElement)fLeft).getName(); -// if (name == null && fRight instanceof ITypedElement) -// name= ((ITypedElement)fRight).getName(); -// if (name == null) -// name= "???"; //$NON-NLS-1$ -// -// for (int i= 0; i < level; i++) -// System.out.print(" "); //$NON-NLS-1$ -// -// System.out.println(getDiffType(fCode) + name); -// } - -// private String getDiffType(int code) { -// String dir= " "; //$NON-NLS-1$ -// switch (code & DIRECTION_MASK) { -// case LEFT: -// dir= ">"; //$NON-NLS-1$ -// break; -// case RIGHT: -// dir= "<"; //$NON-NLS-1$ -// break; -// case CONFLICTING: -// dir= "!"; //$NON-NLS-1$ -// break; -// } -// String change= "="; //$NON-NLS-1$ -// switch (code & CHANGE_TYPE_MASK) { -// case ADDITION: -// change= "+"; //$NON-NLS-1$ -// break; -// case DELETION: -// change= "-"; //$NON-NLS-1$ -// break; -// case CHANGE: -// change= "#"; //$NON-NLS-1$ -// break; -// } -// return dir + change + " "; //$NON-NLS-1$ -// } - } - - /** - * Creates a new differencing engine. - */ - public Differencer() { - } - - /** - * Starts the differencing engine on the three input objects. If threeWay is <code>true</code> a - * three-way comparison is performed, otherwise a two-way compare (in the latter case the ancestor argument is ignored). - * The progress monitor is passed to the method <code>updateProgress</code> which is called for every node or - * leaf compare. The method returns the object that was returned from the top-most call to method <code>visit</code>. - * At most two of the ancestor, left, and right parameters are allowed to be <code>null</code>. - * - * @param threeWay if <code>true</code> a three-way comparison is performed, otherwise a two-way compare - * @param pm a progress monitor which is passed to method <code>updateProgress</code> - * @param data a client data that is passed to the top-level call to <code>visit</code> - * @param ancestor the ancestor object of the compare (may be <code>null</code>) - * @param left the left object of the compare - * @param right the right object of the compare - * @return the object returned from the top most call to method <code>visit</code>, - * possibly <code>null</code> - */ - public Object findDifferences(boolean threeWay, IProgressMonitor pm, Object data, Object ancestor, Object left, Object right) { - - Node root= new Node(); - - int code= traverse(threeWay, root, pm, threeWay ? ancestor : null, left, right); - - if (code != NO_CHANGE) { - List l= root.fChildren; - if (l.size() > 0) { - Node first= (Node)l.get(0); - return first.visit(this, data, 0); - } - } - return null; - } - - /** - * Traverse tree in postorder. - */ - private int traverse(boolean threeWay, Node parent, IProgressMonitor pm, Object ancestor, Object left, Object right) { - - Object[] ancestorChildren= getChildren(ancestor); - Object[] rightChildren= getChildren(right); - Object[] leftChildren= getChildren(left); - - int code= NO_CHANGE; - - Node node= new Node(parent, ancestor, left, right); - - boolean content= true; // we reset this if we have at least one child - - if (((threeWay && ancestorChildren != null) || !threeWay) - && rightChildren != null && leftChildren != null) { - // we only recurse down if no leg is null - // a node - - Set allSet= new HashSet(20); - Map ancestorSet= null; - Map rightSet= null; - Map leftSet= null; - - if (ancestorChildren != null) { - ancestorSet= new HashMap(10); - for (int i= 0; i < ancestorChildren.length; i++) { - Object ancestorChild= ancestorChildren[i]; - ancestorSet.put(ancestorChild, ancestorChild); - allSet.add(ancestorChild); - } - } - - if (rightChildren != null) { - rightSet= new HashMap(10); - for (int i= 0; i < rightChildren.length; i++) { - Object rightChild= rightChildren[i]; - rightSet.put(rightChild, rightChild); - allSet.add(rightChild); - } - } - - if (leftChildren != null) { - leftSet= new HashMap(10); - for (int i= 0; i < leftChildren.length; i++) { - Object leftChild= leftChildren[i]; - leftSet.put(leftChild, leftChild); - allSet.add(leftChild); - } - } - - Iterator e= allSet.iterator(); - while (e.hasNext()) { - Object keyChild= e.next(); - - content= false; - - if (pm != null) { - - if (pm.isCanceled()) - throw new OperationCanceledException(); - - updateProgress(pm, keyChild); - } - - Object ancestorChild= ancestorSet != null ? ancestorSet.get(keyChild) : null; - Object leftChild= leftSet != null ? leftSet.get(keyChild) : null; - Object rightChild= rightSet != null ? rightSet.get(keyChild) : null; - - int c= traverse(threeWay, node, pm, ancestorChild, leftChild, rightChild); - - if ((c & CHANGE_TYPE_MASK) != NO_CHANGE) { - code|= CHANGE; // deletions and additions of child result in a change of the container - code|= (c & DIRECTION_MASK); // incoming & outgoing are just ored - } - } - } - - if (content) // a leaf - code= compare(threeWay, ancestor, left, right); - - node.fCode= code; - - return code; - } - - /** - * Called for every node or leaf comparison. - * The differencing engine passes in the input objects of the compare and the result of the compare. - * The data object is the value returned from a call to the <code>visit</code> method on the parent input. - * It can be considered the "parent" reference and is useful when building a tree. - * <p> - * The <code>Differencer</code> implementation returns a new - * <code>DiffNode</code> which is initialized with the corresponding values. - * Subclasses may override. - * - * @param data object returned from parent call to <code>visit</code>, - * possibly <code>null</code> - * @param result the result of the compare operation performed on the three inputs - * @param ancestor the compare ancestor of the left and right inputs - * @param left the left input to the compare - * @param right the right input to the compare - * @return the result, possibly <code>null</code> - */ - protected Object visit(Object data, int result, Object ancestor, Object left, Object right) { - return new DiffNode((IDiffContainer) data, result, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right); - } - - /** - * Performs a 2-way or 3-way compare of the given leaf elements and returns an integer - * describing the kind of difference. - */ - private int compare(boolean threeway, Object ancestor, Object left, Object right) { - - int description= NO_CHANGE; - - if (threeway) { - if (ancestor == null) { - if (left == null) { - if (right == null) { - Assert.isTrue(false); - // shouldn't happen - } else { - description= RIGHT | ADDITION; - } - } else { - if (right == null) { - description= LEFT | ADDITION; - } else { - description= CONFLICTING | ADDITION; - if (contentsEqual(left, right)) - description|= PSEUDO_CONFLICT; - } - } - } else { - if (left == null) { - if (right == null) { - description= CONFLICTING | DELETION | PSEUDO_CONFLICT; - } else { - if (contentsEqual(ancestor, right)) - description= LEFT | DELETION; - else - description= CONFLICTING | CHANGE; - } - } else { - if (right == null) { - if (contentsEqual(ancestor, left)) - description= RIGHT | DELETION; - else - description= CONFLICTING | CHANGE; - } else { - boolean ay= contentsEqual(ancestor, left); - boolean am= contentsEqual(ancestor, right); - - if (ay && am) - ; - else if (ay && !am) { - description= RIGHT | CHANGE; - } else if (!ay && am) { - description= LEFT | CHANGE; - } else { - description= CONFLICTING | CHANGE; - if (contentsEqual(left, right)) - description|= PSEUDO_CONFLICT; - } - } - } - } - } else { // two way compare ignores ancestor - if (left == null) { - if (right == null) { - Assert.isTrue(false); - // shouldn't happen - } else { - description= ADDITION; - } - } else { - if (right == null) { - description= DELETION; - } else { - if (! contentsEqual(left, right)) - description= CHANGE; - } - } - } - - return description; - } - - /** - * Performs a content compare on the two given inputs. - * <p> - * The <code>Differencer</code> implementation - * returns <code>true</code> if both inputs implement <code>IStreamContentAccessor</code> - * and their byte contents is identical. Subclasses may override to implement - * a different content compare on the given inputs. - * </p> - * - * @param input1 first input to contents compare - * @param input2 second input to contents compare - * @return <code>true</code> if content is equal - */ - protected boolean contentsEqual(Object input1, Object input2) { - - if (input1 == input2) - return true; - - InputStream is1= getStream(input1); - InputStream is2= getStream(input2); - - if (is1 == null && is2 == null) // no byte contents - return true; - - try { - if (is1 == null || is2 == null) // only one has contents - return false; - - while (true) { - int c1= is1.read(); - int c2= is2.read(); - if (c1 == -1 && c2 == -1) - return true; - if (c1 != c2) - break; - - } - } catch (IOException ex) { - } finally { - if (is1 != null) { - try { - is1.close(); - } catch(IOException ex) { - } - } - if (is2 != null) { - try { - is2.close(); - } catch(IOException ex) { - } - } - } - return false; - } - - /** - * Tries to return an InputStream for the given object. - * Returns <code>null</code> if the object not an IStreamContentAccessor - * or an error occured. - */ - private InputStream getStream(Object o) { - if (o instanceof IStreamContentAccessor) { - try { - return ((IStreamContentAccessor)o).getContents(); - } catch(CoreException ex) { - } - } - return null; - } - - /** - * Returns the children of the given input or <code>null</code> if there are no children. - * <p> - * The <code>Differencer</code> implementation checks whether the input - * implements the <code>IStructureComparator</code> interface. If yes it is used - * to return an array containing all children. Otherwise <code>null</code> is returned. - * Subclasses may override to implement a different strategy to enumerate children. - * </p> - * - * @param input the object for which to return children - */ - protected Object[] getChildren(Object input) { - if (input instanceof IStructureComparator) - return ((IStructureComparator)input).getChildren(); - return null; - } - - /** - * Called for every leaf or node compare to update progress information. - * <p> - * The <code>Differencer</code> implementation shows the name of the input object - * as a subtask. Subclasses may override. - * </p> - * - * @param progressMonitor the progress monitor for reporting progress - * @param node the currently processed non-<code>null</code> node - */ - protected void updateProgress(IProgressMonitor progressMonitor, Object node) { - if (node instanceof ITypedElement) { - String name= ((ITypedElement)node).getName(); - String fmt= Utilities.getString("Differencer.progressFormat"); //$NON-NLS-1$ - String msg= MessageFormat.format(fmt, new String[] { name }); - progressMonitor.subTask(msg); - //progressMonitor.worked(1); - } - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java deleted file mode 100644 index 20044c731..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java +++ /dev/null @@ -1,342 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.ArrayList; - -import org.eclipse.jface.text.*; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.*; -import org.eclipse.compare.internal.Utilities; -import org.eclipse.compare.contentmergeviewer.IDocumentRange; - - -/** - * A document range node represents a structural element - * when performing a structure compare of documents. - * <code>DocumentRangeNodes</code> are created while parsing the document and represent - * a semantic entity (e.g. a Java class or method). - * As a consequence of the parsing a <code>DocumentRangeNode</code> maps to a range - * of characters in the document. - * <p> - * Since a <code>DocumentRangeNode</code> implements the <code>IStructureComparator</code> - * and <code>IStreamContentAccessor</code> interfaces it can be used as input to the - * differencing engine. This makes it possible to perform - * a structural diff on a document and have the nodes and leaves of the compare easily map - * to character ranges within the document. - * <p> - * Subclasses may add additional state collected while parsing the document. - * </p> - * @see Differencer - */ -public class DocumentRangeNode - implements IDocumentRange, IStructureComparator, IEditableContent, IStreamContentAccessor { - - private static final boolean POS_UPDATE= true; - - private IDocument fBaseDocument; - private Position fRange; // the range in the base document - private int fTypeCode; - private String fID; - private Position fAppendPosition; // a position where to insert a child textually - private ArrayList fChildren; - - /** - * Creates a new <code>DocumentRangeNode</code> for the given range within the specified - * document. The <code>typeCode</code> is uninterpreted client data. The ID is used when comparing - * two nodes with each other: i.e. the differencing engine performs a content compare - * on two nodes if their IDs are equal. - * - * @param typeCode a type code for this node - * @param id an identifier for this node - * @param document document on which this node is based on - * @param start start position of range within document - * @param length length of range - */ - public DocumentRangeNode(int typeCode, String id, IDocument document, int start, int length) { - - fTypeCode= typeCode; - fID= id; - - fBaseDocument= document; - fBaseDocument.addPositionCategory(RANGE_CATEGORY); - fRange= new Position(start, length); - - if (POS_UPDATE) { - try { - document.addPosition(RANGE_CATEGORY, fRange); - } catch (BadPositionCategoryException ex) { - } catch (BadLocationException ex) { - } - } - } - - /* (non Javadoc) - * see IDocumentRange.getDocument - */ - public IDocument getDocument() { - return fBaseDocument; - } - - /* (non Javadoc) - * see IDocumentRange.getRange - */ - public Position getRange() { - return fRange; - } - - /** - * Returns the type code of this node. - * The type code is uninterpreted client data which can be set in the constructor. - * - * @return the type code of this node - */ - public int getTypeCode() { - return fTypeCode; - } - - /** - * Returns this node's id. - * It is used in <code>equals</code> and <code>hashcode</code>. - * - * @return the node's id - */ - public String getId() { - return fID; - } - - /** - * Sets this node's id. - * It is used in <code>equals</code> and <code>hashcode</code>. - * - * @param id the new id for this node - */ - public void setId(String id) { - fID= id; - } - - /** - * Adds the given node as a child. - * - * @param node the node to add as a child - */ - public void addChild(DocumentRangeNode node) { - if (fChildren == null) - fChildren= new ArrayList(); - fChildren.add(node); - } - - /* (non Javadoc) - * see IStructureComparator.getChildren - */ - public Object[] getChildren() { - if (fChildren != null) - return fChildren.toArray(); - return new Object[0]; - } - - /** - * Sets the length of the range of this node. - * - * @param length the length of the range - */ - public void setLength(int length) { - getRange().setLength(length); - } - - /** - * Sets a position within the document range that can be used to (legally) insert - * text without breaking the syntax of the document. - * <p> - * E.g. when parsing a Java document the "append position" of a <code>DocumentRangeNode</code> - * representating a Java class could be the character position just before the closing bracket. - * Inserting the text of a new method there would not disturb the syntax of the class. - * - * @param pos the character position within the underlying document where text can be legally inserted - */ - public void setAppendPosition(int pos) { - if (POS_UPDATE) { - fBaseDocument.removePosition(fAppendPosition); - try { - Position p= new Position(pos); - fBaseDocument.addPosition(RANGE_CATEGORY, p); - fAppendPosition= p; - } catch (BadPositionCategoryException ex) { - } catch (BadLocationException ex) { - // ignore - } - } else { - fAppendPosition= new Position(pos); - } - } - - /** - * Returns the position that has been set with <code>setAppendPosition</code>. - * If <code>setAppendPosition</code> hasn't been called, the position after the last character - * of this range is returned. - * - * @return a position where text can be legally inserted - */ - public Position getAppendPosition() { - if (fAppendPosition == null) { - if (POS_UPDATE) { - try { - Position p= new Position(fBaseDocument.getLength()); - fBaseDocument.addPosition(RANGE_CATEGORY, p); - fAppendPosition= p; - } catch (BadPositionCategoryException ex) { - } catch (BadLocationException ex) { - // ignore - } - } else { - fAppendPosition= new Position(fBaseDocument.getLength()); - } - } - return fAppendPosition; - } - - /** - * Implementation based on <code>getID</code>. - */ - public boolean equals(Object other) { - if (other != null && other.getClass() == getClass()) { - DocumentRangeNode tn= (DocumentRangeNode) other; - return fTypeCode == tn.fTypeCode && fID.equals(tn.fID); - } - return super.equals(other); - } - - /** - * Implementation based on <code>getID</code>. - */ - public int hashCode() { - return fID.hashCode(); - } - - /** - * Find corresponding position - */ - private Position findCorrespondingPosition(DocumentRangeNode otherParent, DocumentRangeNode child) { - - // we try to find a predecessor of left Node which exists on the right side - - if (child != null && fChildren != null) { - int ix= otherParent.fChildren.indexOf(child); - if (ix >= 0) { - - for (int i= ix - 1; i >= 0; i--) { - DocumentRangeNode c1= (DocumentRangeNode) otherParent.fChildren.get(i); - int i2= fChildren.indexOf(c1); - if (i2 >= 0) { - DocumentRangeNode c= (DocumentRangeNode) fChildren.get(i2); - //System.out.println(" found corresponding: " + i2 + " " + c); - Position p= c.fRange; - - //try { - Position po= new Position(p.getOffset() + p.getLength() + 1, 0); - //c.fBaseDocument.addPosition(RANGE_CATEGORY, po); - return po; - //} catch (BadLocationException ex) { - //} - //break; - } - } - - for (int i= ix; i < otherParent.fChildren.size(); i++) { - DocumentRangeNode c1= (DocumentRangeNode) otherParent.fChildren.get(i); - int i2= fChildren.indexOf(c1); - if (i2 >= 0) { - DocumentRangeNode c= (DocumentRangeNode) fChildren.get(i2); - //System.out.println(" found corresponding: " + i2 + " " + c); - Position p= c.fRange; - //try { - Position po= new Position(p.getOffset(), 0); - //c.fBaseDocument.addPosition(RANGE_CATEGORY, po); - return po; - //} catch (BadLocationException ex) { - //} - //break; - } - } - - } - } - return getAppendPosition(); - } - - private void add(String s, DocumentRangeNode parent, DocumentRangeNode child) { - - Position p= findCorrespondingPosition(parent, child); - if (p != null) { - try { - fBaseDocument.replace(p.getOffset(), p.getLength(), s); - } catch (BadLocationException ex) { - // ignore - } - } - } - - /* (non Javadoc) - * see IStreamContentAccessor.getContents - */ - public InputStream getContents() { - String s; - try { - s= fBaseDocument.get(fRange.getOffset(), fRange.getLength()); - } catch (BadLocationException ex) { - s= ""; //$NON-NLS-1$ - } - return new ByteArrayInputStream(Utilities.getBytes(s)); - } - - /* (non Javadoc) - * see IEditableContent.isEditable - */ - public boolean isEditable() { - return true; - } - - /* (non Javadoc) - * see IEditableContent.replace - */ - public ITypedElement replace(ITypedElement child, ITypedElement other) { - - DocumentRangeNode src= null; - String srcContents= ""; //$NON-NLS-1$ - - if (other != null) { - src= (DocumentRangeNode) child; - - if (other instanceof IStreamContentAccessor) { - try { - InputStream is= ((IStreamContentAccessor)other).getContents(); - srcContents= Utilities.readString(is); - } catch(CoreException ex) { - } - } - } - - if (child == null) // no destination: we have to add the contents into the parent - add(srcContents, null, src); - - return child; - } - - /* (non Javadoc) - * see IEditableContent.setContent - */ - public void setContent(byte[] content) { - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java deleted file mode 100644 index 39947707d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import org.eclipse.compare.ITypedElement; -import org.eclipse.swt.graphics.Image; - -/** - * Interface for objects used as input to a two-way or three-way compare viewer. - * It defines API for accessing the three sides for the compare, - * and a name and image which is used when displaying the three way input - * in the UI, for example, in a title bar. - * <p> - * Note: at most two sides of an <code>ICompareInput</code> can be <code>null</code>, - * (as it is normal for additions or deletions) but not all three. - * <p> - * <code>ICompareInput</code> provides methods for registering - * <code>ICompareInputChangeListener</code>s - * that get informed if one (or more) - * of the three sides of an <code>ICompareInput</code> object changes its value. - * <p> - * For example when accepting an incoming addition - * the (non-<code>null</code>) left side of an <code>ICompareInput</code> - * is copied to the right side by means of method <code>copy</code>. - * This should trigger a call to <code>compareInputChanged</code> of registered - * <code>ICompareInputChangeListener</code>s. - * <p> - * Clients can implement this interface, or use the convenience implementation - * <code>DiffNode</code>. - * </p> - * - * @see StructureDiffViewer - * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer - * @see DiffNode - */ -public interface ICompareInput { - - /** - * Returns name of input. - * This name is displayed when this input is shown in a viewer. - * In many cases this name is the name of one of the non-<code>null</code> sides or a combination - * thereof. - * - * @return name of input - */ - String getName(); - - /** - * Returns an image representing this input. - * This image is typically displayed when this input is shown in a viewer. - * In many cases this image is the image of one of the non-<code>null</code> sides. - * - * @return image representing this input, or <code>null</code> if no icon should be shown - */ - Image getImage(); - - /** - * Returns the kind of difference between the - * three sides ancestor, left and right. - * This field is only meaningful if the <code>ICompareInput</code> - * is the result of another compare. In this case it is used - * together with <code>getImage</code> to compose a icon - * which reflects the kind of difference between the two or three elements. - * - * @return kind of difference (see <code>Differencer</code>) - */ - int getKind(); - - /** - * Returns the ancestor side of this input. - * Returns <code>null</code> if this input has no ancestor - * or in the two-way compare case. - * - * @return the ancestor of this input, or <code>null</code> - */ - ITypedElement getAncestor(); - - /** - * Returns the left side of this input. - * Returns <code>null</code> if there is no left side (deletion or addition). - * - * @return the left side of this input, or <code>null</code> - */ - ITypedElement getLeft(); - - /** - * Returns the right side of this input. - * Returns <code>null</code> if there is no right side (deletion or addition). - * - * @return the right side of this input, or <code>null</code> - */ - ITypedElement getRight(); - - /** - * Registers the given listener for notification. - * If the identical listener is already registered the method has no effect. - * - * @param listener the listener to register for changes of this input - */ - void addCompareInputChangeListener(ICompareInputChangeListener listener); - - /** - * Unregisters the given listener. - * If the identical listener is not registered the method has no effect. - * - * @param listener the listener to unregister - */ - void removeCompareInputChangeListener(ICompareInputChangeListener listener); - - /** - * Copy one side (source) to the other side (destination) depending on the - * value of <code>leftToRight</code>. This method is called from - * a merge viewer if a corresponding action ("take left" or "take right") - * has been pressed. - * <p> - * The implementation should handle the following cases: - * <UL> - * <LI> - * if the source side is <code>null</code> the destination must be deleted, - * <LI> - * if the destination is <code>null</code> the destination must be created - * and filled with the contents from the source, - * <LI> - * if both sides are non-<code>null</code> the contents of source must be copied to destination. - * </UL> - * In addition the implementation should send out notification to the registered - * <code>ICompareInputChangeListener</code>. - * - * @param leftToRight if <code>true</code> the left side is copied to the right side. - * If <code>false</code> the right side is copied to the left side - */ - void copy(boolean leftToRight); -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java deleted file mode 100644 index 4cb79df1a..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -/** - * Listener that gets informed if one (or more) - * of the three sides of an <code>ICompareInput</code> object changes its value. - * <p> - * For example when accepting an incoming addition - * the (non-null) left side of an <code>ICompareInput</code> - * is copied to the right side (which was <code>null</code>). - * This triggers a call to <code>compareInputChanged</code> of registered - * <code>ICompareInputChangeListener</code>. - * <p> - * Note however, that listener are not informed if the content of one of the sides changes. - * <p> - * Clients may implement this interface. It is also implemented by viewers that take - * an <code>ICompareInput</code> as input. - * </p> - */ -public interface ICompareInputChangeListener { - - /** - * Called whenever the value (not the content) of one or more of the three sides - * of a <code>ICompareInput</code> has changed. - * - * @param source the <code>ICompareInput</code> that has changed - */ - void compareInputChanged(ICompareInput source); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java deleted file mode 100644 index bda0662fa..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -/** - * <code>IDiffContainer</code> is a <code>IDiffElement</code> with children. - * <p> - * <code>IDiffContainer</code> are the inner nodes displayed - * by the <code>DiffTreeViewer</code>. - * <code>IDiffContainer</code> are typically created as the result of performing - * a compare with the <code>Differencer</code>. - * <p> - * Clients may implement this interface, or use one of the standard implementations, - * <code>DiffContainer</code> or <code>DiffNode</code>. - * - * @see Differencer - * @see DiffTreeViewer - */ -public interface IDiffContainer extends IDiffElement { - - /** - * Returns whether this container has at least one child. - * In some cases this methods avoids having to call the - * potential more costly <code>getChildren</code> method. - * - * @return <code>true</code> if this container has at least one child - */ - boolean hasChildren(); - - /** - * Returns the children of this container. - * If this container has no children an empty array is returned (not <code>null</code>). - * - * @return the children of this container as an array - */ - IDiffElement[] getChildren(); - - /** - * Adds the given child to this container. - * If the child is already contained in this container, this method has no effect. - * - * @param child the child to be added to this container - */ - void add(IDiffElement child); - - /** - * Removes the given child from this container. - * If the container becomes empty it is removed from its container. - * If the child is not contained in this container, this method has no effect. - * - * @param child the child to be removed from this container - */ - void removeToRoot(IDiffElement child); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java deleted file mode 100644 index f70b7eb3f..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import org.eclipse.compare.ITypedElement; - -/** - * An <code>IDiffElement</code> is used in the <code>DiffTreeViewer</code> - * to display the kind of change detected as the result of a two-way or three-way compare. - * <p> - * The base interface <code>ITypedElement</code> provides a name, a type, and an image. - * <code>IDiffElement</code> adds API for maintaining a parent relationship. - * <p> - * <code>DiffTreeViewer</code> works on a tree of <code>IDiffElements</code>. - * Leaf elements must implement the - * <code>IDiffElement</code> interface, inner nodes the <code>IDiffContainer</code> interface. - * <p> - * <code>IDiffElement</code>s are typically created as the result of performing - * a compare with the <code>Differencer</code>. - * <p> - * Clients may implement this interface, or use one of the standard implementations, - * <code>DiffElement</code>, <code>DiffContainer</code>, or <code>DiffNode</code>. - * - * @see DiffTreeViewer - * @see DiffElement - * @see DiffContainer - * @see DiffNode - */ -public interface IDiffElement extends ITypedElement { - - /** - * Returns the kind of difference as defined in <code>Differencer</code>. - * - * @return the kind of difference as defined in <code>Differencer</code> - */ - int getKind(); - - /** - * Returns the parent of this element. - * If the object is the root of a hierarchy <code>null</code> is returned. - * - * @return the parent of this element, or <code>null</code> if the element has no parent - */ - IDiffContainer getParent(); - - /** - * Sets the parent of this element. - * - * @param parent the new parent of this element, or <code>null</code> if this - * element is to have no parent - */ - void setParent(IDiffContainer parent); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java deleted file mode 100644 index 4a07c3f47..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -/** - * Interface used to compare hierarchical structures. - * It is used by the differencing engine. - * <p> - * Clients typically implement this interface in an adaptor class which - * wrappers the objects to be compared. - * - * @see org.eclipse.compare.ResourceNode - * @see Differencer - */ -public interface IStructureComparator { - - /** - * Returns an iterator for all children of this object or <code>null</code> - * if there are no children. - * - * @return an array with all children of this object, or an empty array if there are no children - */ - Object[] getChildren(); - - /** - * Returns whether some other object is "equal to" this one - * with respect to a structural comparison. For example, when comparing - * Java class methods, <code>equals</code> would return <code>true</code> - * if two methods have the same signature (the argument names and the - * method body might differ). - * - * @param other the reference object with which to compare - * @return <code>true</code> if this object is the same as the other argument; <code>false</code> otherwise - * @see java.lang.Object#equals - */ - boolean equals(Object other); -} diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java deleted file mode 100644 index e75dec79d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -/** - * Interface used to create a hierarchical structure of - * <code>IStructureComparator</code>s for a given input object. - * In addition, it provides methods for locating a path in the hierarchical structure - * and to map a node of this structure back to the corresponding input object. - * <p> - * Structure creators are used in the following contexts: - * <ul> - * <li> - * the <code>StructureDiffViewer</code> uses an <code>IStructureCreator</code> to - * build two (or three) tree structures of its input elements (method <code>getStructure</code>). - * These trees are then compared with each other by means of the differencing engine and displayed - * with the <code>DiffTreeViewer</code>, - * </li> - * <li> - * the <code>ReplaceWithEditionDialog</code> uses an <code>IStructureCreator</code> - * to map a path back to a range of characters in the textual representation. - * </li> - * </ul> - * A <code>IStructureCreator</code> provides methods for rewriting the tree produced by the differencing - * engine to support "smart" structural differencing. E.g. certain patterns of pairs of "addition" - * and "deletion" nodes can be detected as renames and merged into a single node. - * </p> - * <p> - * Clients may implement this interface; there is no standard implementation. - * </p> - * - * @see StructureDiffViewer - * @see org.eclipse.compare.EditionSelectionDialog - * @see Differencer - */ -public interface IStructureCreator { - - /** - * Returns a descriptive name which can be used in the UI of the <code>StructureDiffViewer</code>. - * - * @return a descriptive name for this <code>IStructureCreator</code> - */ - String getName(); - - /** - * Creates a tree structure consisting of <code>IStructureComparator</code>s - * from the given object and returns its root object. - * Implementing this method typically involves parsing the input object. - * In case of an error (e.g. a parsing error) the value <code>null</code> is returned. - * - * @param input the object from which to create the tree of <code>IStructureComparator</code> - * @return the root node of the structure or <code>null</code> in case of error - */ - IStructureComparator getStructure(Object input); - - /** - * Creates the single node specified by path from the given input object. - * In case of an error (e.g. a parsing error) the value <code>null</code> is returned. - * This method is similar to <code>getStructure</code> but in - * contrast to <code>getStructure</code> only a single node without any children must be returned. - * This method is used in the <code>ReplaceWithEditionDialog</code> to locate a sub element - * (e.g. a method) within an input object (e.g. a file containing source code). - * <p> - * One (not optimized) approach to implement this method is calling <code>getStructure(input)</code> - * to build the full tree, and then finding that node within the tree that is specified - * by <code>path</code>. - * <p> - * The syntax of <code>path</code> is not specified, because it is treated by the compare subsystem - * as an opaque entity and is not further interpreted. Clients using this functionality - * will pass a value of <code>path</code> to the <code>selectEdition</code> - * method of <code>ReplaceWithEditionDialog</code> and will receive this value unchanged - * as an argument to <code>locate</code>. - * - * @param path specifies a sub object within the input object - * @param input the object from which to create the <code>IStructureComparator</code> - * @return the single node specified by <code>path</code> or <code>null</code> - * - * @see org.eclipse.compare.EditionSelectionDialog#selectEdition - */ - IStructureComparator locate(Object path, Object input); - - /** - * Returns the contents of the given node as a string for the purpose - * of performing a content comparison only (that is the string will not be visible in the UI). - * If <code>ignoreWhitespace</code> is <code>true</code> all character sequences considered - * whitespace should be removed from the returned string. - * - * @param node the node for which to return a string representation - * @param ignoreWhitespace if <code>true</code> the returned string should not contain whitespace - * @return the string contents of the given node - */ - String getContents(Object node, boolean ignoreWhitespace); - - /** - * Called whenever a copy operation has been performed on a tree node. - * - * @param node the node for which to save the new content - * @param input the object from which the structure tree was created in <code>getStructure</code> - */ - void save(IStructureComparator node, Object input); -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java deleted file mode 100644 index 7699d8c91..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java +++ /dev/null @@ -1,372 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.structuremergeviewer; - -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.widgets.*; -import org.eclipse.jface.util.PropertyChangeEvent; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.*; - - -/** - * A diff tree viewer that can be configured with a <code>IStructureCreator</code> - * to retrieve a hierarchical structure from the input object (an <code>ICompareInput</code>) - * and perform a two-way or three-way compare on it. - * <p> - * This class may be instantiated; it is not intended to be subclassed outside - * this package. - * </p> - * - * @see IStructureCreator - * @see ICompareInput - */ -public class StructureDiffViewer extends DiffTreeViewer { - - private Differencer fDifferencer; - private boolean fThreeWay= false; - - private ITypedElement fAncestorInput; - private ITypedElement fLeftInput; - private ITypedElement fRightInput; - - private IStructureComparator fAncestorStructure; - private IStructureComparator fLeftStructure; - private IStructureComparator fRightStructure; - - private IStructureCreator fStructureCreator; - private IDiffContainer fRoot; - private IContentChangeListener fContentChangedListener; - private ICompareInputChangeListener fThreeWayInputChangedListener; - private CompareViewerSwitchingPane fParent; - - /** - * Creates a new viewer for the given SWT tree control with the specified configuration. - * - * @param tree the tree control - * @param configuration the configuration for this viewer - */ - public StructureDiffViewer(Tree tree, CompareConfiguration configuration) { - super(tree, configuration); - Composite c= tree.getParent(); - if (c instanceof CompareViewerSwitchingPane) - fParent= (CompareViewerSwitchingPane) c; - initialize(); - } - - /** - * Creates a new viewer under the given SWT parent with the specified configuration. - * - * @param parent the SWT control under which to create the viewer - * @param configuration the configuration for this viewer - */ - public StructureDiffViewer(Composite parent, CompareConfiguration configuration) { - super(parent, configuration); - if (parent instanceof CompareViewerSwitchingPane) - fParent= (CompareViewerSwitchingPane) parent; - initialize(); - } - - private void initialize() { - - setAutoExpandLevel(3); - - fContentChangedListener= new IContentChangeListener() { - public void contentChanged(IContentChangeNotifier changed) { - StructureDiffViewer.this.contentChanged(changed); - } - }; - fThreeWayInputChangedListener= new ICompareInputChangeListener() { - public void compareInputChanged(ICompareInput input) { - StructureDiffViewer.this.compareInputChanged(input); - } - }; - } - - /** - * Configures the <code>StructureDiffViewer</code> with a structure creator. - * The structure creator is used to create a hierarchical structure - * for each side of the viewer's input element of type <code>ICompareInput</code>. - * - * @param structureCreator the new structure creator - */ - public void setStructureCreator(IStructureCreator structureCreator) { - if (fStructureCreator != structureCreator) { - fStructureCreator= structureCreator; - Control tree= getControl(); - if (tree != null && !tree.isDisposed()) - tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle()); - } - } - - /** - * Returns the structure creator or <code>null</code> if no - * structure creator has been set with <code>setStructureCreator</code>. - * - * @return the structure creator or <code>null</code> - */ - public IStructureCreator getStructureCreator() { - return fStructureCreator; - } - - /** - * Reimplemented to get the descriptive title for this viewer from the <code>IStructureCreator</code>. - */ - public String getTitle() { - if (fStructureCreator != null) - return fStructureCreator.getName(); - return super.getTitle(); - } - - /** - * Overridden because the input of this viewer is not identical to the root of the tree. - * The tree's root is a IDiffContainer that was returned from the method <code>diff</code>. - * - * @return the root of the diff tree produced by method <code>diff</code> - */ - protected Object getRoot() { - return fRoot; - } - - /** - * Overridden to create the comparable structures from the input object - * and to feed them through the differencing engine. Note: for this viewer - * the value from <code>getInput</code> is not identical to <code>getRoot</code>. - */ - protected void inputChanged(Object input, Object oldInput) { - if (input instanceof ICompareInput) { - compareInputChanged((ICompareInput) input); - if (input != oldInput) - initialSelection(); - } - } - - protected void initialSelection() { - expandToLevel(2); - } - - /* (non Javadoc) - * Overridden to unregister all listeners. - */ - protected void handleDispose(DisposeEvent event) { - - compareInputChanged(null); - - fContentChangedListener= null; - fThreeWayInputChangedListener= null; - - super.handleDispose(event); - } - - /** - * Recreates the comparable structures for the input sides. - */ - protected void compareInputChanged(ICompareInput input) { - ITypedElement t= null; - boolean changed= false; - - if (input != null) - t= input.getAncestor(); - - fThreeWay= (t != null); - - if (t != fAncestorInput) { - if (fAncestorInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fAncestorInput).removeContentChangeListener(fContentChangedListener); - fAncestorInput= t; - if (fAncestorInput != null) { - fAncestorStructure= fStructureCreator.getStructure(fAncestorInput); - changed= true; - } else - fAncestorStructure= null; - if (fAncestorInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fAncestorInput).addContentChangeListener(fContentChangedListener); - } - - if (input != null) - t= input.getLeft(); - if (t != fLeftInput) { - if (fLeftInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fLeftInput).removeContentChangeListener(fContentChangedListener); - fLeftInput= t; - if (fLeftInput != null) { - fLeftStructure= fStructureCreator.getStructure(fLeftInput); - changed= true; - } else - fLeftStructure= null; - if (fLeftInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fLeftInput).addContentChangeListener(fContentChangedListener); - } - - if (input != null) - t= input.getRight(); - if (t != fRightInput) { - if (fRightInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fRightInput).removeContentChangeListener(fContentChangedListener); - fRightInput= t; - if (fRightInput != null) { - fRightStructure= fStructureCreator.getStructure(fRightInput); - changed= true; - } else - fRightStructure= null; - if (fRightInput instanceof IContentChangeNotifier) - ((IContentChangeNotifier)fRightInput).addContentChangeListener(fContentChangedListener); - } - - if (changed) - diff(); - } - - /** - * Calls <code>diff</code> whenever the byte contents changes. - */ - protected void contentChanged(IContentChangeNotifier changed) { - - if (fStructureCreator == null) - return; - - if (changed != null) { - if (changed == fAncestorInput) { - fAncestorStructure= fStructureCreator.getStructure(fAncestorInput); - } else if (changed == fLeftInput) { - fLeftStructure= fStructureCreator.getStructure(fLeftInput); - } else if (changed == fRightInput) { - fRightStructure= fStructureCreator.getStructure(fRightInput); - } else - return; - } else { - fAncestorStructure= fStructureCreator.getStructure(fAncestorInput); - fLeftStructure= fStructureCreator.getStructure(fLeftInput); - fRightStructure= fStructureCreator.getStructure(fRightInput); - } - - diff(); - } - - /** - * This method is called from within <code>diff()</code> before the difference - * tree is being built. - * Clients may override this method to perform their own pre-processing. - * This default implementation does nothing. - * @param ancestor the ancestor input to the differencing operation - * @param left the left input to the differencing operation - * @param right the right input to the differencing operation - * @since 2.0 - */ - protected void preDiffHook(IStructureComparator ancestor, IStructureComparator left, IStructureComparator right) { - // we do nothing here - } - - /** - * Runs the difference engine and refreshes the tree. - */ - protected void diff() { - - preDiffHook(fAncestorStructure, fLeftStructure, fRightStructure); - - String message= null; - - if ((fThreeWay && fAncestorStructure == null) || fLeftStructure == null || fRightStructure == null) { - // could not get structure of one (or more) of the legs - fRoot= null; - message= CompareMessages.getString("StructureDiffViewer.StructureError"); //$NON-NLS-1$ - - } else { // calculate difference of the two (or three) structures - - if (fDifferencer == null) - fDifferencer= new Differencer() { - protected boolean contentsEqual(Object o1, Object o2) { - return StructureDiffViewer.this.contentsEqual(o1, o2); - } - protected Object visit(Object data, int result, Object ancestor, Object left, Object right) { - Object o= super.visit(data, result, ancestor, left, right); - if (fLeftIsLocal && o instanceof DiffNode) - ((DiffNode)o).swapSides(fLeftIsLocal); - return o; - } - }; - - fRoot= (IDiffContainer) fDifferencer.findDifferences(fThreeWay, null, null, - fAncestorStructure, fLeftStructure, fRightStructure); - - if (fRoot == null || fRoot.getChildren().length == 0) { - message= CompareMessages.getString("StructureDiffViewer.NoStructuralDifferences"); //$NON-NLS-1$ - } else { - postDiffHook(fDifferencer, fRoot); - } - } - if (fParent != null) - fParent.setTitleArgument(message); - - refresh(getRoot()); - } - - /** - * This method is called from within <code>diff()</code> after the difference - * tree has been built. - * Clients may override this method to perform their own post-processing. - * This default implementation does nothing. - * @param differencer the differencer used to perform the differencing - * @param root the non-<code>null</code> root node of the difference tree - * @since 2.0 - */ - protected void postDiffHook(Differencer differencer, IDiffContainer root) { - // we do nothing here - } - - /** - * Performs a byte compare on the given objects. - * Called from the difference engine. - * Returns <code>null</code> if no structure creator has been set. - */ - private boolean contentsEqual(Object o1, Object o2) { - if (fStructureCreator != null) { - boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false); - String s1= fStructureCreator.getContents(o1, ignoreWhiteSpace); - String s2= fStructureCreator.getContents(o2, ignoreWhiteSpace); - if (s1 == null || s2 == null) - return false; - return s1.equals(s2); - } - return false; - } - - /** - * Tracks property changes of the configuration object. - * Clients may override to track their own property changes. - * In this case they must call the inherited method. - */ - protected void propertyChange(PropertyChangeEvent event) { - String key= event.getProperty(); - if (key.equals(CompareConfiguration.IGNORE_WHITESPACE)) - diff(); - else - super.propertyChange(event); - } - - /** - * Overridden to call the <code>save</code> method on the structure creator after - * nodes have been copied from one side to the other side of an input object. - * - * @param leftToRight if <code>true</code> the left side is copied to the right side. - * If <code>false</code> the right side is copied to the left side - */ - protected void copySelected(boolean leftToRight) { - super.copySelected(leftToRight); - - if (fStructureCreator != null) - fStructureCreator.save( - leftToRight ? fRightStructure : fLeftStructure, - leftToRight ? fRightInput : fLeftInput); - } -} - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html deleted file mode 100644 index 60257a4d8..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html +++ /dev/null @@ -1,79 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="Author" content="IBM"> - <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]"> - <title>Package-level Javadoc</title> -</head> -<body> -Provides support for finding and displaying the differences -between hierarchically structured data. -<h2> -Package Specification</h2> - -The class <b>Differencer</b> is a differencing engine for hierarchically -structured data. It takes two or three inputs and performs a two-way or -three-way compare on them. -<p> - -If the input elements to the differencing engine implement the <b>IStructureComparator</b> -interface the engine recursively applies itself to the children of -the input element. Leaf elements must implement the <b>org.eclipse.compare.IStreamContentAccessor</b> -interface so that the differencer can perform a bytewise comparison on their contents. -<p> - -One good example for this is <b>org.eclipse.compare.ResourceNode</b> which implements both interfaces -(and more) for Eclipse workspace resources (org.eclipse.core.resources.IResource). -<p> - -Another example is the <b>DocumentRangeNode</b> which can be used to compare hierarchical structures -that are superimposed on a document, that is where nodes and leafs correspond to ranges in a document -(<b>org.eclipse.compare.contentmergeviewer.IDocumentRange</b>). -<br> -Typically <b>DocumentRangeNode</b>s are created while parsing a document and they represent -the semantic entities of the document (e.g. a Java class, method or field). -The two subclasses <b>JavaNode</b> (in org.eclipse.jdt.internal.ui.compare) -and <b>PropertyNode</b> (in org.eclipse.jdt.internal.ui.compare) are good examples for this. -<p> - -By default the differencing engine returns the result of the compare operation -as a tree of <b>DiffNode</b> objects. However, this can be changed by overriding -a single method of the engine. -<p> - -Every <b>DiffNode</b> describes the changes among the two or three inputs. -<p> - -A tree of <b>DiffNodes</b> can be displayed in a <b>DiffTreeViewer</b>. -The <b>DiffTreeViewer</b> requires that inner nodes of the tree implement -the <b>IDiffContainer</b> interface and leafs the <b>IDiffElement</b> interface. -<p> - -The typical steps to compare hierarchically structured data and to display -the differences would be to: -<ul> -<li> -map the input data into a tree of <b>IStructureComparator</b> and <b>IStreamContentAccessor</b>s,</li> - -<li> -perform the compare operation by means of the <b>Differencer</b>, and</li> - -<li> -feed the differencing result into the <b>DiffTreeViewer</b>.</li> - -</ul> - -The <b>StructureDiffViewer</b> is a specialized <b>DiffTreeViewer</b> -that automates the three steps from above. It takes a single input object -of type <b>ICompareInput</b> from which it retrieves the two or three -input elements to compare. Then it uses a <b>IStructureCreator</b> to -extract a tree of <b>IStructureComparator</b> and <b>IStreamContentAccessor</b> -from them. These trees are then compared with the differencing engine and -the result is displayed in the tree viewer. -<p> - - - -</body> -</html> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif Binary files differdeleted file mode 100644 index 0088c97c8..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif Binary files differdeleted file mode 100644 index 6c83c45d9..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif Binary files differdeleted file mode 100644 index a3a444adf..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif Binary files differdeleted file mode 100644 index 706dc020e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif Binary files differdeleted file mode 100644 index b95e26a1b..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/next_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/next_nav.gif Binary files differdeleted file mode 100644 index 8392f3345..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/next_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/prev_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/prev_nav.gif Binary files differdeleted file mode 100644 index 9b278e6fa..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/prev_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif Binary files differdeleted file mode 100644 index c2a47b6a2..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif Binary files differdeleted file mode 100644 index 3aabbce51..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif Binary files differdeleted file mode 100644 index 2045daedd..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif Binary files differdeleted file mode 100644 index ecde52ea8..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif Binary files differdeleted file mode 100644 index 097ecdda5..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/cview16/compare_view.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/cview16/compare_view.gif Binary files differdeleted file mode 100644 index 41800a0c9..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/cview16/compare_view.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif Binary files differdeleted file mode 100644 index 6e00deec9..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif Binary files differdeleted file mode 100644 index cb11ac9f9..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif Binary files differdeleted file mode 100644 index 202b04139..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif Binary files differdeleted file mode 100644 index 4e9a3eb98..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif Binary files differdeleted file mode 100644 index e84103f40..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/next_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/next_nav.gif Binary files differdeleted file mode 100644 index 6cbeced26..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/next_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif Binary files differdeleted file mode 100644 index a3441a062..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif Binary files differdeleted file mode 100644 index 6f55d908b..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif Binary files differdeleted file mode 100644 index 2a8541ca8..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif Binary files differdeleted file mode 100644 index ecab86455..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif Binary files differdeleted file mode 100644 index c76fcc707..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif Binary files differdeleted file mode 100644 index 55147cc33..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif Binary files differdeleted file mode 100644 index 3ce77c8d3..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif Binary files differdeleted file mode 100644 index d9f5900b6..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif Binary files differdeleted file mode 100644 index 61289f18f..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif Binary files differdeleted file mode 100644 index 4fdde615d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif Binary files differdeleted file mode 100644 index feb14bf53..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/next_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/next_nav.gif Binary files differdeleted file mode 100644 index 03b7af342..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/next_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/prev_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/prev_nav.gif Binary files differdeleted file mode 100644 index dd65c5235..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/prev_nav.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif Binary files differdeleted file mode 100644 index e0a262e03..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif Binary files differdeleted file mode 100644 index 3e45390ef..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif Binary files differdeleted file mode 100644 index 4c2532296..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/conflict_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/conflict_edit.gif Binary files differdeleted file mode 100644 index b4451ec5e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/conflict_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif Binary files differdeleted file mode 100644 index f816c9e43..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/eview16/compare_view.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/eview16/compare_view.gif Binary files differdeleted file mode 100644 index 1030b6efc..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/eview16/compare_view.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/day_obj.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/day_obj.gif Binary files differdeleted file mode 100644 index 96aae05cb..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/day_obj.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/resource_obj.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/resource_obj.gif Binary files differdeleted file mode 100644 index d1e679e38..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/resource_obj.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/add_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/add_ov.gif Binary files differdeleted file mode 100644 index 2a8115602..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/add_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/chg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/chg_ov.gif Binary files differdeleted file mode 100644 index 67b25c457..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/chg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif Binary files differdeleted file mode 100644 index e049755f2..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif Binary files differdeleted file mode 100644 index 020fc5438..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif Binary files differdeleted file mode 100644 index 39ed5115e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/del_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/del_ov.gif Binary files differdeleted file mode 100644 index 675c20fcc..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/del_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/error_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/error_ov.gif Binary files differdeleted file mode 100644 index 95e4db64f..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/error_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif Binary files differdeleted file mode 100644 index 0dc3ea89a..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif Binary files differdeleted file mode 100644 index f719405c9..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/indel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/indel_ov.gif Binary files differdeleted file mode 100644 index 3e107d24d..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/indel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif Binary files differdeleted file mode 100644 index 780da9881..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif Binary files differdeleted file mode 100644 index 4f6a3168e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif Binary files differdeleted file mode 100644 index ab4898167..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif Binary files differdeleted file mode 100644 index 14ba0119b..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif Binary files differdeleted file mode 100644 index 0aca3c482..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif Binary files differdeleted file mode 100644 index c37753736..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif Binary files differdeleted file mode 100644 index 11c2d5de0..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif Binary files differdeleted file mode 100644 index 704d70694..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif Binary files differdeleted file mode 100644 index 95ec3012e..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties deleted file mode 100644 index 4c7b6e640..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties +++ /dev/null @@ -1,181 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -# -# Resource strings for Compare Plug-in -# -pluginName= Compare Support -providerName=Eclipse.org - -# -# Extension point names -# -structureCreators= Structure Creator -structureMergeViewers= Structure Merge Viewer -contentMergeViewers= Content Merge Viewer -contentViewers= Content Viewer - -# -# CompareUIPlugin -# -CompareUIPlugin.dialogTitle=Compare -CompareUIPlugin.noActiveWorkbenchPage=Can't find active workbench page -CompareUIPlugin.compareFailed=Compare Failed -CompareUIPlugin.openEditorError=Problems Opening Editor -CompareUIPlugin.noDifferences=There are no differences between the selected inputs. - -# -# Compare Editor -# -defaultCompareEditor.name= Default Compare Editor -CompareEditor.saveError.title= Save Error -CompareEditor.cantSaveError= Can''t save contents ({0}) -CompareEditor.invalidInput=Invalid Input: Must be CompareEditorInput - -# -# Commands -# -compareCategory.name= Compare -compareCategory.description= Compare command category - -Command.copyRightToLeft.name= Copy from Right to Left -Command.copyRightToLeft.description= Copy Current Change from Right to Left - -Command.copyLeftToRight.name= Copy from Left to Right -Command.copyLeftToRight.description= Copy Current Change from Left to Right - -Command.copyAllRightToLeft.name= Copy All from Right to Left -Command.copyAllRightToLeft.description= Copy All Changes from Right to Left - -Command.copyAllLeftToRight.name= Copy All from Left to Right -Command.copyAllLeftToRight.description= Copy All Change from Left to Right - -Command.selectNextChange.name= Select Next Change -Command.selectNextChange.description= Select Next Change - -Command.selectPreviousChange.name= Select Previous Change -Command.selectPreviousChange.description= Select Previous Change - - -# -# Context menu & actions -# -CompareWithMenu.label= Comp&are With - -CompareWithEachOtherAction.label= &Each Other -CompareWithEachOtherAction.tooltip= Compare the Selected Resources - -TeamMenu.label= T&eam - -CompareWithPatchAction.label= &Apply Patch... -CompareWithPatchAction.tooltip= Apply a Patch to the Selected Resources - -CompareWithHistoryAction.label= &Local History... -CompareWithHistoryAction.tooltip= Compare the Selected Resource with Local History - -ReplaceWithMenu.label= Rep&lace With - -ReplaceFromHistoryAction.label= &Local History... -ReplaceFromHistoryAction.tooltip= Replace the Selected Resource with Local History - -ReplaceWithPreviousFromHistoryAction.label= &Previous from Local History -ReplaceWithPreviousFromHistoryAction.tooltip= Replace the Selected Resource with the Previous from Local History - -addFromHistoryAction.label= Restore from Local Histor&y... -addFromHistoryAction.tooltip= Restore Deleted Files from Local History - -# -# Preference Page -# -ComparePreferencePage.name= Compare/Patch - -ComparePreferencePage.generalTab.label= &General - -ComparePreferencePage.structureCompare.label= &Open structure compare automatically -ComparePreferencePage.showMoreInfo.label= &Show additional compare information in the status line -ComparePreferencePage.ignoreWhitespace.label= Ignore &white space -ComparePreferencePage.saveBeforePatching.label= A&utomatically save dirty editors before patching - -ComparePreferencePage.textCompareTab.label= &Text Compare - -ComparePreferencePage.initiallyShowAncestorPane.label= Initially show a&ncestor pane -ComparePreferencePage.showPseudoConflicts.label= Show &pseudo conflicts -ComparePreferencePage.synchronizeScrolling.label= Synchronize &scrolling between panes in compare viewers -ComparePreferencePage.useSingleLine.label= Connect &ranges with single line - -ComparePreferencePage.preview.label= Preview: -ComparePreferencePage.ancestor.label= Common Ancestor -ComparePreferencePage.left.label= Local -ComparePreferencePage.right.label= Remote -ComparePreferencePage.backgroundColor1.label= Bac&kground Color: -ComparePreferencePage.backgroundColor2.label= S&ystem Default -ComparePreferencePage.backgroundColor3.label= C&ustom - -compareFontDefiniton.label= Compare Text Font -compareFontDefiniton.description= The compare text font is used by textual compare/merge editors. - -# New UI -#ComparePreferencePage.useSplines.label= Use splines in center panel -#ComparePreferencePage.useResolveUI.label= Use new resolve UI - -CompareEditorInput.defaultTitle= Compare - -# -# Toolbar actions -# -action.IgnoreWhiteSpace.label=Ignore White Space -action.IgnoreWhiteSpace.tooltip=Ignore White Space Where Applicable -action.IgnoreWhiteSpace.image=etool16/ignorews_edit.gif - -action.Next.label=Next Difference -action.Next.tooltip=Go to Next Difference -action.Next.image=elcl16/next_nav.gif - -action.Previous.label=Previous Difference -action.Previous.tooltip=Go to Previous Difference -action.Previous.image=elcl16/prev_nav.gif - -# -# Built in Structure Creators -# -ZipStructureCreator.name=Zip Archive Compare - -# -# Compare Dialog -# -CompareDialog.commitAction.label=Commit -CompareDialog.saveErrorTitle=Save Error -CompareDialog.saveErrorMessage=Can't save - -# -# Compare With Each Other -# -ResourceCompare.taskName=Operation in Progress... -ResourceCompare.twoWay.title=Compare ({0}-{1}) -ResourceCompare.twoWay.tooltip={0}-{1} -ResourceCompare.threeWay.title=Compare ({0}-{1}-{2}) -ResourceCompare.threeWay.tooltip={1}-{2} - -# -# DiffTreeViewer & DiffNodes -# -DiffTreeViewer.title= Structure Compare -DiffNode.noName= <no name> -DiffNode.nameFormat= {0} / {1} - -# -# Differencing engine -# -Differencer.progressFormat= Comparing {0} - -# -# Patch: rejected patch markers -# -rejectedPatchMarker.name= Rejected Patch diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml deleted file mode 100644 index 42c24dab2..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml +++ /dev/null @@ -1,316 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!-- ======================================================================= --> -<!-- Compare UI Plugin --> -<!-- ======================================================================= --> - -<plugin - name="%pluginName" - id="org.eclipse.compare" - version="2.1.0" - provider-name="%providerName" - class="org.eclipse.compare.internal.CompareUIPlugin"> - - <requires> - <import plugin="org.eclipse.ui"/> - <import plugin="org.eclipse.core.resources"/> - </requires> - - <runtime> - <library name="compare.jar" > - <export name="*"/> - <packages prefixes="org.eclipse.compare"/> - </library> - </runtime> - -<!-- Compare extension point definitions --> - - <extension-point - id="structureCreators" - name="%structureCreators" - schema="schema/structureCreators.exsd" - /> - - <extension-point - id="structureMergeViewers" - name="%structureMergeViewers" - schema="schema/structureMergeViewers.exsd" - /> - - <extension-point - id="contentMergeViewers" - name="%contentMergeViewers" - schema="schema/contentMergeViewers.exsd" - /> - - <extension-point - id="contentViewers" - name="%contentViewers" - schema="schema/contentViewers.exsd" - /> - -<!-- Extensions --> - - <extension point="org.eclipse.ui.fontDefinitions"> - <fontDefinition - label="%compareFontDefiniton.label" - id="org.eclipse.compare.contentmergeviewer.TextMergeViewer" - defaultsTo="org.eclipse.jface.textfont"> - <description> - %compareFontDefiniton.description - </description> - </fontDefinition> - </extension> - - <extension point="org.eclipse.core.resources.markers" - id="rejectedPatchMarker" name="%rejectedPatchMarker.name"> - <super type="org.eclipse.core.resources.taskmarker"/> - <persistent value="true"/> - </extension> - - <extension point="org.eclipse.ui.editors"> - <editor id="org.eclipse.compare.CompareEditor" - name="%defaultCompareEditor.name" - icon="icons/full/cview16/compare_view.gif" - class="org.eclipse.compare.internal.CompareEditor" - contributorClass="org.eclipse.compare.internal.CompareEditorContributor"> - </editor> - </extension> - - <extension - point="org.eclipse.ui.preferencePages"> - <page name="%ComparePreferencePage.name" - id="org.eclipse.compare.internal.ComparePreferencePage" - class="org.eclipse.compare.internal.ComparePreferencePage" - category= "org.eclipse.ui.preferencePages.Workbench"> - </page> - </extension> - - <!-- commands and their bindings --> - <extension point="org.eclipse.ui.commands"> - - <category - name="%compareCategory.name" - description="%compareCategory.description" - id="org.eclipse.compare.ui.category.compare" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.copyRightToLeft" - name= "%Command.copyRightToLeft.name" - description="%Command.copyRightToLeft.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.copyRightToLeft" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.copyLeftToRight" - name= "%Command.copyLeftToRight.name" - description="%Command.copyLeftToRight.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.copyLeftToRight" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.copyAllRightToLeft" - name= "%Command.copyAllRightToLeft.name" - description="%Command.copyAllRightToLeft.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.copyAllRightToLeft" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.copyAllLeftToRight" - name= "%Command.copyAllLeftToRight.name" - description="%Command.copyAllLeftToRight.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.copyAllLeftToRight" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.selectNextChange" - name= "%Command.selectNextChange.name" - description="%Command.selectNextChange.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.selectNextChange" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - <command - category="org.eclipse.compare.ui.category.compare" - id="org.eclipse.compare.selectPreviousChange" - name= "%Command.selectPreviousChange.name" - description="%Command.selectPreviousChange.description" - /> - <keyBinding - string="" - scope="org.eclipse.ui.globalScope" - command="org.eclipse.compare.selectPreviousChange" - configuration="org.eclipse.ui.defaultAcceleratorConfiguration" - /> - - </extension> - - <extension point="org.eclipse.ui.popupMenus"> - - <objectContribution - id="org.eclipse.compare.CompareAction" - objectClass="org.eclipse.core.resources.IResource" adaptable="true"> - <menu - id="replaceWithMenu" - path="additions" - label="%ReplaceWithMenu.label"> - <separator name="replaceWithGroup"/> - </menu> - <menu - id="compareWithMenu" - path="additions" - label="%CompareWithMenu.label"> - <separator name="compareWithGroup"/> - </menu> - <menu - id="team.main" - path="additions" - label="%TeamMenu.label"> - <separator name="group1"/> - </menu> - <action - id="compareWithEachOther" - label="%CompareWithEachOtherAction.label" - tooltip="%CompareWithEachOtherAction.tooltip" - menubarPath="compareWithMenu/compareWithGroup" - enablesFor="2+" - class="org.eclipse.compare.internal.CompareAction"> - </action> - <action - id="compareWithPatch" - label="%CompareWithPatchAction.label" - tooltip="%CompareWithPatchAction.tooltip" - menubarPath="team.main/group1" - enablesFor="1" - class="org.eclipse.compare.internal.patch.CompareWithPatchAction"> - </action> - - </objectContribution> - - <objectContribution - id="org.eclipse.compare.ReplaceWithEditionAction" - objectClass="org.eclipse.core.resources.IFile" adaptable="true"> - <menu - id="replaceWithMenu" - path="additions" - label="%ReplaceWithMenu.label"> - <separator name="replaceWithGroup"/> - </menu> - <action - id="replaceFromHistory" - label="%ReplaceFromHistoryAction.label" - tooltip="%ReplaceFromHistoryAction.tooltip" - menubarPath="replaceWithMenu/replaceWithGroup" - enablesFor="1" - class="org.eclipse.compare.internal.ReplaceWithEditionAction"> - </action> - <action - id="replaceWithPreviousFromHistory" - label="%ReplaceWithPreviousFromHistoryAction.label" - tooltip="%ReplaceWithPreviousFromHistoryAction.tooltip" - menubarPath="replaceWithMenu/replaceWithGroup" - enablesFor="1" - class="org.eclipse.compare.internal.ReplaceWithPreviousEditionAction"> - </action> - </objectContribution> - - <objectContribution - id="org.eclipse.compare.CompareWithEditionAction" - objectClass="org.eclipse.core.resources.IFile" adaptable="true"> - <menu - id="compareWithMenu" - path="additions" - label="%CompareWithMenu.label"> - <separator name="compareWithGroup"/> - </menu> - <action - id="compareWithHistory" - label="%CompareWithHistoryAction.label" - tooltip="%CompareWithHistoryAction.tooltip" - menubarPath="compareWithMenu/compareWithGroup" - enablesFor="1" - class="org.eclipse.compare.internal.CompareWithEditionAction"> - </action> - </objectContribution> - - <objectContribution - id="org.eclipse.compare.AddFromHistoryAction" - objectClass="org.eclipse.core.resources.IContainer" adaptable="true"> - <action - id="addFromHistoryAction" - label="%addFromHistoryAction.label" - tooltip="%addFromHistoryAction.tooltip" - menubarPath="replaceWithMenu" - enablesFor="1" - class="org.eclipse.compare.internal.AddFromHistoryAction"> - </action> - </objectContribution> - - </extension> - - <extension point="org.eclipse.compare.structureCreators"> - <structureCreator - id="org.eclipse.compare.ZipFileStructureCreator" - extensions="zip" - class="org.eclipse.compare.ZipFileStructureCreator"> - </structureCreator> - </extension> - - <extension point="org.eclipse.compare.contentMergeViewers"> - <viewer - id="org.eclipse.compare.BinaryCompareViewerCreator" - extensions="class,exe,dll,binary,zip,jar" - class="org.eclipse.compare.internal.BinaryCompareViewerCreator"> - </viewer> - <viewer - id="org.eclipse.compare.TextMergeViewerCreator" - extensions="txt" - class="org.eclipse.compare.internal.TextMergeViewerCreator"> - </viewer> - <viewer - id="org.eclipse.compare.ImageMergeViewerCreator" - extensions="gif,jpg" - class="org.eclipse.compare.internal.ImageMergeViewerCreator"> - </viewer> - </extension> - - <extension point="org.eclipse.compare.contentViewers"> - <viewer - id="org.eclipse.compare.TextViewerCreator" - extensions="txt" - class="org.eclipse.compare.internal.TextViewerCreator"> - </viewer> - </extension> - -</plugin> - diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentMergeViewers.exsd b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentMergeViewers.exsd deleted file mode 100644 index de18bd1df..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentMergeViewers.exsd +++ /dev/null @@ -1,129 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.compare"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.compare" id="contentMergeViewers" name="ContentMerge Viewers"/> - </appInfo> - <documentation> - This extension point allows a plug-in to register compare/merge -viewers for specific content types. The viewer is expected to -extend <samp>org.eclipse.jface.viewers.Viewer</samp>. -However, since viewers don't have a default constructor, -the extension point must implement the factory interface -for viewers <samp>org.eclipse.compare.IViewerCreator</samp>. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="viewer" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="viewer"> - <complexType> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier that can be used to reference the viewer - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - name of a class that implements <samp>org.eclipse.compare.IViewerCreator</samp> - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.Viewer:org.eclipse.compare.IViewerCreator"/> - </appInfo> - </annotation> - </attribute> - <attribute name="extensions" type="string" use="required"> - <annotation> - <documentation> - a comma separated list of file extensions e.g. "java, gif" - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - The following is an example of a compare/merge viewer -for text files (extension "txt"): -<p> -<pre> -<extension point = "org.eclipse.compare.contentMergeViewers"> - <viewer - id="org.eclipse.compare.contentmergeviewer.TextMergeViewer" - class="org.eclipse.compare.internal.TextMergeViewerCreator" - extensions="txt" - /> -</extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The Compare UI plugin defines content viewers for text, binary contents, and images. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - <p> -<a href="hglegal.htm"> - <img SRC="ngibmcpy.gif" - ALT="Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved." - BORDER=0 height=14 width=324></a> -</p> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentViewers.exsd b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentViewers.exsd deleted file mode 100644 index a60291803..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentViewers.exsd +++ /dev/null @@ -1,131 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.compare"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.compare" id="contentViewers" name="Content Viewers"/> - </appInfo> - <documentation> - This extension point allows a plug-in to register -viewers for specific content types. -These viewers are used in the <samp>EditionSelectionDialog</samp> when presenting an edition of a resource or a subsection thereof. The viewer -is expected to extend <samp>org.eclipse.jface.viewers.Viewer</samp>. -However since viewers don't have a default constructor the extension point must implement the factory interface for viewers <samp>org.eclipse.compare.IViewerCreator</samp>. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="viewer" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="viewer"> - <complexType> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier that can be used to reference the viewer - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - name of a class that implements a factory for the -content merge viewer and implements -<samp>org.eclipse.compare.IViewerCreator</samp> - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.Viewer:org.eclipse.compare.IViewerCreator"/> - </appInfo> - </annotation> - </attribute> - <attribute name="extensions" type="string" use="required"> - <annotation> - <documentation> - a comma separated list of file extensions e.g. "java, gif" - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - The following is an example of a viewer for text -files (extension "txt"): -<p> -<pre> -<extension point = "org.eclipse.compare.contentViewers"> - <viewer - id="org.eclipse.compare.internal.TextViewer" - class="org.eclipse.compare.internal.TextViewerCreator" - extensions="txt" - /> -</extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The Compare UI plugin defines content viewers for -text and images. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - <p> -<a href="hglegal.htm"> - <img SRC="ngibmcpy.gif" - ALT="Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved." - BORDER=0 height=14 width=324></a> -</p> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureCreators.exsd b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureCreators.exsd deleted file mode 100644 index 189463dc4..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureCreators.exsd +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.compare"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.compare" id="structureCreators" name="Structure Creators"/> - </appInfo> - <documentation> - This extension point allows a plug-in to register a structure creator -for specific content types. The structure creator is expected to create -a tree of <samp>IStructureComparator</samp>s for a given content. -This tree is used as the input for the structural compare. -The extension point must implement the interface <samp>org.eclipse.compare.structuremergeviewer.IStructureCreator</samp>. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="structureCreator" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="structureCreator"> - <complexType> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier that can be used to reference the structure creator - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - name of a class that implements <samp>org.eclipse.compare.structuremergeviewer.IStructureCreator</samp> - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.compare.structuremergeviewer.IStructureComparator"/> - </appInfo> - </annotation> - </attribute> - <attribute name="extensions" type="string" use="required"> - <annotation> - <documentation> - a comma separated list of file extensions e.g. "java, properties" - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - The following is an example of a structure creator for -java files (extension "java"): -<p> -<pre> -<extension point = "org.eclipse.compare.structureCreators"> - <structureCreator - id="org.eclipse.compare.JavaStructureCreator" - class="org.eclipse.compare.JavaStructureCreator" - extensions="java" - /> -</extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The Compare UI plugin defines a structure creator for zip archives. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - <p> -<a href="hglegal.htm"> - <img SRC="ngibmcpy.gif" - ALT="Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved." - BORDER=0 height=14 width=324></a> -</p> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd deleted file mode 100644 index 73419fdf8..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd +++ /dev/null @@ -1,130 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.compare"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.compare" id="structureMergeViewers" name="StructureMerge Viewers"/> - </appInfo> - <documentation> - This extension point allows a plug-in to register compare/merge -viewers for structural content types. The viewer is expected to -extend <samp>org.eclipse.jface.viewers.Viewer</samp>. -However, since viewers don't have a default constructor, -the extension point must implement the factory interface -for viewers <samp>org.eclipse.compare.IViewerCreator</samp>. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="viewer" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="viewer"> - <complexType> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier that can be used to reference the viewer - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - name of a class that implements <samp>org.eclipse.compare.IViewerCreator</samp> - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.Viewer:org.eclipse.compare.IViewerCreator"/> - </appInfo> - </annotation> - </attribute> - <attribute name="extensions" type="string" use="required"> - <annotation> - <documentation> - a comma separated list of file extensions e.g. "zip, jar" - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - The following is an example of compare/merge viewer -for zip files (extension "zip"): -<p> -<pre> -<extension point = "org.eclipse.compare.structureMergeViewers"> - <viewer - id="org.eclipse.compare.ZipCompareViewer" - class="org.eclipse.compare.ZipCompareViewerCreator" - extensions="zip" - /> -</extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The Compare UI plugin defines a structure compare -viewer for zip archives. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - <p> -<a href="hglegal.htm"> - <img SRC="ngibmcpy.gif" - ALT="Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved." - BORDER=0 height=14 width=324></a> -</p> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml deleted file mode 100644 index b533d2ebd..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml +++ /dev/null @@ -1,31 +0,0 @@ -<project name="org.eclipse.compare" default="export" basedir=".."> - <target name="init"> - <tstamp/> - <property name="destdir" value="../../plugin-export" /> - <property name="plugin" value="org.eclipse.compare" /> - <property name="version" value="_2.1.0" /> - <property name="dest" value="${destdir}/${plugin}${version}" /> - </target> - - <target name="build" depends="init"> - <eclipse.incrementalBuild project="${plugin}" kind="incr"/> - </target> - - <target name="export" depends="build"> - <mkdir dir="${destdir}" /> - <delete dir="${dest}" /> - <mkdir dir="${dest}" /> - <jar - jarfile="${dest}/compare.jar" - basedir="bin" - /> - <copy file="plugin.xml" todir="${dest}"/> - <copy file="plugin.properties" todir="${dest}"/> - <copy todir="${dest}/icons"> - <fileset dir="icons" /> - </copy> - <zip zipfile="${dest}/comparesrc.zip"> - <fileset dir="compare" /> - </zip> - </target> -</project> diff --git a/bundles/org.eclipse.compare/schema/contentMergeViewers.exsd b/bundles/org.eclipse.compare/schema/contentMergeViewers.exsd deleted file mode 100644 index de18bd1df..000000000 --- a/bundles/org.eclipse.compare/schema/contentMergeViewers.exsd +++ /dev/null @@ -1,129 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.compare"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.compare" id="contentMergeViewers" name="ContentMerge Viewers"/> - </appInfo> - <documentation> - This extension point allows a plug-in to register compare/merge -viewers for specific content types. The viewer is expected to -extend <samp>org.eclipse.jface.viewers.Viewer</samp>. -However, since viewers don't have a default constructor, -the extension point must implement the factory interface -for viewers <samp>org.eclipse.compare.IViewerCreator</samp>. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="viewer" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="viewer"> - <complexType> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier that can be used to reference the viewer - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - name of a class that implements <samp>org.eclipse.compare.IViewerCreator</samp> - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.Viewer:org.eclipse.compare.IViewerCreator"/> - </appInfo> - </annotation> - </attribute> - <attribute name="extensions" type="string" use="required"> - <annotation> - <documentation> - a comma separated list of file extensions e.g. "java, gif" - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - The following is an example of a compare/merge viewer -for text files (extension "txt"): -<p> -<pre> -<extension point = "org.eclipse.compare.contentMergeViewers"> - <viewer - id="org.eclipse.compare.contentmergeviewer.TextMergeViewer" - class="org.eclipse.compare.internal.TextMergeViewerCreator" - extensions="txt" - /> -</extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The Compare UI plugin defines content viewers for text, binary contents, and images. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - <p> -<a href="hglegal.htm"> - <img SRC="ngibmcpy.gif" - ALT="Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved." - BORDER=0 height=14 width=324></a> -</p> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.compare/schema/contentViewers.exsd b/bundles/org.eclipse.compare/schema/contentViewers.exsd deleted file mode 100644 index a60291803..000000000 --- a/bundles/org.eclipse.compare/schema/contentViewers.exsd +++ /dev/null @@ -1,131 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.compare"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.compare" id="contentViewers" name="Content Viewers"/> - </appInfo> - <documentation> - This extension point allows a plug-in to register -viewers for specific content types. -These viewers are used in the <samp>EditionSelectionDialog</samp> when presenting an edition of a resource or a subsection thereof. The viewer -is expected to extend <samp>org.eclipse.jface.viewers.Viewer</samp>. -However since viewers don't have a default constructor the extension point must implement the factory interface for viewers <samp>org.eclipse.compare.IViewerCreator</samp>. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="viewer" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="viewer"> - <complexType> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier that can be used to reference the viewer - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - name of a class that implements a factory for the -content merge viewer and implements -<samp>org.eclipse.compare.IViewerCreator</samp> - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.Viewer:org.eclipse.compare.IViewerCreator"/> - </appInfo> - </annotation> - </attribute> - <attribute name="extensions" type="string" use="required"> - <annotation> - <documentation> - a comma separated list of file extensions e.g. "java, gif" - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - The following is an example of a viewer for text -files (extension "txt"): -<p> -<pre> -<extension point = "org.eclipse.compare.contentViewers"> - <viewer - id="org.eclipse.compare.internal.TextViewer" - class="org.eclipse.compare.internal.TextViewerCreator" - extensions="txt" - /> -</extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The Compare UI plugin defines content viewers for -text and images. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - <p> -<a href="hglegal.htm"> - <img SRC="ngibmcpy.gif" - ALT="Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved." - BORDER=0 height=14 width=324></a> -</p> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.compare/schema/structureCreators.exsd b/bundles/org.eclipse.compare/schema/structureCreators.exsd deleted file mode 100644 index 189463dc4..000000000 --- a/bundles/org.eclipse.compare/schema/structureCreators.exsd +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.compare"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.compare" id="structureCreators" name="Structure Creators"/> - </appInfo> - <documentation> - This extension point allows a plug-in to register a structure creator -for specific content types. The structure creator is expected to create -a tree of <samp>IStructureComparator</samp>s for a given content. -This tree is used as the input for the structural compare. -The extension point must implement the interface <samp>org.eclipse.compare.structuremergeviewer.IStructureCreator</samp>. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="structureCreator" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="structureCreator"> - <complexType> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier that can be used to reference the structure creator - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - name of a class that implements <samp>org.eclipse.compare.structuremergeviewer.IStructureCreator</samp> - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.compare.structuremergeviewer.IStructureComparator"/> - </appInfo> - </annotation> - </attribute> - <attribute name="extensions" type="string" use="required"> - <annotation> - <documentation> - a comma separated list of file extensions e.g. "java, properties" - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - The following is an example of a structure creator for -java files (extension "java"): -<p> -<pre> -<extension point = "org.eclipse.compare.structureCreators"> - <structureCreator - id="org.eclipse.compare.JavaStructureCreator" - class="org.eclipse.compare.JavaStructureCreator" - extensions="java" - /> -</extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The Compare UI plugin defines a structure creator for zip archives. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - <p> -<a href="hglegal.htm"> - <img SRC="ngibmcpy.gif" - ALT="Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved." - BORDER=0 height=14 width=324></a> -</p> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.compare/schema/structureMergeViewers.exsd b/bundles/org.eclipse.compare/schema/structureMergeViewers.exsd deleted file mode 100644 index 73419fdf8..000000000 --- a/bundles/org.eclipse.compare/schema/structureMergeViewers.exsd +++ /dev/null @@ -1,130 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.compare"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.compare" id="structureMergeViewers" name="StructureMerge Viewers"/> - </appInfo> - <documentation> - This extension point allows a plug-in to register compare/merge -viewers for structural content types. The viewer is expected to -extend <samp>org.eclipse.jface.viewers.Viewer</samp>. -However, since viewers don't have a default constructor, -the extension point must implement the factory interface -for viewers <samp>org.eclipse.compare.IViewerCreator</samp>. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="viewer" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="viewer"> - <complexType> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier that can be used to reference the viewer - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - name of a class that implements <samp>org.eclipse.compare.IViewerCreator</samp> - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.Viewer:org.eclipse.compare.IViewerCreator"/> - </appInfo> - </annotation> - </attribute> - <attribute name="extensions" type="string" use="required"> - <annotation> - <documentation> - a comma separated list of file extensions e.g. "zip, jar" - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - The following is an example of compare/merge viewer -for zip files (extension "zip"): -<p> -<pre> -<extension point = "org.eclipse.compare.structureMergeViewers"> - <viewer - id="org.eclipse.compare.ZipCompareViewer" - class="org.eclipse.compare.ZipCompareViewerCreator" - extensions="zip" - /> -</extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The Compare UI plugin defines a structure compare -viewer for zip archives. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - <p> -<a href="hglegal.htm"> - <img SRC="ngibmcpy.gif" - ALT="Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved." - BORDER=0 height=14 width=324></a> -</p> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.compare/scripts/exportplugin.xml b/bundles/org.eclipse.compare/scripts/exportplugin.xml deleted file mode 100644 index b533d2ebd..000000000 --- a/bundles/org.eclipse.compare/scripts/exportplugin.xml +++ /dev/null @@ -1,31 +0,0 @@ -<project name="org.eclipse.compare" default="export" basedir=".."> - <target name="init"> - <tstamp/> - <property name="destdir" value="../../plugin-export" /> - <property name="plugin" value="org.eclipse.compare" /> - <property name="version" value="_2.1.0" /> - <property name="dest" value="${destdir}/${plugin}${version}" /> - </target> - - <target name="build" depends="init"> - <eclipse.incrementalBuild project="${plugin}" kind="incr"/> - </target> - - <target name="export" depends="build"> - <mkdir dir="${destdir}" /> - <delete dir="${dest}" /> - <mkdir dir="${dest}" /> - <jar - jarfile="${dest}/compare.jar" - basedir="bin" - /> - <copy file="plugin.xml" todir="${dest}"/> - <copy file="plugin.properties" todir="${dest}"/> - <copy todir="${dest}/icons"> - <fileset dir="icons" /> - </copy> - <zip zipfile="${dest}/comparesrc.zip"> - <fileset dir="compare" /> - </zip> - </target> -</project> diff --git a/bundles/org.eclipse.team.ui/.classpath b/bundles/org.eclipse.team.ui/.classpath deleted file mode 100644 index bd0325657..000000000 --- a/bundles/org.eclipse.team.ui/.classpath +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src/"/> - <classpathentry kind="src" path="/org.eclipse.core.resources"/> - <classpathentry kind="src" path="/org.eclipse.team.core"/> - <classpathentry kind="src" path="/org.eclipse.ui"/> - <classpathentry kind="src" path="/org.eclipse.compare"/> - <classpathentry kind="src" path="/org.apache.xerces"/> - <classpathentry kind="src" path="/org.eclipse.core.boot"/> - <classpathentry kind="src" path="/org.eclipse.core.runtime"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/bundles/org.eclipse.team.ui/.cvsignore b/bundles/org.eclipse.team.ui/.cvsignore deleted file mode 100644 index ba077a403..000000000 --- a/bundles/org.eclipse.team.ui/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -bin diff --git a/bundles/org.eclipse.team.ui/.project b/bundles/org.eclipse.team.ui/.project deleted file mode 100644 index f64f798e5..000000000 --- a/bundles/org.eclipse.team.ui/.project +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.team.ui</name> - <comment></comment> - <projects> - <project>org.apache.xerces</project> - <project>org.eclipse.compare</project> - <project>org.eclipse.core.boot</project> - <project>org.eclipse.core.resources</project> - <project>org.eclipse.core.runtime</project> - <project>org.eclipse.team.core</project> - <project>org.eclipse.ui</project> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.pde.PluginNature</nature> - </natures> -</projectDescription> diff --git a/bundles/org.eclipse.team.ui/about.html b/bundles/org.eclipse.team.ui/about.html deleted file mode 100644 index 9db411aab..000000000 --- a/bundles/org.eclipse.team.ui/about.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<html> -<head> -<title>About</title> -<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> -</head> -<body lang="EN-US"> -<h2>About This Content</h2> - -<p>20th June, 2002</p> -<h3>License</h3> -<p>Eclipse.org makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the -Common Public License Version 1.0 ("CPL"). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>. -For purposes of the CPL, "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> - -</body> -</html>
\ No newline at end of file diff --git a/bundles/org.eclipse.team.ui/build.properties b/bundles/org.eclipse.team.ui/build.properties deleted file mode 100644 index a90fcf573..000000000 --- a/bundles/org.eclipse.team.ui/build.properties +++ /dev/null @@ -1,14 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -# Eclipse build contribution -bin.includes=about.html,icons/,plugin.xml,plugin.properties,*.jar -source.teamui.jar=src/ -src.includes=about.html,schema/ diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/catchup_rls.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/catchup_rls.gif Binary files differdeleted file mode 100644 index ba8ee00a3..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/catchup_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/catchuprelease_rls.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/catchuprelease_rls.gif Binary files differdeleted file mode 100644 index 25d4c998b..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/catchuprelease_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/conflict_synch.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/conflict_synch.gif Binary files differdeleted file mode 100644 index ecde52ea8..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/conflict_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/contents.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/contents.gif Binary files differdeleted file mode 100644 index bb2d85225..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/contents.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/ignorews_edit.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/ignorews_edit.gif Binary files differdeleted file mode 100644 index 097ecdda5..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/incom_synch.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/incom_synch.gif Binary files differdeleted file mode 100644 index dc9bfc62d..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/incom_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/outgo_synch.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/outgo_synch.gif Binary files differdeleted file mode 100644 index afe6b1736..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/outgo_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/refresh.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/refresh.gif Binary files differdeleted file mode 100644 index a063c230a..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/refresh.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/release_rls.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/release_rls.gif Binary files differdeleted file mode 100644 index 3162b9373..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/release_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/clcl16/site_element.gif b/bundles/org.eclipse.team.ui/icons/full/clcl16/site_element.gif Binary files differdeleted file mode 100644 index 9dd4d8300..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/clcl16/site_element.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/cview16/synch_synch.gif b/bundles/org.eclipse.team.ui/icons/full/cview16/synch_synch.gif Binary files differdeleted file mode 100644 index c4a11c3cc..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/cview16/synch_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/catchup_rls.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/catchup_rls.gif Binary files differdeleted file mode 100644 index 627c90188..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/catchup_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/catchuprelease_rls.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/catchuprelease_rls.gif Binary files differdeleted file mode 100644 index 125662ffe..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/catchuprelease_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/conflict_synch.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/conflict_synch.gif Binary files differdeleted file mode 100644 index 7c1a8a852..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/conflict_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/contents.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/contents.gif Binary files differdeleted file mode 100644 index c5f90b61b..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/contents.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/ignorews_edit.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/ignorews_edit.gif Binary files differdeleted file mode 100644 index 8a7dece74..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/incom_synch.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/incom_synch.gif Binary files differdeleted file mode 100644 index 4221aa488..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/incom_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/outgo_synch.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/outgo_synch.gif Binary files differdeleted file mode 100644 index 14e440b10..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/outgo_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/refresh.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/refresh.gif Binary files differdeleted file mode 100644 index b2281b40c..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/refresh.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/release_rls.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/release_rls.gif Binary files differdeleted file mode 100644 index 3f2bc7c1e..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/release_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/dlcl16/site_element.gif b/bundles/org.eclipse.team.ui/icons/full/dlcl16/site_element.gif Binary files differdeleted file mode 100644 index 36f82e3ab..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/dlcl16/site_element.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/catchup_rls.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/catchup_rls.gif Binary files differdeleted file mode 100644 index 93e221909..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/catchup_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/catchuprelease_rls.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/catchuprelease_rls.gif Binary files differdeleted file mode 100644 index 8898cd608..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/catchuprelease_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/conflict_synch.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/conflict_synch.gif Binary files differdeleted file mode 100644 index 8eb28e6d6..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/conflict_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/contents.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/contents.gif Binary files differdeleted file mode 100644 index 151193a0b..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/contents.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/ignorews_edit.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/ignorews_edit.gif Binary files differdeleted file mode 100644 index b771b21a8..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/ignorews_edit.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/incom_synch.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/incom_synch.gif Binary files differdeleted file mode 100644 index dab07f784..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/incom_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/outgo_synch.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/outgo_synch.gif Binary files differdeleted file mode 100644 index c978a2974..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/outgo_synch.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/refresh.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/refresh.gif Binary files differdeleted file mode 100644 index 919423d43..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/refresh.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/release_rls.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/release_rls.gif Binary files differdeleted file mode 100644 index 525d8091b..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/release_rls.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/elcl16/site_element.gif b/bundles/org.eclipse.team.ui/icons/full/elcl16/site_element.gif Binary files differdeleted file mode 100644 index 42f9b81d7..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/elcl16/site_element.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/obj/export_projectset.gif b/bundles/org.eclipse.team.ui/icons/full/obj/export_projectset.gif Binary files differdeleted file mode 100644 index ab35990f1..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/obj/export_projectset.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/obj/import_projectset.gif b/bundles/org.eclipse.team.ui/icons/full/obj/import_projectset.gif Binary files differdeleted file mode 100644 index 17cb2e7db..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/obj/import_projectset.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/obj/share_project.gif b/bundles/org.eclipse.team.ui/icons/full/obj/share_project.gif Binary files differdeleted file mode 100644 index 2b73ce2b3..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/obj/share_project.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/ovr/checkedout_ov.gif b/bundles/org.eclipse.team.ui/icons/full/ovr/checkedout_ov.gif Binary files differdeleted file mode 100644 index a11a542b1..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/ovr/checkedout_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/ovr/dirty_ov.gif b/bundles/org.eclipse.team.ui/icons/full/ovr/dirty_ov.gif Binary files differdeleted file mode 100644 index 07a8c35f3..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/ovr/dirty_ov.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/ovr/version_controlled.gif b/bundles/org.eclipse.team.ui/icons/full/ovr/version_controlled.gif Binary files differdeleted file mode 100644 index a2b345d79..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/ovr/version_controlled.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/wizban/export_projectset_wizban.gif b/bundles/org.eclipse.team.ui/icons/full/wizban/export_projectset_wizban.gif Binary files differdeleted file mode 100644 index 0b179a95c..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/wizban/export_projectset_wizban.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/wizban/import_projectset_wizban.gif b/bundles/org.eclipse.team.ui/icons/full/wizban/import_projectset_wizban.gif Binary files differdeleted file mode 100644 index 7ebb8362a..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/wizban/import_projectset_wizban.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/icons/full/wizban/share_wizban.gif b/bundles/org.eclipse.team.ui/icons/full/wizban/share_wizban.gif Binary files differdeleted file mode 100644 index 5ce318153..000000000 --- a/bundles/org.eclipse.team.ui/icons/full/wizban/share_wizban.gif +++ /dev/null diff --git a/bundles/org.eclipse.team.ui/plugin.properties b/bundles/org.eclipse.team.ui/plugin.properties deleted file mode 100644 index 8659cf692..000000000 --- a/bundles/org.eclipse.team.ui/plugin.properties +++ /dev/null @@ -1,50 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -providerName=Eclipse.org -pluginName=Team Support UI - -configurationWizards=Configuration Wizards -targetWizards=Target Site Addition Wizards - -TeamPreferencePage.name=Team -TextPreferencePage.name=File Content -IgnorePreferencePage.name=Ignored Resources -loginDetails=Login Details -targetSite=Target Site - -ConfigureProject.label=&Share Project... -ConfigureProject.tooltip=Share the project with others using a version and configuration management system. - -TeamGroupMenu.label=T&eam -Team.viewCategory=Team - -SyncView.name=Synchronize - -ProjectSetImportWizard.name=Team Project Set -ProjectSetImportWizard.description=A wizard that imports a Team Project Set -ProjectSetExportWizard.name=Team Project Set -ProjectSetExportWizard.description=A wizard that exports a Team Project Set -TargetSiteImportWizard.name=Target Site -TargetSiteImportWizard.description=A wizard that imports a Target site -TargetSiteExportWizard.name=Target Site -TargetSiteExportWizard.description=A wizard that exports a Target site - -Deployment.group=Depl&oy -Deployment.getAction=&Target -Deployment.uploadAction=Upl&oad -Deployment.synchronize=Synchroni&ze with Target... - -SiteExplorerGetAs.label=Download &As... -SiteExplorerGetAs.tooltip=Download the selected remote folder with a user specified project type and name. -SiteExplorerGetAsProject.label=&Download As Project -SiteExplorerGetAsProject.tooltip=Download the selected remote folder and create a project with the same name. -SiteExplorerDiscardSite.label=D&iscard Site -SiteExplorerDiscardSite.tooltip=Discard the site
\ No newline at end of file diff --git a/bundles/org.eclipse.team.ui/plugin.xml b/bundles/org.eclipse.team.ui/plugin.xml deleted file mode 100644 index 994d40c04..000000000 --- a/bundles/org.eclipse.team.ui/plugin.xml +++ /dev/null @@ -1,248 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- File written by PDE 1.0 --> -<plugin - id="org.eclipse.team.ui" - name="%pluginName" - version="2.1.0" - provider-name="%providerName" - class="org.eclipse.team.internal.ui.TeamUIPlugin"> - -<requires> - <import plugin="org.eclipse.core.resources"/> - <import plugin="org.eclipse.team.core"/> - <import plugin="org.eclipse.ui"/> - <import plugin="org.eclipse.compare"/> - <import plugin="org.apache.xerces"/> -</requires> - -<runtime> - <library name="teamui.jar"> - <export name="*"/> - <packages prefixes="org.eclipse.team.ui, org.eclipse.team.internal.ui"/> - </library> -</runtime> - -<extension-point id="configurationWizards" name="%configurationWizards" schema="schema/configurationWizards.exsd"/> -<extension-point id="targetConfigWizards" name="%targetWizards"/> - -<!-- **************** PREFERENCES ******************* --> - <extension - point = "org.eclipse.ui.preferencePages"> - <page id="org.eclipse.team.ui.TeamPreferences" - class="org.eclipse.team.internal.ui.TeamPreferencePage" - name="%TeamPreferencePage.name"> - </page> - <page id="org.eclipse.team.ui.TextPreferences" - class="org.eclipse.team.internal.ui.TextPreferencePage" - name="%TextPreferencePage.name" - category="org.eclipse.team.ui.TeamPreferences"> - </page> - <page id="org.eclipse.team.ui.IgnorePreferences" - class="org.eclipse.team.internal.ui.IgnorePreferencePage" - name="%IgnorePreferencePage.name" - category="org.eclipse.team.ui.TeamPreferences"> - </page> - </extension> - -<!-- ************** Property Pages *************** --> - <extension - point="org.eclipse.ui.propertyPages"> - <page - name="%loginDetails" - objectClass="org.eclipse.team.internal.ui.target.SiteElement" - id="org.eclipse.team.target.ui.propertyPages.AuthenticatedTargetSitePropertiesPage" - class="org.eclipse.team.internal.ui.target.AuthenticatedTargetSitePropertiesPage"> - </page> - <page - name="%targetSite" - objectClass="org.eclipse.core.resources.IProject" - id="org.eclipse.team.internal.ui.target.ProjectTargetMappingPropertiesPage" - class="org.eclipse.team.internal.ui.target.ProjectTargetMappingPropertiesPage"> - <filter - name="projectPersistentProperty" - value="org.eclipse.team.target=basic"> - </filter> - </page> - </extension> - -<!-- ****************** POPUP ACTIONS *************** --> - -<extension - point="org.eclipse.ui.popupMenus"> - <objectContribution - id="org.eclipse.team.ui.ResourceContributions" - objectClass="org.eclipse.core.resources.IResource" adaptable="true"> - <menu - id="team.main" - path="additions" - label="%TeamGroupMenu.label"> - <separator name="group1"/> - <separator name="group2"/> - <separator name="group3"/> - <separator name="group4"/> - <separator name="group5"/> - <separator name="group6"/> - <separator name="group7"/> - <separator name="group8"/> - <separator name="group9"/> - <separator name="group10"/> - <separator name="targetGroup"/> - <separator name="projectGroup"/> - </menu> - </objectContribution> - <objectContribution - id="org.eclipse.team.ui.ProjectContributions" - objectClass="org.eclipse.core.resources.IProject" adaptable="true"> - <action - id="org.eclipse.team.ui.ConfigureProject" - label="%ConfigureProject.label" - tooltip="%ConfigureProject.tooltip" - menubarPath="team.main/projectGroup" - enablesFor="1" - class="org.eclipse.team.internal.ui.actions.ConfigureProjectAction"> - </action> - </objectContribution> - - <!-- ****************** Target Management Popup Actions *************** --> - - <objectContribution - id="org.eclipse.team.ui.targetResourceContributionsActions" - objectClass="org.eclipse.core.resources.IResource" adaptable="true"> - <filter - name="projectPersistentProperty" - value="org.eclipse.team.target=basic"> - </filter> - <action - menubarPath="replaceWithMenu/replaceWithGroup" - class="org.eclipse.team.internal.ui.target.GetAction" - helpContextId="org.eclipse.team.ui.target_get_action_context" - id="org.eclipse.team.target.getAction" - label="%Deployment.getAction"> - </action> - <action - menubarPath="team.main/targetGroup" - class="org.eclipse.team.internal.ui.target.UploadAction" - id="org.eclipse.team.target.uploadAction" - helpContextId="org.eclipse.team.ui.target_put_action_context" - label="%Deployment.uploadAction"> - </action> - <action - menubarPath="team.main/targetGroup" - class="org.eclipse.team.internal.ui.target.SyncAction" - helpContextId="org.eclipse.team.ui.target_synchronize_action_context" - id="org.eclipse.team.target.SyncAction" - label="%Deployment.synchronize"> - </action> - </objectContribution> - - <objectContribution - objectClass="org.eclipse.team.internal.ui.target.RemoteResourceElement" - id="org.eclipse.team.internal.ui.target.RemoteResourceElement"> - <action - label="%SiteExplorerGetAs.label" - tooltip="%SiteExplorerGetAs.tooltip" - class="org.eclipse.team.internal.ui.target.GetAsAction" - helpContextId="org.eclipse.team.ui.target_getas_action_context" - id="org.eclipse.team.internal.ui.target.GetAsAction"> - </action> - <action - label="%SiteExplorerGetAsProject.label" - tooltip="%SiteExplorerGetAsProject.tooltip" - class="org.eclipse.team.internal.ui.target.GetAsProjectAction" - helpContextId="org.eclipse.team.ui.target_getasproject_action_context" - id="org.eclipse.team.internal.ui.target.GetAsProjectAction"> - </action> - </objectContribution> - - <objectContribution - objectClass="org.eclipse.team.internal.ui.target.SiteElement" - id="org.eclipse.team.internal.ui.target.SiteElement"> - <action - label="%SiteExplorerDiscardSite.label" - tooltip="%SiteExplorerDiscardSite.tooltip" - class="org.eclipse.team.internal.ui.target.DiscardSiteAction" - helpContextId="org.eclipse.team.ui.target_disconnect_action_context" - id="org.eclipse.team.internal.ui.target.DiscardSiteAction"> - </action> - </objectContribution> -</extension> - -<!-- ************** Views ********************** --> -<extension point="org.eclipse.ui.views"> - <category - id="org.eclipse.team.ui" - name="%Team.viewCategory"> - </category> - <view - id="org.eclipse.team.ui.sync.SyncView" - name="%SyncView.name" - icon="icons/full/cview16/synch_synch.gif" - fastViewWidthRatio="0.75" - category="org.eclipse.team.ui" - class="org.eclipse.team.internal.ui.sync.SyncView"> - </view> -</extension> - -<!-- ****************** Import Wizards ********************* --> - <extension - point="org.eclipse.ui.importWizards"> - <wizard - id="org.eclipse.team.ui.ProjectSetImportWizard" - name="%ProjectSetImportWizard.name" - class="org.eclipse.team.internal.ui.ProjectSetImportWizard" - icon="icons/full/obj/import_projectset.gif"> - <description> - %ProjectSetImportWizard.description - </description> - <selection class="org.eclipse.core.resources.IProject"/> - </wizard> -<!-- <wizard - id="org.eclipse.team.ui.TargetSiteImportWizard" - name="%TargetSiteImportWizard.name" - class="org.eclipse.team.internal.ui.target.TargetSiteImportWizard"> - <description> - %TargetSiteImportWizard.description - </description> - <selection class="org.eclipse.team.internal.ui.target.SiteElement"/> - </wizard> --> - </extension> - -<!-- ****************** Export Wizards ********************* --> - <extension - point="org.eclipse.ui.exportWizards"> - <wizard - id="org.eclipse.team.ui.ProjectSetExportWizard" - name="%ProjectSetExportWizard.name" - class="org.eclipse.team.internal.ui.ProjectSetExportWizard" - icon="icons/full/obj/export_projectset.gif"> - <description> - %ProjectSetExportWizard.description - </description> - <selection class="org.eclipse.core.resources.IProject"/> - </wizard> -<!-- <wizard - id="org.eclipse.team.ui.target.TargetSiteExportWizard" - name="%TargetSiteExportWizard.name" - class="org.eclipse.team.internal.ui.target.TargetSiteExportWizard"> - <description> - %TargetSiteExportWizard.description - </description> - <selection class="org.eclipse.team.internal.ui.target.SiteElement"/> - </wizard> --> - </extension> - -<!-- ***************** Perspective Extensions ********************** --> - <extension point="org.eclipse.ui.perspectiveExtensions"> - <perspectiveExtension - targetID="org.eclipse.ui.resourcePerspective"> - <view id="org.eclipse.team.ui.sync.SyncView" - relative="org.eclipse.ui.views.TaskList" - visible="false" - relationship="stack"/> - <view id="org.eclipse.team.ui.target.SiteExplorerView" - relative="org.eclipse.ui.views.ResourceNavigator" - visible="false" - relationship="stack"/> - </perspectiveExtension> - </extension> -</plugin> diff --git a/bundles/org.eclipse.team.ui/schema/configurationWizards.exsd b/bundles/org.eclipse.team.ui/schema/configurationWizards.exsd deleted file mode 100644 index 944ede91e..000000000 --- a/bundles/org.eclipse.team.ui/schema/configurationWizards.exsd +++ /dev/null @@ -1,142 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.team.ui"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.team.ui" id="configurationWizards" name="Configuration Wizards"/> - </appInfo> - <documentation> - This extension point is used to register a method for configuration of a project. -Configuration involves the association of a project with a team provider, including all information necessary to initialize -that team provider, including such things as username, password, and any relevant information necessary to locate the provider. -<p> -Providers may provide an extension for this extension point, and an implementation of <samp>org.eclipse.team.ui.IConfigurationWizard</samp> -which gathers the necessary information and configures the projects. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="wizard" minOccurs="0" maxOccurs="1"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="wizard"> - <annotation> - <appInfo> - <meta.element labelAttribute="name"/> - </appInfo> - </annotation> - <complexType> - <attribute name="name" type="string" use="required"> - <annotation> - <documentation> - The name of the configuration type as it should appear in the configuration wizard. Examples are "CVS", "WebDAV". - </documentation> - </annotation> - </attribute> - <attribute name="icon" type="string" use="required"> - <annotation> - <documentation> - the icon to present in the configuration wizard next to the name. - </documentation> - <appInfo> - <meta.attribute kind="resource"/> - </appInfo> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - a fully qualified name of the Java class implementing <samp>org.eclipse.team.ui.IConfigurationWizard</samp>. - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.jface.wizard.Wizard:org.eclipse.team.ui.IConfigurationWizard"/> - </appInfo> - </annotation> - </attribute> - <attribute name="id" type="string" use="required"> - <annotation> - <documentation> - a unique identifier for this extension. - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - Following is an example of a configuration wizard extension: - -<p> -<pre> - <extension point="org.eclipse.team.ui.configurationWizard"> - <wizard - name="WebDAV" - icon="webdav.gif" - class="com.xyz.DAVDecorator" - id="com.xyz.dav"> - </wizard> - </extension> -</pre> -</p> - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - The value of the <samp>class</samp> attribute must represent a class that implements <samp>org.eclipse.team.ui.IConfigurationWizard</samp>. -This interface supports configuration of a wizard given a workbench and a project. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - The plug-in org.eclipse.team.provider.examples.ui contains sample implementations of IConfigurationWizard for the WebDAV and filesystem provider types. - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - Copyright (c) 2002 IBM Corporation and others. -All rights reserved. This program and the accompanying materials are made available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a> - </documentation> - </annotation> - -</schema> diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigurationWizardElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigurationWizardElement.java deleted file mode 100644 index d52b40ce1..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigurationWizardElement.java +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.internal.model.WorkbenchAdapter; -import org.eclipse.ui.model.IWorkbenchAdapter; - -/** - * ConfigurationWizardElement represents an item in the configuration wizard table, - * declared by an extension to the configurationWizards extension point. - */ -public class ConfigurationWizardElement extends WorkbenchAdapter implements IAdaptable { - private String id; - private String name; - private ImageDescriptor imageDescriptor; - private String description; - private IConfigurationElement configurationElement; - - /** - * Creates a new instance of this class - * - * @param name the name of the element - */ - public ConfigurationWizardElement(String name) { - this.name = name; - } - /** - * Create an the instance of the object described by the configuration - * element. That is, create the instance of the class the isv supplied in - * the extension point. - * - * @throws CoreException if an error occurs creating the extension - */ - public Object createExecutableExtension() throws CoreException { - return TeamUIPlugin.createExtension(configurationElement, ConfigureProjectWizard.ATT_CLASS); - } - /* - * Method declared on IAdaptable. - */ - public Object getAdapter(Class adapter) { - if (adapter == IWorkbenchAdapter.class) { - return this; - } - return Platform.getAdapterManager().getAdapter(this, adapter); - } - /** - * Returns the configuration element - * - * @return the configuration element - */ - public IConfigurationElement getConfigurationElement() { - return configurationElement; - } - /** - * Returns the description parameter of this element - * - * @return the description of this elemnet - */ - public String getDescription() { - return description; - } - /** - * Returns the image for the given element - * - * @param element the element to get the image for - * @return the image for the given element - */ - public ImageDescriptor getImageDescriptor(Object element) { - return imageDescriptor; - } - /** - * Returns the label for the given element - * - * @param element the element to get the label for - * @return the label for the given element - */ - public String getLabel(Object element) { - return name; - } - /** - * Returns the id as specified in the extension. - * - * @return java.lang.String - */ - public String getID() { - return id; - } - /** - * Returns the image for this element. - * - * @return the image for this element - */ - public ImageDescriptor getImageDescriptor() { - return imageDescriptor; - } - /** - * Set the configuration element - * - * @param newConfigurationElement the new configuration element - */ - public void setConfigurationElement(IConfigurationElement newConfigurationElement) { - configurationElement = newConfigurationElement; - } - /** - * Set the description parameter of this element - * - * @param value the new desrciption - */ - public void setDescription(String value) { - description = value; - } - /** - * Sets the id parameter of this element - * - * @param value the new ID - */ - public void setID(String value) { - id = value; - } - /** - * Sets the image for this element. - * - * @param value the new image - */ - public void setImageDescriptor(ImageDescriptor value) { - imageDescriptor = value; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigurationWizardNode.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigurationWizardNode.java deleted file mode 100644 index aad74335b..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigurationWizardNode.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.IWizardNode; -import org.eclipse.swt.graphics.Point; - -/** - * ConfigurationWizardNode represents the objects in the - * table in the Configuration wizard. - */ -public class ConfigurationWizardNode implements IWizardNode { - // The element this node represents - ConfigurationWizardElement element; - // The wizard this node is in - IWizard wizard; - - /** - * Create a new ConfigurationWizardNode - * - * @param element the configuration wizard element for this node - */ - public ConfigurationWizardNode(ConfigurationWizardElement element) { - this.element = element; - } - /* - * Method declared on IWizardNode. - */ - public void dispose() { - if (wizard != null) { - wizard.dispose(); - wizard = null; - } - } - /* - * Method declared on IWizardNode. - */ - public Point getExtent() { - return new Point(-1, -1); - } - /* - * Method declared on IWizardNode. - */ - public IWizard getWizard() { - if (wizard == null) { - try { - wizard = (IWizard)element.createExecutableExtension(); - } catch (CoreException e) { - System.out.println(Policy.bind("ConfigurationWizard.exceptionCreatingWizard")); //$NON-NLS-1$ - } - } - return wizard; - } - /* - * Method declared on IWizardNode. - */ - public boolean isContentCreated() { - return wizard != null; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigureProjectWizard.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigureProjectWizard.java deleted file mode 100644 index c6da4a11b..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigureProjectWizard.java +++ /dev/null @@ -1,234 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IPluginRegistry; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.team.ui.IConfigurationWizard; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.internal.model.AdaptableList; - -/** - * The wizard for associating projects with team providers - */ -public class ConfigureProjectWizard extends Wizard implements IConfigurationWizard { - protected IWorkbench workbench; - protected IProject project; - protected IConfigurationWizard wizard; - - protected ConfigureProjectWizardMainPage mainPage; - private String pluginId = UIConstants.PLUGIN_ID; - - protected final static String TAG_WIZARD = "wizard"; //$NON-NLS-1$ - protected final static String TAG_DESCRIPTION = "description"; //$NON-NLS-1$ - protected final static String ATT_NAME = "name"; //$NON-NLS-1$ - protected final static String ATT_CLASS = "class"; //$NON-NLS-1$ - protected final static String ATT_ICON = "icon"; //$NON-NLS-1$ - protected final static String ATT_ID = "id"; //$NON-NLS-1$ - - public ConfigureProjectWizard() { - setNeedsProgressMonitor(true); - setWindowTitle(getWizardWindowTitle()); //$NON-NLS-1$ - } - - protected String getExtensionPoint() { - return UIConstants.PT_CONFIGURATION; - } - - protected String getWizardWindowTitle() { - return Policy.bind("ConfigureProjectWizard.title"); //$NON-NLS-1$ - } - - protected String getWizardLabel() { - return Policy.bind("ConfigureProjectWizard.configureProject"); //$NON-NLS-1$ - } - - protected String getWizardDescription() { - return Policy.bind("ConfigureProjectWizard.description"); //$NON-NLS-1$ - } - - /* - * @see Wizard#addPages - */ - public void addPages() { - AdaptableList wizards = getAvailableWizards(); - if (wizards.size() == 1) { - // If there is only one wizard, skip the first page. - // Only skip the first page if the one wizard has at least one page. - ConfigurationWizardElement element = (ConfigurationWizardElement)wizards.getChildren()[0]; - try { - this.wizard = (IConfigurationWizard)element.createExecutableExtension(); - wizard.init(workbench, project); - wizard.addPages(); - if (wizard.getPageCount() > 0) { - wizard.setContainer(getContainer()); - IWizardPage[] pages = wizard.getPages(); - for (int i = 0; i < pages.length; i++) { - addPage(pages[i]); - } - return; - } - } catch (CoreException e) { - TeamUIPlugin.log(e.getStatus()); - return; - } - } - mainPage = new ConfigureProjectWizardMainPage("configurePage1", getWizardLabel(), TeamImages.getImageDescriptor(UIConstants.IMG_WIZBAN_SHARE), wizards); //$NON-NLS-1$ - mainPage.setDescription(getWizardDescription()); - mainPage.setProject(project); - mainPage.setWorkbench(workbench); - addPage(mainPage); - } - public IWizardPage getNextPage(IWizardPage page) { - if (wizard != null) { - return wizard.getNextPage(page); - } - return super.getNextPage(page); - } - public boolean canFinish() { - // If we are on the first page, never allow finish unless the selected wizard has no pages. - if (getContainer().getCurrentPage() == mainPage) { - if (mainPage.getSelectedWizard() != null && mainPage.getNextPage() == null) { - return true; - } - return false; - } - if (wizard != null) { - return wizard.canFinish(); - } - return super.canFinish(); - } - /* - * @see Wizard#performFinish - */ - public boolean performFinish() { - // There is only one wizard with at least one page - if (wizard != null) { - return wizard.performFinish(); - } - // If we are on the first page and the selected wizard has no pages then - // allow it to finish. - if (getContainer().getCurrentPage() == mainPage) { - IConfigurationWizard noPageWizard = mainPage.getSelectedWizard(); - if (noPageWizard != null) { - if (noPageWizard.canFinish()) - { - return noPageWizard.performFinish(); - } - } - } - // If the wizard has pages and there are several - // wizards registered then the registered wizard - // will call it's own performFinish(). - return true; - } - /** - * Returns the configuration wizards that are available for invocation. - * - * @return the available wizards - */ - protected AdaptableList getAvailableWizards() { - AdaptableList result = new AdaptableList(); - IPluginRegistry registry = Platform.getPluginRegistry(); - IExtensionPoint point = registry.getExtensionPoint(pluginId, getExtensionPoint()); - if (point != null) { - IExtension[] extensions = point.getExtensions(); - for (int i = 0; i < extensions.length; i++) { - IConfigurationElement[] elements = extensions[i].getConfigurationElements(); - for (int j = 0; j < elements.length; j++) { - IConfigurationElement element = elements[j]; - if (element.getName().equals(TAG_WIZARD)) { - ConfigurationWizardElement wizard = createWizardElement(element); - if (wizard != null) { - result.add(wizard); - } - } - } - } - } - - return result; - } - /** - * Returns a new ConfigurationWizardElement configured according to the parameters - * contained in the passed Registry. - * - * May answer null if there was not enough information in the Extension to create - * an adequate wizard - * - * @param element the element for which to create a wizard element - * @return the wizard element for the given element - */ - protected ConfigurationWizardElement createWizardElement(IConfigurationElement element) { - // WizardElements must have a name attribute - String nameString = element.getAttribute(ATT_NAME); - if (nameString == null) { - // Missing attribute - return null; - } - ConfigurationWizardElement result = new ConfigurationWizardElement(nameString); - if (initializeWizard(result, element)) { - // initialization was successful - return result; - } - return null; - } - /** - * Initialize the passed element's properties based on the contents of - * the passed registry. Answer a boolean indicating whether the element - * was able to be adequately initialized. - * - * @param element the element to initialize the properties for - * @param extension the registry to get properties from - * @return whether initialization was successful - */ - protected boolean initializeWizard(ConfigurationWizardElement element, IConfigurationElement config) { - element.setID(config.getAttribute(ATT_ID)); - String description = ""; //$NON-NLS-1$ - IConfigurationElement [] children = config.getChildren(TAG_DESCRIPTION); - if (children.length >= 1) { - description = children[0].getValue(); - } - - element.setDescription(description); - - // apply CLASS and ICON properties - element.setConfigurationElement(config); - String iconName = config.getAttribute(ATT_ICON); - if (iconName != null) { - IExtension extension = config.getDeclaringExtension(); - element.setImageDescriptor(TeamImages.getImageDescriptorFromExtension(extension, iconName)); - } - // ensure that a class was specified - if (element.getConfigurationElement() == null) { - // Missing attribute - return false; - } - setForcePreviousAndNextButtons(true); - return true; - } - /* - * Method declared on IConfigurationWizard - */ - public void init(IWorkbench workbench, IProject project) { - this.workbench = workbench; - this.project = project; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigureProjectWizardMainPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigureProjectWizardMainPage.java deleted file mode 100644 index e6f21d13d..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigureProjectWizardMainPage.java +++ /dev/null @@ -1,185 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Table; -import org.eclipse.team.ui.IConfigurationWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.internal.model.AdaptableList; -import org.eclipse.ui.model.WorkbenchContentProvider; -import org.eclipse.ui.model.WorkbenchLabelProvider; - -/** - * The main page of the configure project wizard. It contains a table - * which lists possible team providers with which to configure the project. - * The user may select one and press "Next", which will display a provider- - * specific wizard page. - */ -public class ConfigureProjectWizardMainPage extends WizardPage { - private Table table; - private TableViewer viewer; - private AdaptableList wizards; - private IWorkbench workbench; - private IProject project; - private String description; - - private IConfigurationWizard selectedWizard; - - /** - * Create a new ConfigureProjectWizardMainPage - * - * @param pageName the name of the page - * @param title the title of the page - * @param titleImage the image for the page title - * @param wizards the wizards to populate the table with - */ - public ConfigureProjectWizardMainPage(String pageName, String title, ImageDescriptor titleImage, AdaptableList wizards) { - this(pageName,title,titleImage,wizards,Policy.bind("ConfigureProjectWizardMainPage.selectRepository")); //$NON-NLS-1$ - } - - /** - * Create a new ConfigureProjectWizardMainPage - * - * @param pageName the name of the page - * @param title the title of the page - * @param titleImage the image for the page title - * @param wizards the wizards to populate the table with - * @param description The string to use as a description label - */ - public ConfigureProjectWizardMainPage(String pageName, String title, ImageDescriptor titleImage, AdaptableList wizards, String description) { - super(pageName, title, titleImage); - this.wizards = wizards; - this.description = description; - } - - public IConfigurationWizard getSelectedWizard() { - return selectedWizard; - } - /* - * @see WizardPage#canFlipToNextPage - */ - public boolean canFlipToNextPage() { - return selectedWizard != null && selectedWizard.getPageCount() > 0; - } - /* - * @see WizardPage#createControl - */ - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout()); - composite.setLayoutData(new GridData(GridData.FILL_BOTH)); - - setControl(composite); - - // set F1 help - WorkbenchHelp.setHelp(composite, IHelpContextIds.SHARE_PROJECT_PAGE); - - Label label = new Label(composite, SWT.LEFT); - label.setText(description); - GridData data = new GridData(); - data.horizontalAlignment = GridData.FILL; - label.setLayoutData(data); - - table = new Table(composite, SWT.SINGLE | SWT.BORDER); - data = new GridData(GridData.FILL_BOTH); - data.heightHint = table.getItemHeight() * 7; - table.setLayoutData(data); - viewer = new TableViewer(table); - viewer.setContentProvider(new WorkbenchContentProvider()); - viewer.setLabelProvider(new WorkbenchLabelProvider()); - viewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - // Initialize the wizard so we can tell whether to enable the Next button - ISelection selection = event.getSelection(); - if (selection == null || !(selection instanceof IStructuredSelection)) { - selectedWizard = null; - setPageComplete(false); - return; - } - IStructuredSelection ss = (IStructuredSelection)selection; - if (ss.size() != 1) { - selectedWizard = null; - setPageComplete(false); - return; - } - ConfigurationWizardElement selectedElement = (ConfigurationWizardElement)ss.getFirstElement(); - try { - selectedWizard = (IConfigurationWizard)selectedElement.createExecutableExtension(); - selectedWizard.init(workbench, project); - } catch (CoreException e) { - return; - } - selectedWizard.addPages(); - - // Ask the container to update button enablement - setPageComplete(true); - } - }); - viewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - getWizard().getContainer().showPage(getNextPage()); - } - }); - viewer.setInput(wizards); - } - /** - * The <code>WizardSelectionPage</code> implementation of - * this <code>IWizardPage</code> method returns the first page - * of the currently selected wizard if there is one. - * - * @see WizardPage#getNextPage - */ - public IWizardPage getNextPage() { - if (selectedWizard == null) return null; - return selectedWizard.getStartingPage(); - } - /** - * Set the workbench to the argument - * - * @param workbench the workbench to set - */ - public void setWorkbench(IWorkbench workbench) { - this.workbench = workbench; - } - /** - * Set the project to the argument - * - * @param project the project to set - */ - public void setProject(IProject project) { - this.project = project; - } - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - table.setFocus(); - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DetailsDialog.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DetailsDialog.java deleted file mode 100644 index 62990d572..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DetailsDialog.java +++ /dev/null @@ -1,264 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; - -/** - * A simple superclass for detail button dialogs. - */ -abstract public class DetailsDialog extends Dialog { - /** - * The Details button. - */ - private Button detailsButton; - - /** - * The Ok button. - */ - private Button okButton; - - /** - * The title of the dialog. - */ - private String title; - - /** - * The error message - */ - private Label errorMessageLabel; - - /** - * The SWT list control that displays the error details. - */ - private Composite detailsComposite; - - /** - * Indicates whether the error details viewer is currently created. - */ - private boolean detailsCreated = false; - - /** - * The key for the image to be displayed (one of the image constants on Dialog) - */ - private String imageKey = null; - - /** - * Creates a details pane dialog. - * Note that the dialog will have no visual representation (no widgets) - * until it is told to open. - * - * @param parentShell the shell under which to create this dialog - * @param dialogTitle the title to use for this dialog - * @param message the message to show in this dialog - * @param status the error to show to the user - * @param displayMask the mask to use to filter the displaying of child items, - * as per <code>IStatus.matches</code> - * @see org.eclipse.core.runtime.IStatus#matches - */ - public DetailsDialog(Shell parentShell, String dialogTitle) { - super(parentShell); - this.title = dialogTitle; - setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL); - } - - /* (non-Javadoc) - * Method declared on Dialog. - * Handles the pressing of the Ok or Details button in this dialog. - * If the Ok button was pressed then close this dialog. If the Details - * button was pressed then toggle the displaying of the error details area. - * Note that the Details button will only be visible if the error being - * displayed specifies child details. - */ - protected void buttonPressed(int id) { - if (id == IDialogConstants.DETAILS_ID) { // was the details button pressed? - toggleDetailsArea(); - } else { - super.buttonPressed(id); - } - } - - /* (non-Javadoc) - * Method declared in Window. - */ - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(title); - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - // create OK and Details buttons - if(includeOkButton()) { - okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); - } - if (includeCancelButton()) { - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - detailsButton = createButton(parent, IDialogConstants.DETAILS_ID, IDialogConstants.SHOW_DETAILS_LABEL, false); - updateEnablements(); - } - - /* (non-Javadoc) - * Method declared on Dialog. - * Creates and returns the contents of the upper part - * of the dialog (above the button bar). - */ - final protected Control createDialogArea(Composite parent) { - // create composite - Composite composite = (Composite)super.createDialogArea(parent); - - // create image - Image image = JFaceResources.getImageRegistry().get(getImageKey()); - if (image != null) { - // create a composite to split the dialog area in two - Composite top = new Composite(composite, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - layout.verticalSpacing = 0; - layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - layout.numColumns = 2; - top.setLayout(layout); - top.setLayoutData(new GridData(GridData.FILL_BOTH)); - top.setFont(parent.getFont()); - - // add the image to the left of the composite - Label label = new Label(top, 0); - image.setBackground(label.getBackground()); - label.setImage(image); - label.setLayoutData(new GridData( - GridData.HORIZONTAL_ALIGN_CENTER | - GridData.VERTICAL_ALIGN_CENTER)); - - // add a composite to the right to contain the custom components - Composite right = new Composite(top, SWT.NONE); - layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); - layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - right.setLayout(layout); - right.setLayoutData(new GridData(GridData.FILL_BOTH)); - right.setFont(parent.getFont()); - createMainDialogArea(right); - } else { - createMainDialogArea(composite); - } - - errorMessageLabel = new Label(composite, SWT.NONE); - errorMessageLabel.setLayoutData(new GridData( - GridData.GRAB_HORIZONTAL | - GridData.HORIZONTAL_ALIGN_FILL)); - errorMessageLabel.setFont(parent.getFont()); - errorMessageLabel.setForeground(getShell().getDisplay().getSystemColor(SWT.COLOR_RED)); - - return composite; - } - - /** - * Creates the dialog's top composite - * - * @param parent the parent composite - */ - abstract protected void createMainDialogArea(Composite parent); - - /** - * Create this dialog's drop-down list component. - * - * @param parent the parent composite - * @return the drop-down list component - */ - abstract protected Composite createDropDownDialogArea(Composite parent); - - /** - * Toggles the unfolding of the details area. This is triggered by - * the user pressing the details button. - */ - private void toggleDetailsArea() { - Point windowSize = getShell().getSize(); - Point oldSize = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT); - - if (detailsCreated) { - detailsComposite.dispose(); - detailsCreated = false; - detailsButton.setText(IDialogConstants.SHOW_DETAILS_LABEL); - } else { - detailsComposite = createDropDownDialogArea((Composite)getContents()); - detailsCreated = true; - detailsButton.setText(IDialogConstants.HIDE_DETAILS_LABEL); - } - - Point newSize = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT); - - getShell().setSize(new Point(windowSize.x, windowSize.y + (newSize.y - oldSize.y))); - } - - final protected void setErrorMessage(String error) { - if(errorMessageLabel != null) { - if(error == null || error.length() == 0) { - errorMessageLabel.setText(""); //$NON-NLS-1$ - } else { - errorMessageLabel.setText(error); - } - errorMessageLabel.update(); - } - } - - final protected void setPageComplete(boolean complete) { - if(okButton != null ) { - okButton.setEnabled(complete); - } - } - - abstract protected void updateEnablements(); - - protected boolean includeCancelButton() { - return true; - } - - protected boolean includeOkButton() { - return true; - } - - /** - * Returns the imageKey. - * @return String - */ - protected String getImageKey() { - return imageKey; - } - - - /** - * Sets the imageKey. - * @param imageKey The imageKey to set - */ - protected void setImageKey(String imageKey) { - this.imageKey = imageKey; - } - - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DetailsDialogWithProjects.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DetailsDialogWithProjects.java deleted file mode 100644 index 34119fa12..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DetailsDialogWithProjects.java +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import org.eclipse.core.resources.IProject; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; - -/** - * Display a message with a details that can contain a list of projects - */ -public class DetailsDialogWithProjects extends DetailsDialog { - - private String message; - private String detailsTitle; - private IProject[] projects; - - private Button actionButton; - private org.eclipse.swt.widgets.List detailsList; - - private boolean includeCancelButton; - - /** - * Constructor for DetailsDialogWithProjects. - * @param parentShell - * @param dialogTitle - */ - public DetailsDialogWithProjects(Shell parentShell, String dialogTitle, String dialogMessage, String detailsTitle, IProject[] projects, boolean includeCancelButton, String imageKey) { - super(parentShell, dialogTitle); - setImageKey(imageKey); - this.message = dialogMessage; - this.detailsTitle = detailsTitle; - this.projects = projects; - this.includeCancelButton = includeCancelButton; - } - - /** - * @see DetailsDialog#createMainDialogArea(Composite) - */ - protected void createMainDialogArea(Composite composite) { - Label label = new Label(composite, SWT.WRAP); - label.setText(message); //$NON-NLS-1$ - GridData data = new GridData( - GridData.GRAB_HORIZONTAL | - GridData.GRAB_VERTICAL | - GridData.HORIZONTAL_ALIGN_FILL | - GridData.VERTICAL_ALIGN_CENTER); - data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); - label.setLayoutData(data); - label.setFont(composite.getFont()); - updateEnablements(); - } - - /** - * @see DetailsDialog#createDropDownDialogArea(Composite) - */ - protected Composite createDropDownDialogArea(Composite parent) { - // create a composite with standard margins and spacing - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); - layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); - layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); - layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - composite.setLayout(layout); - composite.setLayoutData(new GridData(GridData.FILL_BOTH)); - composite.setFont(parent.getFont()); - - detailsList = new org.eclipse.swt.widgets.List(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); - GridData data = new GridData (); - data.heightHint = 75; - data.horizontalAlignment = GridData.FILL; - data.grabExcessHorizontalSpace = true; - detailsList.setLayoutData(data); - - if (detailsTitle != null) { - detailsList.add(detailsTitle); - } - - for (int i = 0; i < projects.length; i++) { - IProject project = projects[i]; - detailsList.add(projects[i].getName()); //$NON-NLS-1$ - } - return composite; - } - - /** - * @see DetailsDialog#updateEnablements() - */ - protected void updateEnablements() { - setPageComplete(true); - } - - /** - * @see DetailsDialog#includeCancelButton() - */ - protected boolean includeCancelButton() { - return includeCancelButton; - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ExportProjectSetMainPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ExportProjectSetMainPage.java deleted file mode 100644 index 217ed6dd7..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ExportProjectSetMainPage.java +++ /dev/null @@ -1,198 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.CheckStateChangedEvent; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.ICheckStateListener; -import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.Text; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.model.WorkbenchContentProvider; -import org.eclipse.ui.model.WorkbenchLabelProvider; - -public class ExportProjectSetMainPage extends TeamWizardPage { - Text fileText; - String file = ""; //$NON-NLS-1$ - Button browseButton; - List selectedProjects = new ArrayList(); - - CheckboxTableViewer tableViewer; - Table table; - - class ProjectContentProvider extends WorkbenchContentProvider { - public Object[] getElements(Object element) { - if (element instanceof IProject[]) return (IProject[]) element; - return null; - } - }; - - public ExportProjectSetMainPage(String pageName, String title, ImageDescriptor titleImage) { - super(pageName, title, titleImage); - } - - /* - * @see IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - Composite composite = createComposite(parent, 1); - initializeDialogUnits(composite); - - // set F1 help - WorkbenchHelp.setHelp(composite, IHelpContextIds.EXPORT_PROJECT_SET_PAGE); - - createLabel(composite, Policy.bind("ExportProjectSetMainPage.Select_the_projects_to_include_in_the_project_set__2")); //$NON-NLS-1$ - - table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); - tableViewer = new CheckboxTableViewer(table); - table.setLayout(new TableLayout()); - GridData data = new GridData(GridData.FILL_BOTH); - data.heightHint = 300; - table.setLayoutData(data); - tableViewer.setContentProvider(new ProjectContentProvider()); - tableViewer.setLabelProvider(new WorkbenchLabelProvider()); - tableViewer.addCheckStateListener(new ICheckStateListener() { - public void checkStateChanged(CheckStateChangedEvent event) { - IProject project = (IProject)event.getElement(); - if (event.getChecked()) { - selectedProjects.add(project); - } else { - selectedProjects.remove(project); - } - updateEnablement(); - } - }); - createLabel(composite, Policy.bind("ExportProjectSetMainPage.Project_Set_File_Name__3")); //$NON-NLS-1$ - - Composite inner = new Composite(composite, SWT.NULL); - inner.setLayoutData(new GridData(GridData.FILL_BOTH)); - GridLayout layout = new GridLayout(); - layout.numColumns = 3; - layout.marginHeight = 0; - layout.marginWidth = 0; - inner.setLayout(layout); - - createLabel(inner, Policy.bind("ExportProjectSetMainPage.&File_name__1")); //$NON-NLS-1$ - fileText = createTextField(inner); - if (file != null) fileText.setText(file); - fileText.addListener(SWT.Modify, new Listener() { - public void handleEvent(Event event) { - file = fileText.getText(); - updateEnablement(); - } - }); - - browseButton = new Button(inner, SWT.PUSH); - browseButton.setText(Policy.bind("ExportProjectSetMainPage.Browse_4")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, browseButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - browseButton.setLayoutData(data); - browseButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - FileDialog d = new FileDialog(getShell(), SWT.SAVE); - d.setFilterExtensions(new String[] {"*.psf"}); //$NON-NLS-1$ - d.setFilterNames(new String[] {Policy.bind("ExportProjectSetMainPage.Project_Set_Files_3")}); //$NON-NLS-1$ - d.setFileName(Policy.bind("ExportProjectSetMainPage.default")); //$NON-NLS-1$ - d.setFilterPath(new File(".").getAbsolutePath()); //$NON-NLS-1$ - String f = d.open(); - if (f != null) { - fileText.setText(f); - file = f; - } - } - }); - - initializeProjects(); - setControl(composite); - updateEnablement(); - } - - private void initializeProjects() { - List projectList = new ArrayList(); - IProject[] workspaceProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); - for (int i = 0; i < workspaceProjects.length; i++) { - if (RepositoryProvider.getProvider(workspaceProjects[i]) != null) { - projectList.add(workspaceProjects[i]); - } - } - tableViewer.setInput((IProject[]) projectList.toArray(new IProject[projectList.size()])); - // Check any necessary projects - if (selectedProjects != null) { - tableViewer.setCheckedElements((IProject[])selectedProjects.toArray(new IProject[selectedProjects.size()])); - } - } - private void updateEnablement() { - boolean complete; - if (selectedProjects.size() == 0) { - setMessage(null); - complete = false; - } else if (file.length() == 0) { - setMessage(null); - complete = false; - } else { - File f = new File(file); - if (f.isDirectory()) { - setMessage(Policy.bind("ExportProjectSetMainPage.You_have_specified_a_folder_5"), ERROR); //$NON-NLS-1$ - complete = false; - } else { - complete = true; - } - } - if (complete) { - setMessage(null); - } - setPageComplete(complete); - } - - public String getFileName() { - return file; - } - public void setFileName(String file) { - if (file != null) { - this.file = file; - } - } - - public IProject[] getSelectedProjects() { - return (IProject[])selectedProjects.toArray(new IProject[selectedProjects.size()]); - } - public void setSelectedProjects(IProject[] selectedProjects) { - this.selectedProjects.addAll(Arrays.asList(selectedProjects)); - } - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - fileText.setFocus(); - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IHelpContextIds.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IHelpContextIds.java deleted file mode 100644 index 5ed5e1da6..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IHelpContextIds.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -public interface IHelpContextIds { - public static final String PREFIX = TeamUIPlugin.ID + "."; //$NON-NLS-1$ - - // Preference Pages - public static final String TEAM_PREFERENCE_PAGE = PREFIX + "team_preference_page_context"; //$NON-NLS-1$ - public static final String IGNORE_PREFERENCE_PAGE = PREFIX + "ignore_preference_page_context"; //$NON-NLS-1$ - public static final String FILE_TYPE_PREFERENCE_PAGE = PREFIX + "file_type_preference_page_context"; //$NON-NLS-1$ - - // Wizard Pages - public static final String SHARE_PROJECT_PAGE = PREFIX + "share_project_page_context"; //$NON-NLS-1$ - public static final String IMPORT_PROJECT_SET_PAGE = PREFIX + "import_project_set_page_context"; //$NON-NLS-1$ - public static final String EXPORT_PROJECT_SET_PAGE = PREFIX + "export_project_set_page_context"; //$NON-NLS-1$ - public static final String TARGET_NEW_SITE_PAGE = PREFIX + "target_new_site_page_context"; //$NON-NLS-1$ - public static final String TARGET_MAPPING_SELECTION_PAGE = PREFIX + "target_mapping_selection_page_context"; //$NON-NLS-1$ - - // Catchup Release Viewers - public static final String TARGET_CATCHUP_RELEASE_VIEWER = PREFIX + "target_catchup_release_viewer_context"; //$NON-NLS-1$ - - // Target Actions - public static final String SYNC_GET_ACTION = PREFIX + "sync_get_action_context"; //$NON-NLS-1$ - public static final String SYNC_PUT_ACTION = PREFIX + "sync_put_action_context"; //$NON-NLS-1$ - - // Views - public static final String SITE_EXPLORER_VIEW = PREFIX + "site_explorer_view_context"; //$NON-NLS-1$ - public static final String SYNC_VIEW = PREFIX + "sync_view_context"; //$NON-NLS-1$ - - // Site Explorer View Actions - public static final String ADD_SITE_ACTION = PREFIX + "add_site_action_context"; //$NON-NLS-1$ - public static final String NEW_FOLDER_ACTION = PREFIX + "new_folder_action_context"; //$NON-NLS-1$ - - // Sync View Actions - public static final String OPEN_ACTION = PREFIX + "open_action_context"; //$NON-NLS-1$ - public static final String EXPANDALL_ACTION = PREFIX + "expandall_action_context"; //$NON-NLS-1$ - public static final String REMOVE_ACTION = PREFIX + "remove_action_context"; //$NON-NLS-1$ - public static final String NAVIGATOR_SHOW_ACTION = PREFIX + "navigator_show_action_context"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IPromptCondition.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IPromptCondition.java deleted file mode 100644 index 60234a5f2..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IPromptCondition.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import org.eclipse.core.resources.IResource; - -/** - * Input to a confirm prompt - * - * @see PromptingDialog - */ -public interface IPromptCondition { - /** - * Answers <code>true</code> if a prompt is required for this resource and - * false otherwise. - */ - public boolean needsPrompt(IResource resource); - - /** - * Answers the message to include in the prompt. - */ - public String promptMessage(IResource resource); -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IgnorePreferencePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IgnorePreferencePage.java deleted file mode 100644 index 5ae0ce0c3..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IgnorePreferencePage.java +++ /dev/null @@ -1,184 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableItem; -import org.eclipse.team.core.IIgnoreInfo; -import org.eclipse.team.core.Team; -import org.eclipse.team.ui.TeamUI; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.help.WorkbenchHelp; -public class IgnorePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - private Table ignoreTable; - private Button addButton; - private Button removeButton; - public void init(IWorkbench workbench) { - setDescription(Policy.bind("IgnorePreferencePage.description")); //$NON-NLS-1$ - } - - /** - * Creates preference page controls on demand. - * - * @param parent the parent for the preference page - */ - protected Control createContents(Composite ancestor) { - noDefaultAndApplyButton(); - - Composite parent = new Composite(ancestor, SWT.NULL); - GridLayout layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - layout.numColumns = 2; - parent.setLayout(layout); - GridData data = new GridData(); - data.verticalAlignment = GridData.FILL; - data.horizontalAlignment = GridData.FILL; - parent.setLayoutData(data); - - // set F1 help - WorkbenchHelp.setHelp(parent, IHelpContextIds.IGNORE_PREFERENCE_PAGE); - - Label l1 = new Label(parent, SWT.NULL); - l1.setText(Policy.bind("IgnorePreferencePage.ignorePatterns")); //$NON-NLS-1$ - data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); - data.horizontalSpan = 2; - l1.setLayoutData(data); - - ignoreTable = new Table(parent, SWT.CHECK | SWT.BORDER); - GridData gd = new GridData(GridData.FILL_BOTH); - //gd.widthHint = convertWidthInCharsToPixels(30); - gd.heightHint = 300; - ignoreTable.setLayoutData(gd); - ignoreTable.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - handleSelection(); - } - }); - - Composite buttons = new Composite(parent, SWT.NULL); - buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); - layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - buttons.setLayout(layout); - - addButton = new Button(buttons, SWT.PUSH); - addButton.setText(Policy.bind("IgnorePreferencePage.add")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, addButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - addButton.setLayoutData(data); - addButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - addIgnore(); - } - }); - - - removeButton = new Button(buttons, SWT.PUSH); - removeButton.setText(Policy.bind("IgnorePreferencePage.remove")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, removeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - removeButton.setLayoutData(data); - removeButton.setEnabled(false); - removeButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - removeIgnore(); - } - }); - - fillTable(); - Dialog.applyDialogFont(ancestor); - return parent; - } - /** - * Do anything necessary because the OK button has been pressed. - * - * @return whether it is okay to close the preference page - */ - public boolean performOk() { - int count = ignoreTable.getItemCount(); - String[] patterns = new String[count]; - boolean[] enabled = new boolean[count]; - TableItem[] items = ignoreTable.getItems(); - for (int i = 0; i < count; i++) { - patterns[i] = items[i].getText(); - enabled[i] = items[i].getChecked(); - } - Team.setAllIgnores(patterns, enabled); - TeamUIPlugin.broadcastPropertyChange(new PropertyChangeEvent(this, TeamUI.GLOBAL_IGNORES_CHANGED, null, null)); - return true; - } - - private void fillTable() { - IIgnoreInfo[] ignore = Team.getAllIgnores(); - for (int i = 0; i < ignore.length; i++) { - IIgnoreInfo info = ignore[i]; - TableItem item = new TableItem(ignoreTable, SWT.NONE); - item.setText(info.getPattern()); - item.setChecked(info.getEnabled()); - } - } - - private void addIgnore() { - InputDialog dialog = new InputDialog(getShell(), Policy.bind("IgnorePreferencePage.enterPatternShort"), Policy.bind("IgnorePreferencePage.enterPatternLong"), null, null); //$NON-NLS-1$ //$NON-NLS-2$ - dialog.open(); - if (dialog.getReturnCode() != InputDialog.OK) return; - String pattern = dialog.getValue(); - if (pattern.equals("")) return; //$NON-NLS-1$ - // Check if the item already exists - TableItem[] items = ignoreTable.getItems(); - for (int i = 0; i < items.length; i++) { - if (items[i].getText().equals(pattern)) { - MessageDialog.openWarning(getShell(), Policy.bind("IgnorePreferencePage.patternExistsShort"), Policy.bind("IgnorePreferencePage.patternExistsLong")); //$NON-NLS-1$ //$NON-NLS-2$ - return; - } - } - TableItem item = new TableItem(ignoreTable, SWT.NONE); - item.setText(pattern); - item.setChecked(true); - } - - private void removeIgnore() { - int[] selection = ignoreTable.getSelectionIndices(); - ignoreTable.remove(selection); - } - private void handleSelection() { - if (ignoreTable.getSelectionCount() > 0) { - removeButton.setEnabled(true); - } else { - removeButton.setEnabled(false); - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ImportProjectSetMainPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ImportProjectSetMainPage.java deleted file mode 100644 index c10b0721d..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ImportProjectSetMainPage.java +++ /dev/null @@ -1,211 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import java.io.File; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.help.WorkbenchHelp; - -public class ImportProjectSetMainPage extends TeamWizardPage { - Text fileText; - String file = ""; //$NON-NLS-1$ - Button browseButton; - Button createWorkingSetButton; - Text workingSetNameField; - - private boolean createWorkingSet = false; - private String workingSetName = ""; //$NON-NLS-1$ - - // constants - private static final int SIZING_TEXT_FIELD_WIDTH = 80; - - public ImportProjectSetMainPage(String pageName, String title, ImageDescriptor titleImage) { - super(pageName, title, titleImage); - } - - /* - * @see IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - Composite composite = createComposite(parent, 1); - initializeDialogUnits(composite); - - // set F1 help - WorkbenchHelp.setHelp(composite, IHelpContextIds.IMPORT_PROJECT_SET_PAGE); - - Composite inner = new Composite(composite, SWT.NULL); - inner.setLayoutData(new GridData(GridData.FILL_BOTH)); - GridLayout layout = new GridLayout(); - layout.numColumns = 3; - layout.marginHeight = 0; - layout.marginWidth = 0; - inner.setLayout(layout); - - createLabel(inner, Policy.bind("ImportProjectSetMainPage.Project_Set_File_Name__2")); //$NON-NLS-1$ - fileText = createTextField(inner); - if (file != null) fileText.setText(file); - fileText.addListener(SWT.Modify, new Listener() { - public void handleEvent(Event event) { - file = fileText.getText(); - updateEnablement(); - } - }); - - browseButton = new Button(inner, SWT.PUSH); - browseButton.setText(Policy.bind("ImportProjectSetMainPage.Browse_3")); //$NON-NLS-1$ - GridData data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, browseButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - browseButton.setLayoutData(data); - browseButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - FileDialog d = new FileDialog(getShell()); - d.setFilterExtensions(new String[] {"*.psf", "*"}); //$NON-NLS-1$ //$NON-NLS-2$ - d.setFilterNames(new String[] {Policy.bind("ImportProjectSetMainPage.Project_Set_Files_2"), Policy.bind("ImportProjectSetMainPage.allFiles")}); //$NON-NLS-1$ //$NON-NLS-2$ - d.setFilterPath(new File(".").getAbsolutePath()); //$NON-NLS-1$ - String f = d.open(); - if (f != null) { - fileText.setText(f); - file = f; - } - } - }); - - createWorkinSetCreationArea(inner, 3); - setControl(composite); - updateEnablement(); - } - - /** - * Method createWorkinSetCreationArea. - * @param inner - */ - private void createWorkinSetCreationArea(Composite composite, int numColumns) { - - createWorkingSetButton = new Button(composite, SWT.CHECK | SWT.RIGHT); - createWorkingSetButton.setText(Policy.bind("ImportProjectSetMainPage.createWorkingSetLabel")); //$NON-NLS-1$ - createWorkingSetButton.setSelection(createWorkingSet); - GridData data = new GridData(); - data.horizontalSpan = numColumns; - createWorkingSetButton.setLayoutData(data); - - final Label label = new Label(composite, SWT.NONE); - label.setText(Policy.bind("ImportProjectSetMainPage.workingSetLabel")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalSpan = 1; - label.setLayoutData(data); - label.setEnabled(createWorkingSet); - - workingSetNameField = new Text(composite, SWT.BORDER); - data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = SIZING_TEXT_FIELD_WIDTH; - data.horizontalSpan = 1; - workingSetNameField.setLayoutData(data); - workingSetNameField.setEnabled(createWorkingSet); - - createWorkingSetButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - createWorkingSet = createWorkingSetButton.getSelection(); - label.setEnabled(createWorkingSet); - workingSetNameField.setEnabled(createWorkingSet); - updateEnablement(); - } - }); - workingSetNameField.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - updateEnablement(); - } - }); - } - - private boolean validateWorkingSetName() { - if (createWorkingSet) { - workingSetName = workingSetNameField.getText(); - if (workingSetName.length() == 0) { - setMessage(Policy.bind("ImportProjectSetMainPage.workingSetNameEmpty"), ERROR); //$NON-NLS-1$ - return false; - } else { - // todo: verify name doesn't already exist - IWorkingSet existingSet = TeamUIPlugin.getPlugin().getWorkbench().getWorkingSetManager().getWorkingSet(workingSetName); - if (existingSet != null) { - setMessage(Policy.bind("ImportProjectSetMainPage.workingSetNameExists"), WARNING); //$NON-NLS-1$ - return true; - } - } - } - setMessage(null); - return true; - } - - private void updateEnablement() { - boolean complete; - setMessage(null); - if (file.length() == 0) { - complete = false; - } else { - // See if the file exists - File f = new File(file); - if (!f.exists()) { - setMessage(Policy.bind("ImportProjectSetMainPage.The_specified_file_does_not_exist_4"), ERROR); //$NON-NLS-1$ - complete = false; - } else if (f.isDirectory()) { - setMessage(Policy.bind("ImportProjectSetMainPage.You_have_specified_a_folder_5"), ERROR); //$NON-NLS-1$ - complete = false; - } else { - complete = validateWorkingSetName(); - } - } - setPageComplete(complete); - } - - public String getFileName() { - return file; - } - public void setFileName(String file) { - if (file != null) { - this.file = file; - } - } - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - fileText.setFocus(); - } - } - - /** - * @return String - */ - public String getWorkingSetName() { - if (!createWorkingSet) return null; - return workingSetName; - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/NatureToPropertyAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/NatureToPropertyAction.java deleted file mode 100644 index c07f3f45c..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/NatureToPropertyAction.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.ui.actions.TeamAction; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -public class NatureToPropertyAction extends TeamAction { - - /** - * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() - */ - protected boolean isEnabled() throws TeamException { - return true; - } - - /** - * @see org.eclipse.ui.IActionDelegate#run(IAction) - */ - public void run(IAction action) { - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - final Shell shell = getShell(); - IProject[] projects = getSelectedProjects(); - List statii = new ArrayList(); - for (int i = 0; i < projects.length; i++) { - IFile file = projects[i].getFile(".project"); //$NON-NLS-1$ - IStatus status = ResourcesPlugin.getWorkspace().validateEdit(new IFile[] {file}, shell); - if (status.getCode() == IStatus.OK) { - RepositoryProvider.convertNatureToProperty(projects[i], true); - } else { - statii.add(status); - RepositoryProvider.convertNatureToProperty(projects[i], false); - } - } - if (!statii.isEmpty()) { - final IStatus[] statusArray = (IStatus[])statii.toArray(new IStatus[statii.size()]); - shell.getDisplay().syncExec(new Runnable() { - public void run() { - if (statusArray.length == 1) { - ErrorDialog.openError(shell, Policy.bind("NatureToPropertyAction.label"), Policy.bind("NatureToPropertyAction.message"), statusArray[0]); //$NON-NLS-1$ //$NON-NLS-2$ - } else { - ErrorDialog.openError(shell, Policy.bind("NatureToPropertyAction.label"), Policy.bind("NatureToPropertyAction.message"), new MultiStatus(TeamUIPlugin.ID, 0, statusArray, Policy.bind("NatureToPropertyAction.multiMessage"), null)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - } - }); - for (int i = 0; i < statusArray.length; i++) { - TeamUIPlugin.log(statusArray[i]); - } - } - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }, Policy.bind("NatureToPropertyAction.label"), PROGRESS_DIALOG); //$NON-NLS-1$ - } -} - diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/Policy.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/Policy.java deleted file mode 100644 index 81f11045d..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/Policy.java +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -import java.text.MessageFormat; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.team.internal.core.InfiniteSubProgressMonitor; -import org.eclipse.team.internal.core.NullSubProgressMonitor; - -/** - * Policy implements NLS convenience methods for the plugin and - * makes progress monitor policy decisions - */ -public class Policy { - // The resource bundle to get strings from - protected static ResourceBundle bundle = null; - - /** - * Creates a NLS catalog for the given locale. - * - * @param bundleName the name of the bundle - */ - public static void localize(String bundleName) { - bundle = ResourceBundle.getBundle(bundleName); - } - - /** - * Lookup the message with the given ID in this catalog and bind its - * substitution locations with the given string. - * - * @param id the id to look up - * @param binding the string to bind to the result - * @return the bound string - */ - public static String bind(String id, String binding) { - return bind(id, new String[] { binding }); - } - - /** - * Lookup the message with the given ID in this catalog and bind its - * substitution locations with the given strings. - * - * @param id the id to look up - * @param binding1 the first string to bind to the result - * @param binding2 the second string to bind to the result - * @return the bound string - */ - public static String bind(String id, String binding1, String binding2) { - return bind(id, new String[] { binding1, binding2 }); - } - - /** - * Gets a string from the resource bundle. We don't want to crash because of a missing String. - * Returns the key if not found. - * - * @param key the id to look up - * @return the string with the given key - */ - public static String bind(String key) { - try { - return bundle.getString(key); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ - } - } - - /** - * Gets a string from the resource bundle and binds it with the given arguments. If the key is - * not found, return the key. - * - * @param key the id to look up - * @param args the strings to bind to the result - * @return the bound string - */ - public static String bind(String key, Object[] args) { - try { - return MessageFormat.format(bind(key), args); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ - } - } - - /** - * Checks if the progress monitor is canceled. - * - * @param monitor the onitor to check for cancellation - * @throws OperationCanceledException if the monitor is canceled - */ - public static void checkCanceled(IProgressMonitor monitor) { - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } - } - /** - * Returns a monitor for the given monitor - * - * @param monitor the monitor to return a monitor for - * @return a monitor for the given monitor - */ - public static IProgressMonitor monitorFor(IProgressMonitor monitor) { - if (monitor == null) { - return new NullProgressMonitor(); - } - return monitor; - } - - public static IProgressMonitor subMonitorFor(IProgressMonitor monitor, int ticks) { - if (monitor == null) - return new NullProgressMonitor(); - if (monitor instanceof NullProgressMonitor) - return monitor; - return new SubProgressMonitor(monitor, ticks); - } - - public static IProgressMonitor subInfiniteMonitorFor(IProgressMonitor monitor, int ticks) { - if (monitor == null) - return new NullProgressMonitor(); - if (monitor instanceof NullProgressMonitor) - return monitor; - return new InfiniteSubProgressMonitor(monitor, ticks); - } - - public static IProgressMonitor subNullMonitorFor(IProgressMonitor monitor) { - if (monitor == null) - return new NullProgressMonitor(); - if (monitor instanceof NullProgressMonitor) - return monitor; - return new NullSubProgressMonitor(monitor); - } - - public static String toTruncatedPath(IPath path, int split) { - // Search backwards until split separators are found - int count = 0; - String stringPath = path.toString(); - int index = stringPath.length(); - while (count++ < split && index != -1) { - index = stringPath.lastIndexOf(IPath.SEPARATOR, index - 1); - } - if (index == -1) { - return stringPath; - } else { - return "..." + stringPath.substring(index); //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetContentHandler.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetContentHandler.java deleted file mode 100644 index f3f05277f..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetContentHandler.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -public class ProjectSetContentHandler extends DefaultHandler { - boolean inPsf = false; - boolean inProvider = false; - boolean inProject = false; - Map map; - String id; - List references; - boolean isVersionOne = false; - - /** - * @see ContentHandler#startElement(String, String, String, Attributes) - */ - public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { - if (localName.equals("psf")) { //$NON-NLS-1$ - map = new HashMap(); - inPsf = true; - String version = atts.getValue("version"); //$NON-NLS-1$ - isVersionOne = version.equals("1.0"); //$NON-NLS-1$ - return; - } - if (isVersionOne) return; - if (localName.equals("provider")) { //$NON-NLS-1$ - if (!inPsf) throw new SAXException(Policy.bind("ProjectSetContentHandler.Element_provider_must_be_contained_in_element_psf_4")); //$NON-NLS-1$ - inProvider = true; - id = atts.getValue("id"); //$NON-NLS-1$ - references = new ArrayList(); - return; - } - if (localName.equals("project")) { //$NON-NLS-1$ - if (!inProvider) throw new SAXException(Policy.bind("ProjectSetContentHandler.Element_project_must_be_contained_in_element_provider_7")); //$NON-NLS-1$ - inProject = true; - String reference = atts.getValue("reference"); //$NON-NLS-1$ - references.add(reference); - return; - } - } - - /** - * @see ContentHandler#endElement(String, String, String) - */ - public void endElement(String namespaceURI, String localName, String qName) throws SAXException { - if (localName.equals("psf")) { //$NON-NLS-1$ - inPsf = false; - return; - } - if (isVersionOne) return; - if (localName.equals("provider")) { //$NON-NLS-1$ - map.put(id, references); - references = null; - inProvider = false; - return; - } - if (localName.equals("project")) { //$NON-NLS-1$ - inProject = false; - return; - } - } - - public Map getReferences() { - return map; - } - - public boolean isVersionOne() { - return isVersionOne; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetExportWizard.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetExportWizard.java deleted file mode 100644 index 639213d6e..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetExportWizard.java +++ /dev/null @@ -1,200 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.IProjectSetSerializer; -import org.eclipse.team.core.ProjectSetCapability; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.RepositoryProviderType; -import org.eclipse.team.core.Team; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IExportWizard; -import org.eclipse.ui.IWorkbench; - -public class ProjectSetExportWizard extends Wizard implements IExportWizard { - ExportProjectSetMainPage mainPage; - IStructuredSelection selection; - - public ProjectSetExportWizard() { - setNeedsProgressMonitor(true); - setWindowTitle(Policy.bind("ProjectSetExportWizard.Project_Set_1")); //$NON-NLS-1$ - } - - public void addPages() { - mainPage = new ExportProjectSetMainPage("projectSetMainPage", Policy.bind("ProjectSetExportWizard.Export_a_Project_Set_3"), TeamImages.getImageDescriptor(UIConstants.IMG_PROJECTSET_EXPORT_BANNER)); //$NON-NLS-1$ //$NON-NLS-2$ - IProject[] projects = (IProject[])selection.toList().toArray(new IProject[0]); - mainPage.setSelectedProjects(projects); - mainPage.setFileName(ProjectSetImportWizard.lastFile); - addPage(mainPage); - } - public boolean performFinish() { - final boolean[] result = new boolean[] {false}; - try { - getContainer().run(false, false, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException { - String filename = mainPage.getFileName(); - Path path = new Path(filename); - if (path.getFileExtension() == null) { - filename = filename + ".psf"; //$NON-NLS-1$ - } - ProjectSetImportWizard.lastFile = filename; - File file = new File(filename); - File parentFile = file.getParentFile(); - if (parentFile != null && !parentFile.exists()) { - boolean r = MessageDialog.openQuestion(getShell(), Policy.bind("ProjectSetExportWizard.Question_4"), Policy.bind("ProjectSetExportWizard.Target_directory_does_not_exist._Would_you_like_to_create_it__5")); //$NON-NLS-1$ //$NON-NLS-2$ - if (!r) { - result[0] = false; - return; - } - r = parentFile.mkdirs(); - if (!r) { - MessageDialog.openError(getShell(), Policy.bind("ProjectSetExportWizard.Export_Problems_6"), Policy.bind("ProjectSetExportWizard.An_error_occurred_creating_the_target_directory_7")); //$NON-NLS-1$ //$NON-NLS-2$ - result[0] = false; - return; - } - } - if (file.exists() && file.isFile()) { - boolean r = MessageDialog.openQuestion(getShell(), Policy.bind("ProjectSetExportWizard.Question_8"), Policy.bind("ProjectSetExportWizard.Target_already_exists._Would_you_like_to_overwrite_it__9")); //$NON-NLS-1$ //$NON-NLS-2$ - if (!r) { - result[0] = false; - return; - } - } - - // Hash the projects by provider - IProject[] projects = mainPage.getSelectedProjects(); - Map map = new HashMap(); - for (int i = 0; i < projects.length; i++) { - IProject project = projects[i]; - RepositoryProvider provider = RepositoryProvider.getProvider(project); - if (provider != null) { - String id = provider.getID(); - List list = (List)map.get(id); - if (list == null) { - list = new ArrayList(); - map.put(id, list); - } - list.add(project); - } - } - - Shell shell = getShell(); - - BufferedWriter writer = null; - try { - writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); //$NON-NLS-1$ - - writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); //$NON-NLS-1$ - writer.newLine(); - writer.write("<psf version=\"2.0\">"); //$NON-NLS-1$ - writer.newLine(); - - // For each provider id, do the writing - Iterator it = map.keySet().iterator(); - monitor.beginTask(null, 1000 * map.keySet().size()); - while (it.hasNext()) { - String id = (String)it.next(); - writer.write("\t<provider id=\""); //$NON-NLS-1$ - writer.write(id); - writer.write("\">"); //$NON-NLS-1$ - writer.newLine(); - List list = (List)map.get(id); - IProject[] projectArray = (IProject[])list.toArray(new IProject[list.size()]); - IProjectSetSerializer serializer = Team.getProjectSetSerializer(id); - if (serializer != null) { - String[] references = serializer.asReference(projectArray, shell, new SubProgressMonitor(monitor, 990)); - for (int i = 0; i < references.length; i++) { - writer.write("\t\t<project reference=\""); //$NON-NLS-1$ - writer.write(references[i]); - writer.write("\"/>"); //$NON-NLS-1$ - writer.newLine(); - } - } - writer.write("\t</provider>"); //$NON-NLS-1$ - writer.newLine(); - } - writer.write("</psf>"); //$NON-NLS-1$ - writer.newLine(); - result[0] = true; - } catch (IOException e) { - throw new InvocationTargetException(e); - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - if (writer != null) { - try { - writer.close(); - } catch (IOException e) { - throw new InvocationTargetException(e); - } - } - } - - // notify provider types of the project set write - for (Iterator iter = map.keySet().iterator();iter.hasNext();) { - String id = (String) iter.next(); - RepositoryProviderType type = RepositoryProviderType.getProviderType(id); - if (type != null) { - ProjectSetCapability capability = type.getProjectSetCapability(); - if (capability != null) { - capability.projectSetCreated(file, shell, new SubProgressMonitor(monitor, 10)); - } - } - } - - monitor.done(); - } - }); - } catch (InterruptedException e) { - return true; - } catch (InvocationTargetException e) { - Throwable target = e.getTargetException(); - if (target instanceof TeamException) { - ErrorDialog.openError(getShell(), null, null, ((TeamException)target).getStatus()); - return false; - } - if (target instanceof RuntimeException) { - throw (RuntimeException)target; - } - if (target instanceof Error) { - throw (Error)target; - } - } - return result[0]; - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - this.selection = selection; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetImportWizard.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetImportWizard.java deleted file mode 100644 index 11c83b197..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetImportWizard.java +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.apache.xerces.parsers.SAXParser; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.team.core.IProjectSetSerializer; -import org.eclipse.team.core.Team; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IImportWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.IWorkingSetManager; -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -public class ProjectSetImportWizard extends Wizard implements IImportWizard { - ImportProjectSetMainPage mainPage; - public static String lastFile; - - public ProjectSetImportWizard() { - setNeedsProgressMonitor(true); - setWindowTitle(Policy.bind("ProjectSetImportWizard.Project_Set_1")); //$NON-NLS-1$ - } - - public void addPages() { - mainPage = new ImportProjectSetMainPage("projectSetMainPage", Policy.bind("ProjectSetImportWizard.Import_a_Project_Set_3"), TeamImages.getImageDescriptor(UIConstants.IMG_PROJECTSET_IMPORT_BANNER)); //$NON-NLS-1$ //$NON-NLS-2$ - mainPage.setFileName(lastFile); - addPage(mainPage); - } - public boolean performFinish() { - - // check if the desired working set exists - final String workingSetName = mainPage.getWorkingSetName(); - if (workingSetName != null) { - IWorkingSet existingSet = TeamUIPlugin.getPlugin().getWorkbench().getWorkingSetManager().getWorkingSet(workingSetName); - if (existingSet != null && - !MessageDialog.openConfirm(getShell(), Policy.bind("ProjectSetImportWizard.workingSetExistsTitle"), Policy.bind("ProjectSetImportWizard.workingSetExistsMessage", workingSetName))) //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } - - final boolean[] result = new boolean[] {false}; - try { - getContainer().run(true, true, new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InvocationTargetException { - InputStreamReader reader = null; - try { - String filename = mainPage.getFileName(); - lastFile = filename; - reader = new InputStreamReader(new FileInputStream(filename), "UTF-8"); //$NON-NLS-1$ - - SAXParser parser = new SAXParser(); - ProjectSetContentHandler handler = new ProjectSetContentHandler(); - parser.setContentHandler(handler); - InputSource source = new InputSource(reader); - parser.parse(source); - - Map map = handler.getReferences(); - List newProjects = new ArrayList(); - if (map.size() == 0 && handler.isVersionOne) { - IProjectSetSerializer serializer = Team.getProjectSetSerializer("versionOneSerializer"); //$NON-NLS-1$ - if (serializer != null) { - IProject[] projects = serializer.addToWorkspace(new String[0], filename, getShell(), monitor); - if (projects != null) - newProjects.addAll(Arrays.asList(projects)); - } - } else { - Iterator it = map.keySet().iterator(); - while (it.hasNext()) { - String id = (String)it.next(); - List references = (List)map.get(id); - IProjectSetSerializer serializer = Team.getProjectSetSerializer(id); - if (serializer != null) { - IProject[] projects = serializer.addToWorkspace((String[])references.toArray(new String[references.size()]), filename, getShell(), monitor); - if (projects != null) - newProjects.addAll(Arrays.asList(projects)); - } - } - } - if (workingSetName != null) - createWorkingSet(workingSetName, (IProject[]) newProjects.toArray(new IProject[newProjects.size()])); - result[0] = true; - } catch (IOException e) { - throw new InvocationTargetException(e); - } catch (SAXException e) { - throw new InvocationTargetException(e); - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - throw new InvocationTargetException(e); - } - } - } - } - }); - } catch (InterruptedException e) { - return true; - } catch (InvocationTargetException e) { - Throwable target = e.getTargetException(); - if (target instanceof TeamException) { - ErrorDialog.openError(getShell(), null, null, ((TeamException)target).getStatus()); - return false; - } - if (target instanceof RuntimeException) { - throw (RuntimeException)target; - } - if (target instanceof Error) { - throw (Error)target; - } - } - return result[0]; - } - - private void createWorkingSet(String workingSetName, IProject[] projects) { - IWorkingSetManager manager = TeamUIPlugin.getPlugin().getWorkbench().getWorkingSetManager(); - IWorkingSet oldSet = manager.getWorkingSet(workingSetName); - if (oldSet == null) { - IWorkingSet newSet = manager.createWorkingSet(workingSetName, projects); - manager.addWorkingSet(newSet); - }else { - oldSet.setElements(projects); - } - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/PromptingDialog.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/PromptingDialog.java deleted file mode 100644 index fd33ae38b..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/PromptingDialog.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IResource; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.widgets.Shell; - -/** - * A confirmation dialog helper that will either show a 'yes/no/yes to all/cancel' - * dialog to confirm an action performed on several resources or if only one - * resource is specified 'ok/cancel' will be shown. - */ -public class PromptingDialog { - private IResource[] resources; - private Shell shell; - private String[] buttons; - private boolean confirmOverwrite = true; - private IPromptCondition condition; - private String title; - private boolean hasMultipleResources; - - /** - * Prompt for the given resources using the specific condition. The prompt dialog will - * have the title specified. - */ - public PromptingDialog(Shell shell, IResource[] resources, IPromptCondition condition, String title) { - this.condition = condition; - this.resources = resources; - this.title = title; - this.shell = shell; - this.hasMultipleResources = resources.length > 1; - if (hasMultipleResources) { - buttons = new String[] { - IDialogConstants.YES_LABEL, - IDialogConstants.YES_TO_ALL_LABEL, - IDialogConstants.NO_LABEL, - IDialogConstants.CANCEL_LABEL}; - } else { - buttons = new String[] {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL}; - } - } - - /** - * Call to calculate and show prompt. If no resources satisfy the prompt condition - * a dialog won't be shown. The resources for which the user confirmed the action - * are returned. - */ - public IResource[] promptForMultiple() throws InterruptedException { - List targetResources = new ArrayList(); - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - if (condition.needsPrompt(resource) && confirmOverwrite) { - if (confirmOverwrite(condition.promptMessage(resource))) { - targetResources.add(resource); - } - } else { - targetResources.add(resource); - } - } - return (IResource[]) targetResources.toArray(new IResource[targetResources.size()]); - } - - /** - * Opens the confirmation dialog based on the prompt condition settings. - */ - private boolean confirmOverwrite(String msg) throws InterruptedException { - if (!confirmOverwrite) { - return true; - } - final MessageDialog dialog = - new MessageDialog(shell, title, null, msg, MessageDialog.QUESTION, buttons, 0); - - // run in syncExec because callback is from an operation, - // which is probably not running in the UI thread. - shell.getDisplay().syncExec( - new Runnable() { - public void run() { - dialog.open(); - } - }); - if (hasMultipleResources) { - switch (dialog.getReturnCode()) { - case 0://Yes - return true; - case 1://Yes to all - confirmOverwrite = false; - return true; - case 2://No - return false; - case 3://Cancel - default: - throw new InterruptedException(); - } - } else { - return dialog.getReturnCode() == 0; - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamPreferencePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamPreferencePage.java deleted file mode 100644 index 0cd120529..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamPreferencePage.java +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.help.WorkbenchHelp; - -public class TeamPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - Button syncModeButton; - - public TeamPreferencePage() { - setDescription(Policy.bind("TeamPreferencePage.General_settings_for_Team_support_1")); //$NON-NLS-1$ - } - - /** - * @see PreferencePage#createContents(Composite) - */ - protected Control createContents(Composite parent) { - Composite composite = new Composite(parent, SWT.NULL); - - // set F1 help - WorkbenchHelp.setHelp(composite, IHelpContextIds.TEAM_PREFERENCE_PAGE); - - // GridLayout - GridLayout layout = new GridLayout(); - layout.numColumns = 1; - layout.marginWidth = 0; - layout.marginHeight = 0; - composite.setLayout(layout); - - // GridData - GridData data = new GridData(); - data.verticalAlignment = GridData.FILL; - data.horizontalAlignment = GridData.FILL; - composite.setLayoutData(data); - - // Create the checkbox for sync mode - syncModeButton = createCheckBox(composite, Policy.bind("TeamPreferencePage.&Use_Incoming/Outgoing_mode_when_synchronizing_2")); //$NON-NLS-1$ - - initializeValues(); - Dialog.applyDialogFont(parent); - return composite; - } - /** - * Creates an new checkbox instance and sets the default - * layout data. - * - * @param group the composite in which to create the checkbox - * @param label the string to set into the checkbox - * @return the new checkbox - */ - private Button createCheckBox(Composite group, String label) { - Button button = new Button(group, SWT.CHECK | SWT.LEFT); - button.setText(label); - GridData data = new GridData(); - data.horizontalSpan = 1; - button.setLayoutData(data); - return button; - } - /** - * Returns preference store that belongs to the our plugin. - * This is important because we want to store - * our preferences separately from the desktop. - * - * @return the preference store for this plugin - */ - protected IPreferenceStore doGetPreferenceStore() { - return TeamUIPlugin.getPlugin().getPreferenceStore(); - } - /** - * Defaults was clicked. Restore the CVS preferences to - * their default values - */ - protected void performDefaults() { - super.performDefaults(); - IPreferenceStore store = getPreferenceStore(); - syncModeButton.setSelection(store.getDefaultBoolean(UIConstants.PREF_ALWAYS_IN_INCOMING_OUTGOING)); - } - /** - * OK was clicked. Store the CVS preferences. - * - * @return whether it is okay to close the preference page - */ - public boolean performOk() { - IPreferenceStore store = getPreferenceStore(); - store.setValue(UIConstants.PREF_ALWAYS_IN_INCOMING_OUTGOING, syncModeButton.getSelection()); - TeamUIPlugin.getPlugin().savePluginPreferences(); - return true; - } - /** - * Initializes states of the controls from the preference store. - */ - private void initializeValues() { - IPreferenceStore store = getPreferenceStore(); - syncModeButton.setSelection(store.getBoolean(UIConstants.PREF_ALWAYS_IN_INCOMING_OUTGOING)); - } - /** - * @see IWorkbenchPreferencePage#init(IWorkbench) - */ - public void init(IWorkbench workbench) { - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java deleted file mode 100644 index 51e5c4280..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java +++ /dev/null @@ -1,257 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IPluginDescriptor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.plugin.AbstractUIPlugin; - -/** - * TeamUIPlugin is the plugin for generic, non-provider specific, - * team UI functionality in the workbench. - */ -public class TeamUIPlugin extends AbstractUIPlugin { - - private static TeamUIPlugin instance; - public static final String ID = "org.eclipse.team.ui"; //$NON-NLS-1$ - - private static List propertyChangeListeners = new ArrayList(5); - - /** - * Creates a new TeamUIPlugin. - * - * @param descriptor the plugin descriptor - */ - public TeamUIPlugin(IPluginDescriptor descriptor) { - super(descriptor); - instance = this; - } - /** - * Creates an extension. If the extension plugin has not - * been loaded a busy cursor will be activated during the duration of - * the load. - * - * @param element the config element defining the extension - * @param classAttribute the name of the attribute carrying the class - * @return the extension object - */ - public static Object createExtension(final IConfigurationElement element, final String classAttribute) throws CoreException { - // If plugin has been loaded create extension. - // Otherwise, show busy cursor then create extension. - IPluginDescriptor plugin = element.getDeclaringExtension().getDeclaringPluginDescriptor(); - if (plugin.isPluginActivated()) { - return element.createExecutableExtension(classAttribute); - } else { - final Object [] ret = new Object[1]; - final CoreException [] exc = new CoreException[1]; - BusyIndicator.showWhile(null, new Runnable() { - public void run() { - try { - ret[0] = element.createExecutableExtension(classAttribute); - } catch (CoreException e) { - exc[0] = e; - } - } - }); - if (exc[0] != null) - throw exc[0]; - else - return ret[0]; - } - } - - /** - * Convenience method to get the currently active workbench page. Note that - * the active page may not be the one that the usr perceives as active in - * some situations so this method of obtaining the activae page should only - * be used if no other method is available. - * - * @return the active workbench page - */ - public static IWorkbenchPage getActivePage() { - IWorkbenchWindow window = getPlugin().getWorkbench().getActiveWorkbenchWindow(); - if (window == null) return null; - return window.getActivePage(); - } - - /** - * Return the default instance of the receiver. This represents the runtime plugin. - * - * @return the singleton plugin instance - */ - public static TeamUIPlugin getPlugin() { - return instance; - } - /** - * Initializes the preferences for this plugin if necessary. - */ - protected void initializePreferences() { - IPreferenceStore store = getPreferenceStore(); - store.setDefault(UIConstants.PREF_ALWAYS_IN_INCOMING_OUTGOING, false); - } - - /** - * Convenience method for logging statuses to the plugin log - * - * @param status the status to log - */ - public static void log(IStatus status) { - getPlugin().getLog().log(status); - } - - public static void runWithProgress(Shell parent, boolean cancelable, - final IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { - boolean createdShell = false; - try { - if (parent == null || parent.isDisposed()) { - Display display = Display.getCurrent(); - if (display == null) { - // cannot provide progress (not in UI thread) - runnable.run(new NullProgressMonitor()); - return; - } - // get the active shell or a suitable top-level shell - parent = display.getActiveShell(); - if (parent == null) { - parent = new Shell(display); - createdShell = true; - } - } - // pop up progress dialog after a short delay - final Exception[] holder = new Exception[1]; - BusyIndicator.showWhile(parent.getDisplay(), new Runnable() { - public void run() { - try { - runnable.run(new NullProgressMonitor()); - } catch (InvocationTargetException e) { - holder[0] = e; - } catch (InterruptedException e) { - holder[0] = e; - } - } - }); - if (holder[0] != null) { - if (holder[0] instanceof InvocationTargetException) { - throw (InvocationTargetException) holder[0]; - } else { - throw (InterruptedException) holder[0]; - } - } - //new TimeoutProgressMonitorDialog(parent, TIMEOUT).run(true /*fork*/, cancelable, runnable); - } finally { - if (createdShell) parent.dispose(); - } - } - - /** - * Creates a progress monitor and runs the specified runnable. - * - * @param parent the parent Shell for the dialog - * @param cancelable if true, the dialog will support cancelation - * @param runnable the runnable - * - * @exception InvocationTargetException when an exception is thrown from the runnable - * @exception InterruptedException when the progress monitor is cancelled - */ - public static void runWithProgressDialog(Shell parent, boolean cancelable, - final IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { - - new ProgressMonitorDialog(parent).run(cancelable, cancelable, runnable); - } - - /** - * @see Plugin#startup() - */ - public void startup() throws CoreException { - Policy.localize("org.eclipse.team.internal.ui.messages"); //$NON-NLS-1$ - initializePreferences(); - } - - /* - * This method is only for use by the Target Management feature (see bug - * 16509). - * - * @param t - */ - public static void handle(Throwable t) { - IStatus error = null; - if (t instanceof InvocationTargetException) { - t = ((InvocationTargetException)t).getTargetException(); - } - if (t instanceof CoreException) { - error = ((CoreException)t).getStatus(); - } else if (t instanceof TeamException) { - error = ((TeamException)t).getStatus(); - } else { - error = new Status(IStatus.ERROR, TeamUIPlugin.ID, 1, Policy.bind("simpleInternal"), t); //$NON-NLS-1$ - } - - Shell shell = new Shell(Display.getDefault()); - - if (error.getSeverity() == IStatus.INFO) { - MessageDialog.openInformation(shell, Policy.bind("information"), error.getMessage()); //$NON-NLS-1$ - } else { - ErrorDialog.openError(shell, Policy.bind("exception"), null, error); //$NON-NLS-1$ - } - shell.dispose(); - // Let's log non-team exceptions - if (!(t instanceof TeamException)) { - TeamUIPlugin.log(error); - } - } - - /** - * Register for changes made to Team properties. - */ - public static void addPropertyChangeListener(IPropertyChangeListener listener) { - propertyChangeListeners.add(listener); - } - - /** - * Deregister as a Team property changes. - */ - public static void removePropertyChangeListener(IPropertyChangeListener listener) { - propertyChangeListeners.remove(listener); - } - - /** - * Broadcast a Team property change. - */ - public static void broadcastPropertyChange(PropertyChangeEvent event) { - for (Iterator it = propertyChangeListeners.iterator(); it.hasNext();) { - IPropertyChangeListener listener = (IPropertyChangeListener)it.next(); - listener.propertyChange(event); - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamWizardPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamWizardPage.java deleted file mode 100644 index a49356e60..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamWizardPage.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -public abstract class TeamWizardPage extends WizardPage { - /** - * CVSWizardPage constructor comment. - * @param pageName the name of the page - */ - public TeamWizardPage(String pageName) { - super(pageName); - } - /** - * CVSWizardPage constructor comment. - * @param pageName the name of the page - * @param title the title of the page - * @param titleImage the image for the page - */ - public TeamWizardPage(String pageName, String title, ImageDescriptor titleImage) { - super(pageName, title, titleImage); - } - /** - * Creates composite control and sets the default layout data. - * - * @param parent the parent of the new composite - * @param numColumns the number of columns for the new composite - * @return the newly-created coposite - */ - protected Composite createComposite(Composite parent, int numColumns) { - Composite composite = new Composite(parent, SWT.NULL); - - // GridLayout - GridLayout layout = new GridLayout(); - layout.numColumns = numColumns; - composite.setLayout(layout); - - // GridData - GridData data = new GridData(); - data.verticalAlignment = GridData.FILL; - data.horizontalAlignment = GridData.FILL; - composite.setLayoutData(data); - return composite; - } - /** - * Utility method that creates a label instance - * and sets the default layout data. - * - * @param parent the parent for the new label - * @param text the text for the new label - * @return the new label - */ - protected Label createLabel(Composite parent, String text) { - return createIndentedLabel(parent, text, 0); - } - /** - * Utility method that creates a label instance indented by the specified - * number of pixels and sets the default layout data. - * - * @param parent the parent for the new label - * @param text the text for the new label - * @param indent the indent in pixels, or 0 for none - * @return the new label - */ - protected Label createIndentedLabel(Composite parent, String text, int indent) { - Label label = new Label(parent, SWT.LEFT); - label.setText(text); - GridData data = new GridData(); - data.horizontalSpan = 1; - data.horizontalAlignment = GridData.FILL; - data.horizontalIndent = indent; - label.setLayoutData(data); - return label; - } - /** - * Create a text field specific for this application - * - * @param parent the parent of the new text field - * @return the new text field - */ - protected Text createTextField(Composite parent) { - Text text = new Text(parent, SWT.SINGLE | SWT.BORDER); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.verticalAlignment = GridData.CENTER; - data.grabExcessVerticalSpace = false; - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - text.setLayoutData(data); - return text; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TextPreferencePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TextPreferencePage.java deleted file mode 100644 index de6924434..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TextPreferencePage.java +++ /dev/null @@ -1,396 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.jface.viewers.CellEditor; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.ComboBoxCellEditor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.ICellModifier; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.TableEditor; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.team.core.IFileTypeInfo; -import org.eclipse.team.core.Team; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.help.WorkbenchHelp; -/** - * This preference page displays all patterns which determine whether a resource - * is to be treated as a text file or not. The page allows the user to add or - * remove entries from this table, and change their values from Text to Binary. - */ -public class TextPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - // Some string constants for display purposes - private static final String TEXT = Policy.bind("TextPreferencePage.text"); //$NON-NLS-1$ - private static final String BINARY = Policy.bind("TextPreferencePage.binary"); //$NON-NLS-1$ - - // The name of the parameter in the file registry - private static final String TYPE = "type"; //$NON-NLS-1$ - - // The input for the table viewer - private List input; - - // Widgets - private TableViewer viewer; - private Button removeButton; - private Button changeButton; - - /** - * TableEntry is a pair of strings representing an entry in the table - */ - class TableEntry { - String ext; - String value; - public TableEntry(String ext, String value) { - this.ext = ext; - this.value = value; - } - public String getExtension() { - return ext; - } - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } - } - /** - * TableLabelProvider provides labels for TableEntrys. - */ - class TableLabelProvider extends LabelProvider implements ITableLabelProvider { - public String getColumnText(Object element, int columnIndex) { - TableEntry entry = (TableEntry)element; - switch (columnIndex) { - case 0: - return entry.getExtension(); - case 1: - return entry.getValue(); - default: - return null; - } - } - public Image getColumnImage(Object element, int columnIndex) { - return null; - } - }; - - /* - * Method declared on IWorkbenchPreferencePage - */ - public void init(IWorkbench workbench) { - } - /* - * @see PreferencePage#createControl - */ - protected Control createContents(Composite ancestor) { - noDefaultAndApplyButton(); - - Composite parent = new Composite(ancestor, SWT.NULL); - GridLayout layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - layout.numColumns = 2; - parent.setLayout(layout); - - // set F1 help - WorkbenchHelp.setHelp(parent, IHelpContextIds.FILE_TYPE_PREFERENCE_PAGE); - - Label l1 = new Label(parent, SWT.NULL); - l1.setText(Policy.bind("TextPreferencePage.description")); //$NON-NLS-1$ - GridData data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); - data.horizontalSpan = 2; - l1.setLayoutData(data); - - viewer = new TableViewer(parent, SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); - Table table = viewer.getTable(); - new TableEditor(table); - table.setHeaderVisible(true); - table.setLinesVisible(true); - GridData gd = new GridData(GridData.FILL_BOTH); - gd.widthHint = convertWidthInCharsToPixels(30); - /* - * The hardcoded hint does not look elegant, but in reality - * it does not make anything bound to this 100-pixel value, - * because in any case the tree on the left is taller and - * that's what really determines the height. - */ - gd.heightHint = 100; - table.setLayoutData(gd); - table.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - handleSelection(); - } - }); - // Create the table columns - new TableColumn(table, SWT.NULL); - new TableColumn(table, SWT.NULL); - TableColumn[] columns = table.getColumns(); - columns[0].setText(Policy.bind("TextPreferencePage.extension")); //$NON-NLS-1$ - columns[1].setText(Policy.bind("TextPreferencePage.contents")); //$NON-NLS-1$ - - CellEditor editor = new ComboBoxCellEditor(table, new String[] {TEXT, BINARY}); - viewer.setCellEditors(new CellEditor[] {null, editor}); - viewer.setColumnProperties(new String[] {"extension", "contents"}); //$NON-NLS-1$ //$NON-NLS-2$ - viewer.setCellModifier(new ICellModifier() { - public Object getValue(Object element, String property) { - String value = ((TableEntry)element).getValue(); - if (value.equals(TEXT)) { - return new Integer(0); - } else { - return new Integer(1); - } - } - public boolean canModify(Object element, String property) { - return true; - } - public void modify(Object element, String property, Object value) { - IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); - TableEntry entry = (TableEntry)selection.getFirstElement(); - if (((Integer)value).intValue() == 0) { - entry.setValue(TEXT); - } else { - entry.setValue(BINARY); - } - viewer.refresh(entry); - } - }); - viewer.setLabelProvider(new TableLabelProvider()); - viewer.setContentProvider(new IStructuredContentProvider() { - public void dispose() { - } - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - public Object[] getElements(Object inputElement) { - if (inputElement == null) return null; - return ((List)inputElement).toArray(); - } - }); - viewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - ISelection selection = event.getSelection(); - if (selection == null || !(selection instanceof IStructuredSelection)) { - return; - } - viewer.editElement(((IStructuredSelection)selection).getFirstElement(), 1); - } - }); - viewer.setSorter(new ViewerSorter() { - public int compare(Viewer viewer, Object e1, Object e2) { - TableEntry entry1 = (TableEntry)e1; - TableEntry entry2 = (TableEntry)e2; - return super.compare(viewer, entry1.getExtension(), entry2.getExtension()); - } - }); - TableLayout tl = new TableLayout(); - tl.addColumnData(new ColumnWeightData(50)); - tl.addColumnData(new ColumnWeightData(50)); - table.setLayout(tl); - - Composite buttons = new Composite(parent, SWT.NULL); - buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); - layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - buttons.setLayout(layout); - - Button addButton = new Button(buttons, SWT.PUSH); - addButton.setText(Policy.bind("TextPreferencePage.add")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, addButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - addButton.setLayoutData(data); - addButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - addPattern(); - } - }); - - removeButton= new Button(buttons, SWT.PUSH); - removeButton.setText(Policy.bind("TextPreferencePage.remove")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, removeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - removeButton.setLayoutData(data); - removeButton.setEnabled(false); - removeButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - removePattern(); - } - }); - - changeButton = new Button(buttons, SWT.PUSH); - changeButton.setText(Policy.bind("TextPreferencePage.change")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, changeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - changeButton.setLayoutData(data); - changeButton.setEnabled(false); - changeButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - changePattern(); - } - }); - - fillTable(); - Dialog.applyDialogFont(parent); - return parent; - } - /** - * Do anything necessary because the OK button has been pressed. - * - * @return whether it is okay to close the preference page - */ - public boolean performOk() { - int size = input.size(); - String[] extensions = new String[size]; - int[] types = new int[size]; - int i = 0; - - Iterator it = input.iterator(); - while (it.hasNext()) { - TableEntry entry = (TableEntry)it.next(); - String value = entry.getValue(); - if (value.equals(TEXT)) { - types[i] = Team.TEXT; - } else { - types[i] = Team.BINARY; - } - extensions[i] = entry.getExtension(); - i++; - } - Team.setAllTypes(extensions, types); - return true; - } - /** - * Fill the table with the values from the file type registry - */ - private void fillTable() { - this.input = new ArrayList(); - IFileTypeInfo[] infos = Team.getAllTypes(); - for (int i = 0; i < infos.length; i++) { - IFileTypeInfo info = infos[i]; - int type = info.getType(); - switch (type) { - case Team.TEXT: - input.add(new TableEntry(info.getExtension(), TEXT)); - break; - case Team.BINARY: - input.add(new TableEntry(info.getExtension(), BINARY)); - break; - } - } - viewer.setInput(input); - } - /** - * Add a new item to the table with the default type of Text. - */ - private void addPattern() { - InputDialog dialog = new InputDialog(getShell(), Policy.bind("TextPreferencePage.enterExtensionShort"), Policy.bind("TextPreferencePage.enterExtensionLong"), null, null); //$NON-NLS-1$ //$NON-NLS-2$ - dialog.open(); - if (dialog.getReturnCode() != InputDialog.OK) return; - String pattern = dialog.getValue(); - if (pattern.equals("")) return; //$NON-NLS-1$ - // Check if the item already exists - Iterator it = input.iterator(); - while (it.hasNext()) { - TableEntry entry = (TableEntry)it.next(); - if (entry.getExtension().equals(pattern)) { - MessageDialog.openWarning(getShell(), Policy.bind("TextPreferencePage.extensionExistsShort"), Policy.bind("TextPreferencePage.extensionExistsLong")); //$NON-NLS-1$ //$NON-NLS-2$ - return; - } - } - input.add(new TableEntry(pattern, TEXT)); - viewer.refresh(); - } - /** - * Remove the selected items from the table - */ - private void removePattern() { - ISelection selection = viewer.getSelection(); - if (selection == null || !(selection instanceof IStructuredSelection)) { - return; - } - IStructuredSelection ss = (IStructuredSelection)selection; - Iterator it = ss.iterator(); - while (it.hasNext()) { - TableEntry entry = (TableEntry)it.next(); - input.remove(entry); - } - viewer.refresh(); - } - /** - * Toggle the selected items' content types - */ - private void changePattern() { - ISelection selection = viewer.getSelection(); - if (selection == null || !(selection instanceof IStructuredSelection)) { - return; - } - IStructuredSelection ss = (IStructuredSelection)selection; - Iterator it = ss.iterator(); - while (it.hasNext()) { - TableEntry entry = (TableEntry)it.next(); - String string = entry.getValue(); - if (string.equals(TEXT)) { - entry.setValue(BINARY); - } else { - entry.setValue(TEXT); - } - viewer.refresh(entry); - } - } - /** - * The table viewer selection has changed. Update the remove and change button enablement. - */ - private void handleSelection() { - boolean empty = viewer.getSelection().isEmpty(); - removeButton.setEnabled(!empty); - changeButton.setEnabled(!empty); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/UIConstants.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/UIConstants.java deleted file mode 100644 index 7b7f3f21a..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/UIConstants.java +++ /dev/null @@ -1,79 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui; - - -/** - * Central location for constants used by the Team user interface. - */ -public interface UIConstants { - // plugin id - public final String PLUGIN_ID = "org.eclipse.team.ui"; //$NON-NLS-1$ - - // extension points - public final String PT_CONFIGURATION ="configurationWizards"; //$NON-NLS-1$ - public final String PT_TARGETCONFIG ="targetConfigWizards"; //$NON-NLS-1$ - public final String PT_DECORATORS = "decorators"; //$NON-NLS-1$ - - // image paths - public final String ICON_PATH = "icons/full/"; //$NON-NLS-1$ - - // local toolbars (colour) - public final String IMG_DLG_SYNC_INCOMING = "clcl16/incom_synch.gif"; //$NON-NLS-1$ - public final String IMG_DLG_SYNC_OUTGOING = "clcl16/outgo_synch.gif"; //$NON-NLS-1$ - public final String IMG_DLG_SYNC_CONFLICTING = "clcl16/conflict_synch.gif"; //$NON-NLS-1$ - public final String IMG_REFRESH = "clcl16/refresh.gif"; //$NON-NLS-1$ - public final String IMG_IGNORE_WHITESPACE = "clcl16/ignorews_edit.gif"; //$NON-NLS-1$ - public final String IMG_CONTENTS = "clcl16/contents.gif"; //$NON-NLS-1$ - - // local toolbars (disabled) - public final String IMG_DLG_SYNC_INCOMING_DISABLED = "dlcl16/incom_synch.gif"; //$NON-NLS-1$ - public final String IMG_DLG_SYNC_OUTGOING_DISABLED = "dlcl16/outgo_synch.gif"; //$NON-NLS-1$ - public final String IMG_DLG_SYNC_CONFLICTING_DISABLED = "dlcl16/conflict_synch.gif"; //$NON-NLS-1$ - public final String IMG_REFRESH_DISABLED = "dlcl16/refresh.gif"; //$NON-NLS-1$ - public final String IMG_IGNORE_WHITESPACE_DISABLED = "dlcl16/ignorews_edit.gif"; //$NON-NLS-1$ - public final String IMG_CONTENTS_DISABLED = "dlcl16/contents.gif"; //$NON-NLS-1$ - - // local toolbars (enabled) - public final String IMG_DLG_SYNC_INCOMING_ENABLED = "elcl16/incom_synch.gif"; //$NON-NLS-1$ - public final String IMG_DLG_SYNC_OUTGOING_ENABLED = "elcl16/outgo_synch.gif"; //$NON-NLS-1$ - public final String IMG_DLG_SYNC_CONFLICTING_ENABLED = "elcl16/conflict_synch.gif"; //$NON-NLS-1$ - public final String IMG_REFRESH_ENABLED = "elcl16/refresh.gif"; //$NON-NLS-1$ - public final String IMG_IGNORE_WHITESPACE_ENABLED = "elcl16/ignorews_edit.gif"; //$NON-NLS-1$ - public final String IMG_CONTENTS_ENABLED = "elcl16/contents.gif"; //$NON-NLS-1$ - - // sync view modes - public final String IMG_SYNC_MODE_CATCHUP = "clcl16/catchup_rls.gif"; //$NON-NLS-1$ - public final String IMG_SYNC_MODE_RELEASE = "clcl16/release_rls.gif"; //$NON-NLS-1$ - public final String IMG_SYNC_MODE_FREE = "clcl16/catchuprelease_rls.gif"; //$NON-NLS-1$ - - // sync view modes (disabled) - public final String IMG_SYNC_MODE_CATCHUP_DISABLED = "dlcl16/catchup_rls.gif"; //$NON-NLS-1$ - public final String IMG_SYNC_MODE_RELEASE_DISABLED = "dlcl16/release_rls.gif"; //$NON-NLS-1$ - public final String IMG_SYNC_MODE_FREE_DISABLED = "dlcl16/catchuprelease_rls.gif"; //$NON-NLS-1$ - - // sync view modes (enabled) - public final String IMG_SYNC_MODE_CATCHUP_ENABLED = "elcl16/catchup_rls.gif"; //$NON-NLS-1$ - public final String IMG_SYNC_MODE_RELEASE_ENABLED = "elcl16/release_rls.gif"; //$NON-NLS-1$ - public final String IMG_SYNC_MODE_FREE_ENABLED = "elcl16/catchuprelease_rls.gif"; //$NON-NLS-1$ - - // wizard banners - public final String IMG_WIZBAN_SHARE = "wizban/share_wizban.gif"; //$NON-NLS-1$ - public final String IMG_PROJECTSET_IMPORT_BANNER = "wizban/import_projectset_wizban.gif"; //$NON-NLS-1$ - public final String IMG_PROJECTSET_EXPORT_BANNER = "wizban/export_projectset_wizban.gif"; //$NON-NLS-1$ - - // preferences - public final String PREF_ALWAYS_IN_INCOMING_OUTGOING = "pref_always_in_incoming_outgoing"; //$NON-NLS-1$ - - //objects - public final String IMG_SITE_ELEMENT = "clcl16/site_element.gif"; //$NON-NLS-1$ - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/ConfigureProjectAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/ConfigureProjectAction.java deleted file mode 100644 index d9d93cadc..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/ConfigureProjectAction.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.actions; - - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.internal.ui.ConfigureProjectWizard; -import org.eclipse.team.internal.ui.Policy; - -/** - * Action for configuring a project. Configuring involves associating - * the project with a Team provider and performing any provider-specific - * configuration that is necessary. - */ -public class ConfigureProjectAction extends TeamAction { - /* - * Method declared on IActionDelegate. - */ - public void run(IAction action) { - run(new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - IProject project = getSelectedProjects()[0]; - ConfigureProjectWizard wizard = new ConfigureProjectWizard(); - wizard.init(null, project); - WizardDialog dialog = new WizardDialog(getShell(), wizard); - dialog.open(); - } catch (Exception e) { - throw new InvocationTargetException(e); - } - } - }, Policy.bind("ConfigureProjectAction.configureProject"), PROGRESS_BUSYCURSOR); //$NON-NLS-1$ - } - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() { - IProject[] selectedProjects = getSelectedProjects(); - if (selectedProjects.length != 1) return false; - if (!selectedProjects[0].isAccessible()) return false; - if (RepositoryProvider.getProvider(selectedProjects[0]) == null) return true; - return false; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/DeconfigureProjectAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/DeconfigureProjectAction.java deleted file mode 100644 index d30b66b22..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/DeconfigureProjectAction.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.actions; - - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -/** - * Action for deconfiguring a project. Deconfiguring involves removing - * associated provider for the project. - */ -public class DeconfigureProjectAction extends TeamAction { - /* - * Method declared on IActionDelegate. - */ - public void run(IAction action) { - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - // should we use the id for the provider type and remove from the nature. Or would - // this operation be provider specific? - } catch (Exception e) { - throw new InvocationTargetException(e); - } - } - }, Policy.bind("DeconfigureProjectAction.deconfigureProject"), PROGRESS_BUSYCURSOR); //$NON-NLS-1$ - } - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() { - IProject[] selectedProjects = getSelectedProjects(); - if (selectedProjects.length != 1) return false; - if (RepositoryProvider.getProvider(selectedProjects[0]) != null) return false; - return true; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java deleted file mode 100644 index ba96f5280..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java +++ /dev/null @@ -1,394 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.actions; - - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceStatus; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.TeamPlugin; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.ui.IObjectActionDelegate; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.actions.ActionDelegate; - -/** - * The abstract superclass of all Team actions. This class contains some convenience - * methods for getting selected objects and mapping selected objects to their - * providers. - * - * Team providers may subclass this class when creating their actions. - * Team providers may also instantiate or subclass any of the - * subclasses of TeamAction provided in this package. - */ -public abstract class TeamAction extends ActionDelegate implements IObjectActionDelegate { - // The current selection - protected IStructuredSelection selection; - - // The shell, required for the progress dialog - protected Shell shell; - - // Constants for determining the type of progress. Subclasses may - // pass one of these values to the run method. - public final static int PROGRESS_DIALOG = 1; - public final static int PROGRESS_BUSYCURSOR = 2; - - private IWorkbenchPart targetPart; - - /** - * Returns the selected projects. - * - * @return the selected projects - */ - protected IProject[] getSelectedProjects() { - ArrayList projects = null; - if (!selection.isEmpty()) { - projects = new ArrayList(); - Iterator elements = ((IStructuredSelection) selection).iterator(); - while (elements.hasNext()) { - Object next = elements.next(); - if (next instanceof IProject) { - projects.add(next); - continue; - } - if (next instanceof IAdaptable) { - IAdaptable a = (IAdaptable) next; - Object adapter = a.getAdapter(IResource.class); - if (adapter instanceof IProject) { - projects.add(adapter); - continue; - } - } - } - } - if (projects != null && !projects.isEmpty()) { - IProject[] result = new IProject[projects.size()]; - projects.toArray(result); - return result; - } - return new IProject[0]; - } - /** - * Returns the selected resources. - * - * @return the selected resources - */ - protected IResource[] getSelectedResources() { - ArrayList resources = null; - if (!selection.isEmpty()) { - resources = new ArrayList(); - Iterator elements = ((IStructuredSelection) selection).iterator(); - while (elements.hasNext()) { - Object next = elements.next(); - if (next instanceof IResource) { - resources.add(next); - continue; - } - if (next instanceof IAdaptable) { - IAdaptable a = (IAdaptable) next; - Object adapter = a.getAdapter(IResource.class); - if (adapter instanceof IResource) { - resources.add(adapter); - continue; - } - } - } - } - if (resources != null && !resources.isEmpty()) { - IResource[] result = new IResource[resources.size()]; - resources.toArray(result); - return result; - } - return new IResource[0]; - } - - /** - * Convenience method for getting the current shell. - * - * @return the shell - */ - protected Shell getShell() { - if (shell != null) { - return shell; - } else { - return TeamUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow().getShell(); - } - } - /** - * Convenience method for running an operation with progress and - * error feedback. - * - * @param runnable the runnable which executes the operation - * @param problemMessage the message to display in the case of errors - * @param progressKind one of PROGRESS_BUSYCURSOR or PROGRESS_DIALOG - */ - final protected void run(final IRunnableWithProgress runnable, final String problemMessage, int progressKind) { - final Exception[] exceptions = new Exception[] {null}; - switch (progressKind) { - case PROGRESS_BUSYCURSOR : - BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { - public void run() { - try { - runnable.run(new NullProgressMonitor()); - } catch (InvocationTargetException e) { - exceptions[0] = e; - } catch (InterruptedException e) { - exceptions[0] = null; - } - } - }); - break; - default : - case PROGRESS_DIALOG : - try { - new ProgressMonitorDialog(getShell()).run(true, true, runnable); - } catch (InvocationTargetException e) { - exceptions[0] = e; - } catch (InterruptedException e) { - exceptions[0] = null; - } - break; - } - if (exceptions[0] != null) { - handle(exceptions[0], null, problemMessage); - } - } - - /* - * Method declared on IActionDelegate. - */ - public void selectionChanged(IAction action, ISelection selection) { - if (selection instanceof IStructuredSelection) { - this.selection = (IStructuredSelection) selection; - if (action != null) { - setActionEnablement(action); - } - } - } - - /** - * Method invoked from <code>selectionChanged(IAction, ISelection)</code> - * to set the enablement status of the action. The instance variable - * <code>selection</code> will contain the latest selection so the methods - * <code>getSelectedResources()</code> and <code>getSelectedProjects()</code> - * will provide the proper objects. - * - * This method can be overridden by subclasses but should not be invoked by them. - */ - protected void setActionEnablement(IAction action) { - try { - action.setEnabled(isEnabled()); - } catch (TeamException e) { - if (e.getStatus().getCode() == IResourceStatus.OUT_OF_SYNC_LOCAL) { - // Enable the action to allow the user to discover the problem - action.setEnabled(true); - } else { - action.setEnabled(false); - // We should not open a dialog when determining menu enablements so log it instead - TeamPlugin.log(e.getStatus()); - } - } - } - - /* - * Method declared on IObjectActionDelegate. - */ - public void setActivePart(IAction action, IWorkbenchPart targetPart) { - this.shell = targetPart.getSite().getShell(); - this.targetPart = targetPart; - } - /** - * Shows the given errors to the user. - * - * @param status the status containing the error - * @param title the title of the error dialog - * @param message the message for the error dialog - * @param shell the shell to open the error dialog in - */ - protected void handle(Exception exception, String title, String message) { - IStatus status = null; - boolean log = false; - boolean dialog = false; - if (exception instanceof TeamException) { - status = ((TeamException)exception).getStatus(); - log = false; - dialog = true; - } else if (exception instanceof InvocationTargetException) { - Throwable t = ((InvocationTargetException)exception).getTargetException(); - if (t instanceof TeamException) { - status = ((TeamException)t).getStatus(); - log = false; - dialog = true; - } else if (t instanceof CoreException) { - status = ((CoreException)t).getStatus(); - log = true; - dialog = true; - } else if (t instanceof InterruptedException) { - return; - } else { - status = new Status(IStatus.ERROR, TeamUIPlugin.ID, 1, Policy.bind("TeamAction.internal"), t); //$NON-NLS-1$ - log = true; - dialog = true; - } - } - if (status == null) return; - if (!status.isOK()) { - IStatus toShow = status; - if (status.isMultiStatus()) { - IStatus[] children = status.getChildren(); - if (children.length == 1) { - toShow = children[0]; - } - } - if (title == null) { - title = status.getMessage(); - } - if (message == null) { - message = status.getMessage(); - } - if (dialog) { - ErrorDialog.openError(getShell(), title, message, toShow); - } - if (log) { - TeamUIPlugin.log(toShow); - } - } - } - /** - * Concrete action enablement code. - * Subclasses must implement. - * - * @return whether the action is enabled - * @throws TeamException if an error occurs during enablement detection - */ - abstract protected boolean isEnabled() throws TeamException; - - /** - * Convenience method that maps the selected resources to their providers. - * The returned Hashtable has keys which are ITeamProviders, and values - * which are Lists of IResources that are shared with that provider. - * - * @return a hashtable mapping providers to their selected resources - */ - protected Hashtable getProviderMapping() { - return getProviderMapping(getSelectedResources()); - } - /** - * Convenience method that maps the given resources to their providers. - * The returned Hashtable has keys which are ITeamProviders, and values - * which are Lists of IResources that are shared with that provider. - * - * @return a hashtable mapping providers to their resources - */ - protected Hashtable getProviderMapping(IResource[] resources) { - Hashtable result = new Hashtable(); - for (int i = 0; i < resources.length; i++) { - RepositoryProvider provider = RepositoryProvider.getProvider(resources[i].getProject()); - List list = (List)result.get(provider); - if (list == null) { - list = new ArrayList(); - result.put(provider, list); - } - list.add(resources[i]); - } - return result; - } - - /** - * Convenience method that maps the selected resources to their target providers. - * The returned Hashtable has keys which are TargetProviders, and values - * which are Lists of IResources that are shared with that provider. - * - * @return a hashtable mapping providers to their selected resources - */ - protected Hashtable getTargetProviderMapping() throws TeamException { - return getTargetProviderMapping(getSelectedResources()); - } - /** - * Convenience method that maps the given resources to their target providers. - * The returned Hashtable has keys which are TargetProviders, and values - * which are Lists of IResources that are shared with that provider. - * - * @return a hashtable mapping providers to their resources - */ - protected Hashtable getTargetProviderMapping(IResource[] resources) throws TeamException { - Hashtable result = new Hashtable(); - for (int i = 0; i < resources.length; i++) { - TargetProvider provider = TargetManager.getProvider(resources[i].getProject()); - List list = (List)result.get(provider); - if (list == null) { - list = new ArrayList(); - result.put(provider, list); - } - list.add(resources[i]); - } - return result; - } - - /** - * @return IWorkbenchPart - */ - protected IWorkbenchPart getTargetPart() { - return targetPart; - } - - /** - * Return the path that was active when the menu item was selected. - * @return IWorkbenchPage - */ - protected IWorkbenchPage getTargetPage() { - if (getTargetPart() == null) return TeamUIPlugin.getActivePage(); - return getTargetPart().getSite().getPage(); - } - - /** - * Show the view with the given ID in the perspective from which the action - * was executed. Returns null if the view is not registered. - * - * @param viewId - * @return IViewPart - */ - protected IViewPart showView(String viewId) { - try { - return getTargetPage().showView(viewId); - } catch (PartInitException pe) { - return null; - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties deleted file mode 100644 index d1192a348..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties +++ /dev/null @@ -1,292 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -############################################### -# Message catalog for org.eclipse.team.ui -############################################### - -AuthenticatedTargetSitePropertiesPage.Server=Server hostname: -AuthenticatedTargetSitePropertiesPage.User=&User: -AuthenticatedTargetSitePropertiesPage.Password=&Password: -AuthenticatedTargetSitePropertiesPage.Error=Error Occurred - -ProjectTargetMappingPropertiesPage.Error=A Bad Thing (tm) happened. -ProjectTargetMappingPropertiesPage.URL=Target site URL: -ProjectTargetMappingPropertiesPage.FolderName=Deployment path: -ProjectTargetMappingPropertiesPage.ChangeBtn=&Change these settings... - -CatchupReleaseViewer.open=&Show Content Comparison -CatchupReleaseViewer.expand=&Expand All -CatchupReleaseViewer.ignoreWhiteSpace=&Ignore White Space -CatchupReleaseViewer.refreshAction=&Refresh With Remote -CatchupReleaseViewer.showIncomingAction=Show Incoming -CatchupReleaseViewer.showInNavigator=Show in &Navigator -CatchupReleaseViewer.showOnlyConflictsAction=Show Only Conflicts -CatchupReleaseViewer.showOutgoingAction=Show Outgoing -CatchupReleaseViewer.removeFromView=Remove &From View -CatchupReleaseViewer.copyAllRightToLeft=Copy &All Changes From Right To Left -CatchupReleaseViewer.Compare_File_Contents_1=Compare File Contents -CatchupReleaseViewer.Copying_right_contents_into_workspace_2=Copying right contents into workspace -CatchupReleaseViewer.MakingLocalLikeRemote=Processing {0} - -ConfigureProjectAction.configureProject=Configure Project -ConfigureProjectWizard.configureProject=Share Project -ConfigureProjectWizard.description=Select the repository plug-in that will be used to share the selected project. -ConfigureProjectWizard.title=Share Project -ConfigureProjectWizardMainPage.selectRepository=Select a repository type: -ConfigureProjectWizardMainPage.selectTarget=Select a site type: - -ConfigurationWizard.exceptionCreatingWizard=Exception creating wizard. - -DeconfigureProjectAction.deconfigureProject=Deconfigure Project - -IgnorePreferencePage.description=Use this page to specify a list of resource name patterns to exclude from version control. -IgnorePreferencePage.add=&Add... -IgnorePreferencePage.enterPatternLong=Please enter a pattern: -IgnorePreferencePage.enterPatternShort=Enter Ignore Pattern -IgnorePreferencePage.ignorePatterns=&Ignore Patterns: -IgnorePreferencePage.patternExistsLong=The entered pattern already exists. -IgnorePreferencePage.patternExistsShort=Pattern Already Exists -IgnorePreferencePage.remove=&Remove - -MergeResource.commonFile=Common file: {0} -MergeResource.noCommonFile=No common file -MergeResource.noRepositoryFile=No remote file -MergeResource.repositoryFile=Remote file: {0} -MergeResource.workspaceFile=Workspace file: {0} - -nothingToSynchronize=Nothing to Synchronize -simpleInternal=Internal error -exception=An exception occurred - -SyncCompareInput.nothingText=Workspace resources are the same as remote. -SyncCompareInput.refresh=Error During Refresh with Remote -SyncCompareInput.synchronize=Synchronize -SyncCompareInput.taskTitle=Synchronizing with Remote... - -SyncSet.conflicts={0} conflicts, -SyncSet.incomings={0} incoming change(s), -SyncSet.noConflicts=No conflicts, -SyncSet.noIncomings=no incoming changes, -SyncSet.noOutgoings=no outgoing changes. -SyncSet.outgoings={0} outgoing change(s). - -SyncView.freeModeAction=Incoming/Outgoing Mode -SyncView.freeModeTitle=Synchronize - Incoming/Outgoing Mode -SyncView.freeModeToolTip=Incoming/Outgoing Mode -SyncView.incomingModeAction=Incoming Mode -SyncView.incomingModeTitle=Synchronize - Incoming Mode -SyncView.incomingModeToolTip=Incoming Mode -SyncView.outgoingModeAction=Outgoing Mode -SyncView.outgoingModeTitle=Synchronize - Outgoing Mode -SyncView.outgoingModeToolTip=Outgoing Mode -SyncView.same=Workspace resources are the same as remote. -SyncView.text=Synchronize resources with their remote to display them here. -SyncView.unableSynchronize=Unable to Synchronize -SyncView.saveTitle=Save Resource -SyncView.saveMessage=Resource has been modified. Save changes? -SyncView.errorSaving=Error while saving modified resources -SyncView.cantSaveError=Can't save changes: {0} -SyncView.dirtyIndicatorInTitle=*{0} - - -TeamAction.internal=Internal error occurred. -TeamFile.saveChanges=Unable to save changes to file: {0} -TeamFile.modified={0}* - -TextPreferencePage.add=&Add... -TextPreferencePage.binary=Binary -TextPreferencePage.change=&Change -TextPreferencePage.contents=Contents -TextPreferencePage.description=&File extensions with known content: -TextPreferencePage.enterExtensionLong=Please enter a file extension: -TextPreferencePage.enterExtensionShort=Enter File Extension -TextPreferencePage.extension=Extension -TextPreferencePage.extensionExistsLong=The entered extension already exists. -TextPreferencePage.extensionExistsShort=Extension Already Exists -TextPreferencePage.remove=&Remove -TextPreferencePage.text=ASCII - -TextPreferencePage.columnExtension=extension -TextPreferencePage.columnContents=contents - -ExportProjectSetMainPage.Select_the_projects_to_include_in_the_project_set__2=&Select the projects to include in the Team Project Set: -ExportProjectSetMainPage.Project_Set_File_Name__3=Select the export destination: -ExportProjectSetMainPage.Browse_4=B&rowse... -ExportProjectSetMainPage.You_have_specified_a_folder_5=You have specified a folder - -ImportProjectSetMainPage.Project_Set_File_Name__2=F&ile name: -ImportProjectSetMainPage.Browse_3=B&rowse... -ImportProjectSetMainPage.The_specified_file_does_not_exist_4=The specified file does not exist -ImportProjectSetMainPage.You_have_specified_a_folder_5=You have specified a folder -ImportProjectSetMainPage.workingSetNameEmpty=The working set name must not be empty -ImportProjectSetMainPage.workingSetNameExists=The specified working set already exists -ImportProjectSetMainPage.createWorkingSetLabel=&Create a working set containing the imported projects -ImportProjectSetMainPage.workingSetLabel=&Working Set Name: - -ProjectSetContentHandler.Element_provider_must_be_contained_in_element_psf_4=Element provider must be contained in element psf -ProjectSetContentHandler.Element_project_must_be_contained_in_element_provider_7=Element project must be contained in element provider - -ProjectSetExportWizard.Project_Set_1=Team Project Set -ProjectSetExportWizard.Export_a_Project_Set_3=Export a Team Project Set -ProjectSetExportWizard.Question_4=Question -ProjectSetExportWizard.Target_directory_does_not_exist._Would_you_like_to_create_it__5=Target directory does not exist. Would you like to create it? -ProjectSetExportWizard.Export_Problems_6=Export Problems -ProjectSetExportWizard.An_error_occurred_creating_the_target_directory_7=An error occurred creating the target directory -ProjectSetExportWizard.Question_8=Question -ProjectSetExportWizard.Target_already_exists._Would_you_like_to_overwrite_it__9=Target already exists. Would you like to overwrite it? -ProjectSetImportWizard.Project_Set_1=Team Project Set -ProjectSetImportWizard.Import_a_Project_Set_3=Import a Team Project Set -ProjectSetImportWizard.workingSetExistsTitle=Working Set Exists -ProjectSetImportWizard.workingSetExistsMessage=Working set ''{0}'' already exists. Overwrite? - -ExportProjectSetMainPage.Project_Set_Files_3=Team Project Set Files (*.psf) -ExportProjectSetMainPage.default=projectSet.psf -ImportProjectSetMainPage.allFiles=All Files (*.*) -ImportProjectSetMainPage.Project_Set_Files_2=Team Project Set Files (*.psf) -ExportProjectSetMainPage.&File_name__1=&File name: -TeamPreferencePage.General_settings_for_Team_support_1=General settings for Team support -TeamPreferencePage.&Use_Incoming/Outgoing_mode_when_synchronizing_2=&Use Incoming/Outgoing mode when synchronizing - -TargetSiteExportWizard.Target_Site=Target Site -TargetSiteExportWizard.Export_a_Target_Site=Export a target site -TargetSiteExportWizard.Creation_Question=Should I? -TargetSiteExportWizard.Create_dir=Would you like to create the directory, since it does not currently exist? -TargetSiteExportWizard.Export_Problems=Bad things happened! -TargetSiteExportWizard.Directory_creation_error=I was unable to create a new directory. Make sure you have write permissions in the appropriate area of the filesystem. -TargetSiteExportWizard.Overwrite_Question=Do you really want to? -TargetSiteExportWizard.Overwrite_file=Would you like to overwrite the file you have selected? - -ExportTargetSiteMainPage.Select_Sites=Select the sites to export -ExportTargetSiteMainPage.folder_specified=You cannot export to a directory! -ExportTargetSiteMainPage.Target_Site_Filename=Target site Filename -ExportTargetSiteMainPage.File_name=File name -ExportTargetSiteMainPage.Browse=Browse -ExportTargetSiteMainPage.Target_Site_Files=Target site files -ExportTargetSiteMainPage.default=targetSite.tsf - -ImportTargetSiteMainPage.nonexistent_file=No such file exists on your filesystem! -ImportTargetSiteMainPage.folder_specified=That is a directory, not a file! -ImportTargetSiteMainPage.File_name=File name -ImportTargetSiteMainPage.Browse=Browse -ImportTargetSiteMainPage.Target_Site_Files=Target site files - -NatureToPropertyAction.label=Convert Nature -NatureToPropertyAction.message=Could not remove the nature from one or more of the selected projects. -NatureToPropertyAction.multiMessage=Could not write .project file - -TargetSiteImportWizard.Target_Site=Target Site -TargetSiteImportWizard.Import_Target_Site=Import a Target site - -############################################### -# Target Management Messages -############################################### - -TargetSiteCreationWizard.windowTitleProject=Target a Site -TargetSiteCreationWizard.windowTitleNoProject=New Site -TargetSiteCreationWizard.label=Create a site connection -TargetSiteCreationWizard.description=Select the type of site you want to target. - -TargetSiteCreationWizard.mappingPageTitle=Specify the location on the site -TargetSiteCreationWizard.siteSelectionPage=Select or create a site - -SiteSelectionPage.description=Select an existing site or create a new site where you want to upload your resources to. -SiteSelectionPage.label=Select an existing site or create a new one: -SiteSelectionPage.useExisting=&Use Existing Site -SiteSelectionPage.createNew=&Create a new Site -SiteSelectionPage.disconnectTarget=&Disconnect from Site - -GetAsProject.thisResourceExists=The resource ''{0}'' already exists in the workspace. Overwrite? -GetAsProject.thisExternalFileExists=The folder ''{0}'' exists in the local file system. Overwrite? -GetAsProject.confirmOverwrite=Confirm Overwrite -GetAsProject.taskName1=Downloading ''{0}'' -GetAsProject.taskNameN=Downloading {0} folders -GetAsProject.errorCreatingProject=Error creating project: {0} -GetAsProject.errorGettingResources=Error getting resources - -GetAs.checkoutFailed=Problems encountered receiving the remote folder -GetAs.enterProjectTitle=Downloading ''{0}'' As... -GetAs.taskname=Downloading ''{0}'' as ''{1}'' - -Error=Error - -CreateNewFolderAction.errorCreatingFolder=Error creating the remote folder. -CreateNewFolderAction.title=New Remote Folder -CreateNewFolderAction.message=Enter the name for the new remote folder: -CreateNewFolderAction.newFolderName=New Folder - -GetAction.title=Download -GetAction.working=Downloading from ''{0}''... - -PutAction.title=Upload -PutAction.working=Uploading to ''{0}''... - -SiteExplorerView.addSiteAction=Target &Site -SiteExplorerView.addSiteActionTooltip=Add a Site -SiteExplorerView.newFolderAction=Fo&lder... -SiteExplorerView.newMenu=&New -SiteExplorerView.Name_1=Name -SiteExplorerView.Size_2=Size -SiteExplorerView.Modified_3=Modified -SiteExplorerView.URL_4=URL -SiteExplorerView.mappedProjects={0} is mapped to {1} -SiteExplorerView.projectsAlreadyMapped=The selected sites are being used by projects in your workspace. You must disconnect the projects from the Sites before discarding them. -SiteExplorerView.unmapProjectsAndDisconnect=Disconnect projects from these sites then discard the sites -SiteExplorerView.unmapDialogTitle=Warning - -CreateNewFolderAction.creatingFolder=Creating Folder -CreateNewFolderAction.suggestedNameProgress=Retrieving existing folder names... -CreateNewFolderAction.suggestedNameConcat={0}_{1} - -SiteExplorerView.promptForDeletingSites=Are you sure you want to discard {0} site(s)? -SiteExplorerView.promptForDeletingSitesTitle=Confirm Discarding Sites - -SiteExplorerViewLabelProvider.fileSize={0} KB - -MappingSelectionPage.description=Specify the location on the site where you want to target your resources. -MappingSelectionPage.label=Select the site or a folder: -MappingSelectionPage.newFolderLabel=&Create Folder... -MappingSelectionPage.mappingTitle=Select the location on the site - -ConfigureTargetWizardQuestion_2=Question -ConfigureTargetWizardError_6=Error -ConfigureTargetWizardError_mapping_the_project_with_this_site_7=Error mapping the project with this site -ConfigureTargetWizardURL_doesn__t_exist_on_the_server_8=URL doesn\'t exist on the server -ConfigureTargetWizardValidating_connection_to_Site..._9=Validating connection to Site... -ConfigureTargetWizardConnection_Error_10=Connection Error -ConfigureTargetWizard.alreadyMapped=''{0}'' is already targeted to ''{1}''. Are you sure you want to change this? -ConfigureTargetWizard.errorOccurred=An error occurred connecting to ''{0}''.\n\nCode: {1}\nMessage: {2}\n\nDo you still want to keep this target? -ConfigureTargetWizard.errorUnmappingProject=An error occurred trying to disconnect this project. - -GetAction.Exception_getting_provider_2=Exception getting provider -GetAction.confirmFileOverwrite=You have local changes which you are about to overwrite. Do you wish to continue? -GetAction.confirmFileOverwriteTitle=Confirm Overwrite - -TargetSyncAction.errorEncountered=An error occurred performing the action - -GetSyncAction.Getting..._1=Downloading... -PutAction.Exception_getting_provider_2=Exception getting provider -PutSyncAction.Putting..._1=Uploading... - -TargetCatchupReleaseViewer.Get_1=&Download -TargetCatchupReleaseViewer.Put_2=&Upload - -SiteSelectionPage.siteLabelCurrentWithMapping={0} (currently as {1}) -SiteSelectionPage.siteLabelCurrent={0} (current) - -UploadAction.Exception_getting_provider=Exception getting provider -UploadAction.working=Uploading to ''{0}''... -UploadAction.noDirtyTitle=No Dirty Resources Found -UploadAction.noDirtyMessage=There were no dirty resources found to upload. -UploadAction.confirmDeletionTitle=Confirm Deletion -UploadAction.confirmFileDeletionMessage=File ''{0}'' has been deleted locally. Do you want to delete it remotely? -UploadAction.problemMessage=Problems occurred uploading. - - diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java deleted file mode 100644 index ed0bd047f..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java +++ /dev/null @@ -1,735 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import java.lang.reflect.InvocationTargetException; -import java.util.Iterator; - -import org.eclipse.compare.BufferedContent; -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.IEditableContent; -import org.eclipse.compare.ITypedElement; -import org.eclipse.compare.NavigationAction; -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.structuremergeviewer.DiffContainer; -import org.eclipse.compare.structuremergeviewer.DiffElement; -import org.eclipse.compare.structuremergeviewer.DiffTreeViewer; -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.compare.structuremergeviewer.IDiffContainer; -import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerFilter; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyAdapter; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.team.core.sync.ILocalSyncElement; -import org.eclipse.team.core.sync.IRemoteSyncElement; -import org.eclipse.team.internal.ui.IHelpContextIds; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.team.internal.ui.UIConstants; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IPageLayout; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IViewSite; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.views.navigator.ResourceNavigator; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * This viewer adds a custom filter and some merge actions. - * Note this is a layer breaker and needs to be refactored. Viewers should - * not contain references to workbench actions. Actions should be contributed - * by the view. - */ -public abstract class CatchupReleaseViewer extends DiffTreeViewer { - - class ShowInNavigatorAction extends Action implements ISelectionChangedListener { - IViewSite viewSite; - public ShowInNavigatorAction(IViewSite viewSite, String title) { - super(title, null); - this.viewSite = viewSite; - } - public void run() { - showSelectionInNavigator(viewSite); - } - public void selectionChanged(SelectionChangedEvent event) { - IStructuredSelection selection = (IStructuredSelection)event.getSelection(); - if (selection.size() == 0) { - setEnabled(false); - return; - } - for (Iterator iter = selection.iterator(); iter.hasNext();) { - ITeamNode node = (ITeamNode)iter.next(); - if(!node.getResource().isAccessible()) { - setEnabled(false); - return; - } - } - setEnabled(true); - } - }; - - /** - * This filter hides all empty categories tree nodes. - */ - class CategoryFilter extends ViewerFilter { - static final int SHOW_INCOMING = 1; - static final int SHOW_OUTGOING = 2; - static final int SHOW_CONFLICTS = 4; - static final int SHOW_PSEUDO_CONFLICTS = 8; - - private int showMask = 0; - - CategoryFilter(int showMask) { - // Mask for all categories to show - this.showMask = showMask; - } - int getMask() { - return showMask; - } - void setMask(int mask) { - this.showMask = mask; - } - public boolean select(Viewer viewer, Object parentElement, Object element) { - // If this element has visible children, always show it. - // This is not great -- O(n^2) filtering - if (hasFilteredChildren(element)) { - return true; - } - if (element instanceof ITeamNode) { - // Filter out pseudo conflicts if requested - int kind = ((ITeamNode)element).getKind(); - if ((showMask & SHOW_PSEUDO_CONFLICTS) == 0 && (kind & IRemoteSyncElement.PSEUDO_CONFLICT) != 0) { - return false; - } - int change = ((ITeamNode)element).getKind() & IRemoteSyncElement.CHANGE_MASK; - int direction = ((ITeamNode)element).getChangeDirection(); - switch (direction) { - case ITeamNode.INCOMING: - return (showMask & SHOW_INCOMING) != 0; - case ITeamNode.OUTGOING: - return (showMask & SHOW_OUTGOING) != 0; - case Differencer.CONFLICTING: - return (showMask & SHOW_CONFLICTS) != 0; - default: - return change != 0; - } - } - // No children are visible, and this folder has no changes, so don't show it. - return false; - } - public boolean isFilterProperty(Object element, String property) { - return property.equals(PROP_KIND); - } - } - - class FilterAction extends Action { - /** - * Must subclass constructor to make it accessible to container class - */ - FilterAction(String title, ImageDescriptor image) { - super(title, image); - } - public void run() { - updateFilters(); - } - } - class SyncSorter extends ViewerSorter { - public int compare(Viewer viewer, Object e1, Object e2) { - boolean oneIsFile = e1 instanceof TeamFile; - boolean twoIsFile = e2 instanceof TeamFile; - if (oneIsFile != twoIsFile) { - return oneIsFile ? 1 : -1; - } - return super.compare(viewer, e1, e2); - } - } - - class RemoveFromTreeAction extends Action { - public RemoveFromTreeAction(String title, ImageDescriptor image) { - super(title, image); - } - public void run() { - ISelection s = getSelection(); - if (!(s instanceof IStructuredSelection) || s.isEmpty()) { - return; - } - // mark all selected nodes as in sync - for (Iterator it = ((IStructuredSelection)s).iterator(); it.hasNext();) { - Object element = it.next(); - setAllChildrenInSync((IDiffElement)element); - } - refresh(); - } - public void update() { - // Update action enablement - setEnabled(!getSelection().isEmpty()); - } - } - class ExpandAllAction extends Action { - public ExpandAllAction(String title, ImageDescriptor image) { - super(title, image); - } - public void run() { - expandSelection(); - } - public void update() { - setEnabled(!getSelection().isEmpty()); - } - } - class OpenAction extends Action { - public OpenAction(String title, ImageDescriptor image) { - super(title, image); - } - public void run() { - openSelection(); - } - public void update() { - ISelection selection = getSelection(); - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss = (IStructuredSelection)selection; - if (ss.size() == 1) { - Object element = ss.getFirstElement(); - setEnabled(element instanceof TeamFile); - return; - } - } - setEnabled(false); - } - } - - // The current sync mode - private int syncMode = SyncView.SYNC_NONE; - - // Actions - private FilterAction showIncoming; - private FilterAction showOutgoing; - private FilterAction showOnlyConflicts; - private Action refresh; - private OpenAction open; - private ExpandAllAction expandAll; - private RemoveFromTreeAction removeFromTree; - private ShowInNavigatorAction showInNavigator; - private Action ignoreWhiteSpace; - private Action toggleGranularity; - - private NavigationAction showPrevious; - private NavigationAction showNext; - - // Property constant for diff mode kind - static final String PROP_KIND = "team.ui.PropKind"; //$NON-NLS-1$ - - private Action copyAllRightToLeft; - - private boolean compareFileContents = false; - - /** - * Creates a new catchup/release viewer. - */ - protected CatchupReleaseViewer(Composite parent, SyncCompareInput model) { - super(parent, model.getCompareConfiguration()); - setSorter(new SyncSorter()); - initializeActions(model); - } - - /** - * Contributes actions to the provided toolbar - */ - void contributeToActionBars(IActionBars actionBars) { - IToolBarManager toolBar = actionBars.getToolBarManager(); - - toolBar.add(new Separator()); - toolBar.add(showOnlyConflicts); - - toolBar.add(new Separator()); - toolBar.add(showNext); - toolBar.add(showPrevious); - - // Drop down menu - IMenuManager menu = actionBars.getMenuManager(); - if (syncMode == SyncView.SYNC_BOTH) { - menu.add(showIncoming); - menu.add(showOutgoing); - } - menu.add(toggleGranularity); - menu.add(ignoreWhiteSpace); - menu.add(refresh); - } - - /** - * Contributes actions to the popup menu. - */ - protected void fillContextMenu(IMenuManager manager) { - open.update(); - manager.add(open); - manager.add(new Separator()); - expandAll.update(); - manager.add(expandAll); - removeFromTree.update(); - manager.add(removeFromTree); - if (showInNavigator != null) { - manager.add(showInNavigator); - } - if (syncMode == SyncView.SYNC_COMPARE) { - if(copyAllRightToLeft.isEnabled()) { - manager.add(copyAllRightToLeft); - } - } - } - - protected void openSelection() { - ISelection selection = getSelection(); - if (selection instanceof IStructuredSelection) { - Iterator elements = ((IStructuredSelection)selection).iterator(); - while (elements.hasNext()) { - Object next = elements.next(); - openSelection(next); - } - } - } - - /** - * Method openSelection. - * @param next - */ - private void openSelection(Object next) { - if (next instanceof TeamFile) { - handleOpen(null); - } - } - - /** - * Expands to infinity all items in the selection. - */ - protected void expandSelection() { - ISelection selection = getSelection(); - if (selection instanceof IStructuredSelection) { - Iterator elements = ((IStructuredSelection)selection).iterator(); - while (elements.hasNext()) { - Object next = elements.next(); - expandToLevel(next, ALL_LEVELS); - } - } - } - - protected int getSyncMode() { - return syncMode; - } - - /** - * Returns true if the given element has filtered children, and false otherwise. - */ - protected boolean hasFilteredChildren(Object element) { - return getFilteredChildren(element).length > 0; - } - - /** - * Creates the actions for this viewer. - */ - private void initializeActions(final SyncCompareInput diffModel) { - // Mask actions - ImageDescriptor image = TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_INCOMING_ENABLED); - showIncoming = new FilterAction(Policy.bind("CatchupReleaseViewer.showIncomingAction"), image); //$NON-NLS-1$ - showIncoming.setToolTipText(Policy.bind("CatchupReleaseViewer.showIncomingAction")); //$NON-NLS-1$ - showIncoming.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_INCOMING_DISABLED)); - showIncoming.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_INCOMING)); - - image = TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_OUTGOING_ENABLED); - showOutgoing = new FilterAction(Policy.bind("CatchupReleaseViewer.showOutgoingAction"), image); //$NON-NLS-1$ - showOutgoing.setToolTipText(Policy.bind("CatchupReleaseViewer.showOutgoingAction")); //$NON-NLS-1$ - showOutgoing.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_OUTGOING_DISABLED)); - showOutgoing.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_OUTGOING)); - - //show only conflicts is not a HideAction because it doesnt flip bits, it sets an exact mask - image = TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_CONFLICTING_ENABLED); - showOnlyConflicts = new FilterAction(Policy.bind("CatchupReleaseViewer.showOnlyConflictsAction"), image); //$NON-NLS-1$ - showOnlyConflicts.setToolTipText(Policy.bind("CatchupReleaseViewer.showOnlyConflictsAction")); //$NON-NLS-1$ - showOnlyConflicts.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_CONFLICTING_DISABLED)); - showOnlyConflicts.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_DLG_SYNC_CONFLICTING)); - - //refresh action - image = TeamImages.getImageDescriptor(UIConstants.IMG_REFRESH_ENABLED); - refresh = new Action(Policy.bind("CatchupReleaseViewer.refreshAction"), image) { //$NON-NLS-1$ - public void run() { - diffModel.refresh(); - } - }; - refresh.setToolTipText(Policy.bind("CatchupReleaseViewer.refreshAction")); //$NON-NLS-1$ - refresh.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_REFRESH_DISABLED)); - refresh.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_REFRESH)); - - // Open Action - open = new OpenAction(Policy.bind("CatchupReleaseViewer.open"), null); //$NON-NLS-1$ - WorkbenchHelp.setHelp(open, IHelpContextIds.OPEN_ACTION); - - // Expand action - expandAll = new ExpandAllAction(Policy.bind("CatchupReleaseViewer.expand"), null); //$NON-NLS-1$ - WorkbenchHelp.setHelp(expandAll, IHelpContextIds.EXPANDALL_ACTION); - - // Toggle granularity - image = TeamImages.getImageDescriptor(UIConstants.IMG_CONTENTS_ENABLED); - toggleGranularity = new Action(Policy.bind("CatchupReleaseViewer.Compare_File_Contents_1"), image) { //$NON-NLS-1$ - public void run() { - compareFileContents = isChecked(); - diffModel.setSyncGranularity(compareFileContents ? ILocalSyncElement.GRANULARITY_CONTENTS : ILocalSyncElement.GRANULARITY_TIMESTAMP); - updateFilters(); - } - }; - compareFileContents = diffModel.getSyncGranularity() != IRemoteSyncElement.GRANULARITY_TIMESTAMP; - toggleGranularity.setChecked(compareFileContents); - toggleGranularity.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_CONTENTS_DISABLED)); - toggleGranularity.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_CONTENTS)); - - removeFromTree = new RemoveFromTreeAction(Policy.bind("CatchupReleaseViewer.removeFromView"), null); //$NON-NLS-1$ - WorkbenchHelp.setHelp(removeFromTree, IHelpContextIds.REMOVE_ACTION); - - copyAllRightToLeft = new Action(Policy.bind("CatchupReleaseViewer.copyAllRightToLeft"), null) { //$NON-NLS-1$ - public void run() { - ISelection s = getSelection(); - if (!(s instanceof IStructuredSelection) || s.isEmpty()) { - return; - } - // action is only enabled for 1 element. the for loop - final Object element = ((IStructuredSelection)s).getFirstElement(); - if(element instanceof DiffElement) { - try { - new ProgressMonitorDialog(getTree().getShell()).run(true /* fork */, true /* cancellable */, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) - throws InvocationTargetException, InterruptedException { - try { - monitor.beginTask(null, 1000); - monitor.setTaskName(Policy.bind("CatchupReleaseViewer.Copying_right_contents_into_workspace_2")); //$NON-NLS-1$ - ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - try { - monitor.beginTask(null, 100); - copyAllRightToLeft((DiffElement)element, monitor); - } finally { - monitor.done(); - } - } - }, Policy.subInfiniteMonitorFor(monitor, 1000)); - } catch(CoreException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }); - } catch(InvocationTargetException e) { - ErrorDialog.openError(TeamUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow().getShell(), Policy.bind("CatchupReleaseViewer.errorCopyAllRightToLeft"), null, null); //$NON-NLS-1$ - } catch(InterruptedException e) { - } - } - refresh(); - } - public boolean isEnabled() { - ISelection s = getSelection(); - if (!(s instanceof IStructuredSelection) || s.isEmpty()) { - return false; - } - return ((IStructuredSelection)s).size() == 1; - } - }; - - // Show in navigator - if (diffModel.getViewSite() != null) { - showInNavigator = new ShowInNavigatorAction(diffModel.getViewSite(), Policy.bind("CatchupReleaseViewer.showInNavigator")); //$NON-NLS-1$ - WorkbenchHelp.setHelp(showInNavigator, IHelpContextIds.NAVIGATOR_SHOW_ACTION); - addSelectionChangedListener(showInNavigator); - } - - // Ignore white space - image = TeamImages.getImageDescriptor(UIConstants.IMG_IGNORE_WHITESPACE_ENABLED); - ignoreWhiteSpace = new Action(Policy.bind("CatchupReleaseViewer.ignoreWhiteSpace"), image) { //$NON-NLS-1$ - public void run() { - diffModel.setIgnoreWhitespace(isChecked()); - } - }; - ignoreWhiteSpace.setId("team.ignoreWhiteSpace"); //$NON-NLS-1$ - boolean ignore = CompareUIPlugin.getDefault().getPreferenceStore().getBoolean(CompareConfiguration.IGNORE_WHITESPACE); - ignoreWhiteSpace.setChecked(ignore); - ignoreWhiteSpace.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_IGNORE_WHITESPACE_DISABLED)); - ignoreWhiteSpace.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_IGNORE_WHITESPACE)); - - // Show next and previous change - showNext = new NavigationAction(true); - showPrevious = new NavigationAction(false); - showNext.setCompareEditorInput(diffModel); - showPrevious.setCompareEditorInput(diffModel); - - // Add a double-click listener for expanding/contracting - getTree().addListener(SWT.MouseDoubleClick, new Listener() { - public void handleEvent(Event e) { - mouseDoubleClicked(e); - } - }); - - // Add an F5 listener for refresh - getTree().addKeyListener(new KeyAdapter() { - public void keyPressed(KeyEvent e) { - if (e.keyCode == SWT.F5) { - diffModel.refresh(); - } - } - }); - - // Set an initial filter -- show all changes - showIncoming.setChecked(true); - showOutgoing.setChecked(true); - showOnlyConflicts.setChecked(false); - setFilters(CategoryFilter.SHOW_INCOMING| CategoryFilter.SHOW_CONFLICTS | CategoryFilter.SHOW_OUTGOING); - } - - /** - * Method setAllChildrenInSync. - * @param iDiffElement - */ - private void setAllChildrenInSync(IDiffElement element) { - if(element instanceof DiffContainer) { - DiffContainer container = (DiffContainer)element; - IDiffElement[] children = container.getChildren(); - for (int i = 0; i < children.length; i++) { - setAllChildrenInSync(children[i]); - } - } - ((DiffElement)element).setKind(IRemoteSyncElement.IN_SYNC); - } - - protected void copyAllRightToLeft(IDiffElement element, IProgressMonitor monitor) throws CoreException { - Policy.checkCanceled(monitor); - - if(element instanceof DiffContainer) { - DiffContainer container = (DiffContainer)element; - IDiffElement[] children = container.getChildren(); - for (int i = 0; i < children.length; i++) { - copyAllRightToLeft(children[i], monitor); - } - } else if(element instanceof TeamFile) { - TeamFile file = (TeamFile)element; - if(file.getKind() != IRemoteSyncElement.IN_SYNC) { - monitor.subTask( - Policy.bind("CatchupReleaseViewer.MakingLocalLikeRemote", //$NON-NLS-1$ - Policy.toTruncatedPath(file.getMergeResource().getResource().getFullPath(), 3))); - file.setProgressMonitor(Policy.subNullMonitorFor(monitor)); - - if(file.getRight() == null || file.getLeft() == null) { - file.copy(false /* right to left */); - } - ITypedElement te = file.getLeft(); - ITypedElement rte = file.getRight(); - if(te instanceof IEditableContent) { - IEditableContent editable = (IEditableContent)te; - if(editable.isEditable()) { - if(rte instanceof BufferedContent) { - editable.setContent(((BufferedContent)rte).getContent()); - } - } - } - file.setProgressMonitor(null); - monitor.worked(1); - } - } - } - - /* - * Method declared on ContentViewer. - */ - protected void inputChanged(Object input, Object oldInput) { - super.inputChanged(input, oldInput); - // Update the refresh action - if (refresh != null) { - Tree tree = getTree(); - if (tree != null) { - refresh.setEnabled(input != null); - } - } - } - - /** - * Shows the selected resource(s) in the resource navigator. - */ - private void showSelectionInNavigator(IViewSite viewSite) { - ISelection selection = getSelection(); - if (!(selection instanceof IStructuredSelection)) { - return; - } - // Create a selection of IResource objects - Object[] selected = ((IStructuredSelection)selection).toArray(); - IResource[] resources = new IResource[selected.length]; - for (int i = 0; i < selected.length; i++) { - resources[i] = ((ITeamNode)selected[i]).getResource(); - } - ISelection resourceSelection = new StructuredSelection(resources); - - // Show the resource selection in the navigator - try { - IViewPart part = viewSite.getPage().showView(IPageLayout.ID_RES_NAV); - if (part instanceof ResourceNavigator) { - ((ResourceNavigator)part).selectReveal(resourceSelection); - } - } catch (PartInitException e) { - TeamUIPlugin.log(e.getStatus()); - } - } - - /** - * The mouse has been double-clicked in the tree, perform appropriate - * behaviour. - */ - private void mouseDoubleClicked(Event e) { - // Only act on single selection - ISelection selection = getSelection(); - if (selection instanceof IStructuredSelection) { - IStructuredSelection structured = (IStructuredSelection)selection; - if (structured.size() == 1) { - Object first = structured.getFirstElement(); - if (first instanceof IDiffContainer) { - // Try to expand/contract - setExpandedState(first, !getExpandedState(first)); - } - } - } - } - - /** - * @see org.eclipse.jface.viewers.StructuredViewer#handleOpen(SelectionEvent) - */ - protected void handleOpen(SelectionEvent event) { - ISelection selection = getSelection(); - if (!selection.isEmpty() && selection instanceof IStructuredSelection) { - IStructuredSelection structured = (IStructuredSelection)selection; - Object selected = structured.getFirstElement(); - if (selected instanceof TeamFile) { - updateLabels(((TeamFile)selected).getMergeResource()); - } - } - super.handleOpen(event); - } - - /** - * Subclasses may override to provide different labels for the compare configuration. - */ - protected void updateLabels(MergeResource resource) { - resource.setLabels(getCompareConfiguration()); - } - - /** - * Set the filter mask to be the exact mask specified. - */ - private void setFilters(int maskToHide) { - ViewerFilter[] filters = getFilters(); - if (filters != null) { - for (int i = 0; i < filters.length; i++) { - if (filters[i] instanceof CategoryFilter) { - CategoryFilter filter = (CategoryFilter)filters[i]; - // Set the exact match to be applied on the filter - filter.setMask(maskToHide); - refresh(); - return; - } - } - } - // No category filter found -- add one - addFilter(new CategoryFilter(maskToHide)); - } - - /** - * The sync mode has changed. Update the filters. - */ - public void syncModeChanged(int mode) { - this.syncMode = mode; - updateFilters(); - } - - /** - * Sets the viewer filtering based on the current state - * of the filter actions. - */ - void updateFilters() { - //do nothing if viewer is disposed - Control control = getControl(); - if (control == null || control.isDisposed()) - return; - - //always show conflicts - int filters = CategoryFilter.SHOW_CONFLICTS; - - //determine what other filters to apply based on current action states - switch (syncMode) { - case SyncView.SYNC_INCOMING: - case SyncView.SYNC_MERGE: - if (!showOnlyConflicts.isChecked()) { - filters |= CategoryFilter.SHOW_INCOMING; - } - break; - case SyncView.SYNC_OUTGOING: - if (!showOnlyConflicts.isChecked()) { - filters |= CategoryFilter.SHOW_OUTGOING; - } - break; - case SyncView.SYNC_BOTH: - boolean conflictsOnly = showOnlyConflicts.isChecked(); - //if showing only conflicts, don't allow these actions to happen - showIncoming.setEnabled(!conflictsOnly); - showOutgoing.setEnabled(!conflictsOnly); - if (!conflictsOnly) { - if (showIncoming.isChecked()) { - filters |= CategoryFilter.SHOW_INCOMING; - } - if (showOutgoing.isChecked()) { - filters |= CategoryFilter.SHOW_OUTGOING; - } - } - break; - } - - //determine whether to show pseudo conflicts - if (!compareFileContents) { - filters |= CategoryFilter.SHOW_PSEUDO_CONFLICTS; - } - setFilters(filters); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/ChangedTeamContainer.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/ChangedTeamContainer.java deleted file mode 100644 index 1fbc6dee3..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/ChangedTeamContainer.java +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.compare.structuremergeviewer.IDiffContainer; -import org.eclipse.compare.structuremergeviewer.IDiffElement; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * A node in a sync tree that represents a changed folder - * (incoming/outgoing creation or deletion). - */ -public class ChangedTeamContainer extends UnchangedTeamContainer { - private MergeResource mergeResource; - - /** - * ChangedTeamContainer constructor - */ - public ChangedTeamContainer(IDiffContainer parent, MergeResource resource, int description) { - super(parent, resource.getResource(), description); - this.mergeResource = resource; - } - - /* - * Method declared on ITeamNode. - */ - public int getChangeDirection() { - return getKind() & Differencer.DIRECTION_MASK; - } - - public int getChangeType() { - return getKind() & Differencer.CHANGE_TYPE_MASK; - } - - public String getName() { - return mergeResource.getName(); - } - - /** - * Returns the team resource managed by this object. - */ - public MergeResource getMergeResource() { - return mergeResource; - } - - /* - * Method declared on IDiffContainer - */ - public void removeToRoot(IDiffElement child) { - // Don't want to remove empty changed containers - remove(child); - } - - /** - * For debugging purposes only. - */ - public String toString() { - return "ChangedTeamContainer(" + getResource().getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - public void makeInSync() { - setKind(Differencer.NO_CHANGE); - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/ITeamNode.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/ITeamNode.java deleted file mode 100644 index c7890a721..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/ITeamNode.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.core.resources.IResource; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * Interface for a sync node that responds to team commands. - */ -public interface ITeamNode extends IDiffElement { - // Possible values for the change direction - static final int INCOMING = Differencer.RIGHT; - static final int OUTGOING = Differencer.LEFT; - static final int CONFLICTING = Differencer.CONFLICTING; - static final int NO_CHANGE = Differencer.NO_CHANGE; - - /** - * Returns the change direction for this resource. One of: - * INCOMING, OUTGOING, CONFLICTING, NO_CHANGE. - */ - public int getChangeDirection(); - - /** - * Returns the type of change for this resource. One of: - * CHANGE, DELETION, ADDITION - */ - public int getChangeType(); - - /** - * Returns the core resource represented by this node. - */ - public IResource getResource(); -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/MergeResource.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/MergeResource.java deleted file mode 100644 index 5f71df9b0..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/MergeResource.java +++ /dev/null @@ -1,166 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import java.io.InputStream; - -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.ITypedElement; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.core.sync.IRemoteSyncElement; -import org.eclipse.team.internal.ui.Policy; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * Encapsulates information about a resource that requires - * contact with the Team API. - */ -public class MergeResource { - private IRemoteSyncElement syncTree; - - /** - * Creates a new merge resource based on the given sync information. - */ - public MergeResource(IRemoteSyncElement syncTree) { - this.syncTree = syncTree; - } - - /** - * Returns an InputStream for the base revision of this incoming resource. - */ - public InputStream getBaseRevision() throws CoreException { - IRemoteResource remote = syncTree.getBase(); - if (remote != null && !remote.isContainer()) { - try { - return remote.getContents(new NullProgressMonitor()); - } catch (TeamException exception) { - // The remote resource has gone. - return null; - } - } - return null; - } - - public String getExtension() { - if (syncTree.isContainer()) { - return ITypedElement.FOLDER_TYPE; - } - String name = getName(); - if (name != null) { - int index = name.lastIndexOf('.'); - if (index == -1) - return ""; //$NON-NLS-1$ - if (index == (name.length() - 1)) - return ""; //$NON-NLS-1$ - return name.substring(index + 1); - } - return ITypedElement.FOLDER_TYPE; - } - - /** - * Returns an InputStream for the latest repository version of this incoming resource. - */ - public InputStream getLatestRevision() throws CoreException { - IRemoteResource remote = syncTree.getRemote(); - try { - return remote.getContents(new NullProgressMonitor()); - } catch (TeamException e) { - throw new CoreException(e.getStatus()); - } - } - - /** - * Returns an InputStream for the local resource. - */ - public InputStream getLocalStream() throws CoreException { - IResource left = syncTree.getLocal(); - if (left == null) return null; - if (left.exists() && left.getType() == IResource.FILE) { - return ((IFile)left).getContents(true); - } - return null; - } - - public String getName() { - return syncTree.getName(); - } - - /* - * @see IMergeResource#getResource. - */ - public IResource getResource() { - return syncTree.getLocal(); - } - - public IRemoteSyncElement getSyncElement() { - return syncTree; - } - - /** - * Returns true if this merge resource has a base resource, - * and false otherwise. - */ - public boolean hasBaseRevision() { - return syncTree.getBase() != null; - } - - /** - * Returns true if this merge resource has a latest revision, - * and false otherwise. - */ - public boolean hasLatestRevision() { - return syncTree.getRemote() != null; - } - - /** - * Is this a leaf node, i.e. a file? - */ - public boolean isLeaf() { - return !syncTree.isContainer(); - } - - /** - * Updates the given compare configuration with appropriate left, right - * and ancestor labels for this resource. - */ - public void setLabels(CompareConfiguration config) { - String name = getName(); - config.setLeftLabel(Policy.bind("MergeResource.workspaceFile", name)); //$NON-NLS-1$ - - - IRemoteResource remote = syncTree.getRemote(); - if (remote != null) { - config.setRightLabel(Policy.bind("MergeResource.repositoryFile", name)); //$NON-NLS-1$ - // config.setRightLabel(TeamUIPlugin.getResourceString("MergeResource.repositoryFile", new Object[] {name, remote.getVersionName()} )); - } else { - config.setRightLabel(Policy.bind("MergeResource.noRepositoryFile")); //$NON-NLS-1$ - } - - IRemoteResource base = syncTree.getBase(); - if (base != null) { - config.setAncestorLabel(Policy.bind("MergeResource.commonFile", name)); //$NON-NLS-1$ - // config.setAncestorLabel(TeamUIPlugin.getResourceString("MergeResource.commonFile", new Object[] {name, common.getVersionName()} )); - } else { - config.setAncestorLabel(Policy.bind("MergeResource.noCommonFile")); //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncCompareInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncCompareInput.java deleted file mode 100644 index ffb2c206e..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncCompareInput.java +++ /dev/null @@ -1,472 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.structuremergeviewer.DiffContainer; -import org.eclipse.compare.structuremergeviewer.DiffNode; -import org.eclipse.compare.structuremergeviewer.ICompareInput; -import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener; -import org.eclipse.compare.structuremergeviewer.IDiffContainer; -import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.action.IStatusLineManager; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.ILocalSyncElement; -import org.eclipse.team.core.sync.IRemoteSyncElement; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.ui.IViewSite; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * Performs a catchup or release operation on an array of resources. - */ -public abstract class SyncCompareInput extends CompareEditorInput { - private IRemoteSyncElement[] trees; - private CatchupReleaseViewer catchupReleaseViewer; - private DiffNode diffRoot; - private Shell shell; - private IViewSite viewSite; - private int granularity; - - private ICompareInputChangeListener listener = new ICompareInputChangeListener() { - public void compareInputChanged(ICompareInput source) { - SyncCompareInput.this.compareInputChanged(source); - } - }; - - /** - * Subclasses may override but must call super. - */ - protected void compareInputChanged(ICompareInput source) { - catchupReleaseViewer.update(source, new String[] {CatchupReleaseViewer.PROP_KIND}); - updateStatusLine(); - } - - /** - * Creates a new catchup or release operation. - */ - public SyncCompareInput(int granularity) { - super(new CompareConfiguration()); - privateSetSyncGranularity(granularity); - } - - /** - * Creates a new catchup or release operation. - */ - public SyncCompareInput() { - this(ILocalSyncElement.GRANULARITY_TIMESTAMP); - } - - protected abstract IRemoteSyncElement[] createSyncElements(IProgressMonitor monitor) throws TeamException; - - /* - * @see CompareEditorInput#createContents - */ - public Control createContents(Composite parent) { - Control result = super.createContents(parent); - initialSelectionAndExpansionState(); - return result; - } - - /** - * Subclasses must create and return a new CatchupReleaseViewer, and set the viewer - * using setViewer(). - */ - public abstract Viewer createDiffViewer(Composite parent); - - /** - * Returns the root node of the diff tree. - */ - public DiffNode getDiffRoot() { - return diffRoot; - } - - /** - * Returns the first diff element that is still unresolved in the - * subtree rooted at the given root element. - * Returns null if everything is resolved. - */ - private IDiffElement getFirstChange(IDiffElement root) { - if (root instanceof ITeamNode) { - ITeamNode node = (ITeamNode)root; - if (node instanceof TeamFile) { - return node; - } - } - if (root instanceof IDiffContainer) { - IDiffElement[] children = ((IDiffContainer)root).getChildren(); - IDiffElement result = null; - for (int i = 0; i < children.length; i++) { - result = getFirstChange(children[i]); - if (result != null) { - return result; - } - } - } - return null; - } - - protected Shell getShell() { - return shell; - } - - /** - * Returns the name of this operation. - * It is dipslayed in the CompareEditor's title bar. - */ - public String getTitle() { - return Policy.bind("SyncCompareInput.synchronize"); //$NON-NLS-1$ - } - - /** - * Returns the compare viewer; - */ - public CatchupReleaseViewer getViewer() { - return catchupReleaseViewer; - } - - /** - * Returns the view site, or null if this is a merge. - */ - public IViewSite getViewSite() { - return viewSite; - } - - /** - * Returns true if the model has incoming or conflicting changes. - */ - boolean hasIncomingChanges() { - if (diffRoot == null) { - return false; - } - SyncSet set = new SyncSet(new StructuredSelection(diffRoot.getChildren())); - return set.hasIncomingChanges() || set.hasConflicts(); - } - - /** - * Set an appropriate initial selection and expansion state. - */ - private void initialSelectionAndExpansionState() { - // Select the next change - IDiffElement next = getFirstChange(diffRoot); - if (next != null) { - catchupReleaseViewer.setSelection(new StructuredSelection(next), true); - } else { - catchupReleaseViewer.collapseAll(); - catchupReleaseViewer.setSelection(new StructuredSelection()); - } - } - - /** - * Performs a compare on the given selection. - * This method is called before the CompareEditor has been opened. - * If the result of the diff is empty (or an error has occured) - * no CompareEditor is opened but an Alert is shown. - */ - public Object prepareInput(final IProgressMonitor pm) throws InterruptedException, InvocationTargetException { - if (pm.isCanceled()) { - throw new InterruptedException(); - } - - try { - pm.beginTask(Policy.bind("SyncCompareInput.taskTitle"), 100); //$NON-NLS-1$ - - // Estimate 70% of the time is creating the sync elements - this.trees = createSyncElements(Policy.subMonitorFor(pm, 70)); - setMessage(null); - if (trees.length == 0) { - return null; - } - final TeamException[] exceptions = new TeamException[1]; - - IWorkspaceRunnable runnable = new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - // collect changes and build the diff tree - diffRoot = new DiffNode(0); - try { - doServerDelta(monitor); - } catch (TeamException e) { - exceptions[0] = e; - } - } - }; - if (pm.isCanceled()) { - throw new InterruptedException(); - } - // Estimate 30% of the time is doing the server delta - ResourcesPlugin.getWorkspace().run(runnable, Policy.subMonitorFor(pm, 30)); - if (exceptions[0] != null) throw exceptions[0]; - if (pm.isCanceled()) { - throw new InterruptedException(); - } - - if (!diffRoot.hasChildren()) { - diffRoot = null; - } - - updateStatusLine(); - - return diffRoot; - } catch (CoreException e) { - throw new InvocationTargetException(e); - } catch (TeamException e) { - throw new InvocationTargetException(e); - } - } - - void doServerDelta(IProgressMonitor pm) throws TeamException { - pm.beginTask(null, trees.length * 1000); - pm.setTaskName(Policy.bind("SyncCompareInput.taskTitle")); //$NON-NLS-1$ - for (int i = 0; i < trees.length; i++) { - IRemoteSyncElement tree = trees[i]; - IProgressMonitor monitor = Policy.subMonitorFor(pm, 1000); - monitor.beginTask(null, 1000); - IDiffElement localRoot = collectResourceChanges(null, tree, monitor); - monitor.done(); - makeParents(localRoot); - } - } - - /* - * This method expects to be past a monitor that has already had it's beginTask invoked - * and has enough ticks to allow 1 unit of work per resource in the tree and an additional - * unit for each folder. - */ - protected IDiffElement collectResourceChanges(IDiffContainer parent, IRemoteSyncElement tree, IProgressMonitor pm) throws TeamException { - int type = tree.getSyncKind(getSyncGranularity(), Policy.subMonitorFor(pm, 1)); - MergeResource mergeResource = new MergeResource(tree); - - if (tree.isContainer()) { - IDiffContainer element = new ChangedTeamContainer(parent, mergeResource, type); - ILocalSyncElement[] children = tree.members(Policy.subMonitorFor(pm, 1)); - for (int i = 0; i < children.length; i++) { - collectResourceChanges(element, (IRemoteSyncElement)children[i], pm); - } - return element; - } else { - TeamFile file = new TeamFile(parent, mergeResource, type, shell); - file.addCompareInputChangeListener(listener); - return file; - } - } - - public int getSyncGranularity() { - return granularity; - } - - public void setSyncGranularity(int granularity) { - privateSetSyncGranularity(granularity); - refresh(); - } - - private void privateSetSyncGranularity(int granularity) { - this.granularity = granularity; - if (granularity != IRemoteSyncElement.GRANULARITY_TIMESTAMP) { - if (isIgnoreWhitespace()) { - this.granularity = IRemoteSyncElement.GRANULARITY_CONTENTS_IGNORE_WHITESPACE; - } else { - this.granularity = IRemoteSyncElement.GRANULARITY_CONTENTS; - } - } - } - - public void setIgnoreWhitespace(boolean ignore) { - // Set the ignore whitespace - Boolean value = ignore ? Boolean.TRUE : Boolean.FALSE; - getCompareConfiguration().setProperty(CompareConfiguration.IGNORE_WHITESPACE, value); - // Set the granularity (which queries the ignore whitespace setting) - privateSetSyncGranularity(getSyncGranularity()); - // Refresh if the granularity is file contents - if (granularity != IRemoteSyncElement.GRANULARITY_TIMESTAMP) { - refresh(); - } - } - - public boolean isIgnoreWhitespace() { - Object o = getCompareConfiguration().getProperty(CompareConfiguration.IGNORE_WHITESPACE); - if (o instanceof Boolean) { - return ((Boolean)o).booleanValue(); - } - return CompareUIPlugin.getDefault().getPreferenceStore().getBoolean(CompareConfiguration.IGNORE_WHITESPACE); - } - - /** - * Builds a DiffFolder tree under the given root for the given resource. - */ - private DiffContainer buildPath(DiffContainer root, IContainer resource) { - DiffContainer parent = root; - if (resource.getType() == IResource.ROOT) { - return root; - } - if (resource.getType() != IResource.PROJECT) { - parent = buildPath(root, resource.getParent()); - } - - DiffContainer c = (DiffContainer)parent.findChild(resource.getName()); - if (c == null) { - c = new UnchangedTeamContainer(parent, resource); - } - return c; - } - - void makeParents(IDiffElement element) { - IContainer parent = ((ITeamNode)element).getResource().getParent(); - DiffContainer container = buildPath(diffRoot, parent); - container.add(element); - } - - /** - * Performs a refresh, with progress and cancelation. - */ - public void refresh() { - final Object[] input = new Object[1]; - IRunnableWithProgress op = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - input[0] = prepareInput(monitor); - } - }; - try { - run(op, Policy.bind("SyncCompareInput.refresh")); //$NON-NLS-1$ - } catch (InterruptedException e) { - return; - } - - catchupReleaseViewer.setInput(input[0]); - if (input[0] == null) { - MessageDialog.openInformation(shell, Policy.bind("nothingToSynchronize"), Policy.bind("SyncCompareInput.nothingText")); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - - protected void run(IRunnableWithProgress op, String problemMessage) throws InterruptedException { - ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell); - try { - dialog.run(true, true, op); - } catch (InvocationTargetException e) { - Throwable throwable = e.getTargetException(); - IStatus error = null; - if (throwable instanceof TeamException) { - error = ((TeamException)throwable).getStatus(); - } else if (throwable instanceof CoreException) { - error = ((CoreException)throwable).getStatus(); - } else { - error = new Status(IStatus.ERROR, TeamUIPlugin.ID, 1, Policy.bind("simpleInternal") , throwable); //$NON-NLS-1$ - } - ErrorDialog.openError(shell, problemMessage, null, error); - TeamUIPlugin.log(error); - // Throw an interrupted exception so we drop out of the sync - throw new InterruptedException(); - } - } - - public void setViewSite(IViewSite viewSite) { - this.viewSite = viewSite; - this.shell = viewSite.getShell(); - } - - public void setViewer(CatchupReleaseViewer viewer) { - this.catchupReleaseViewer = viewer; - } - - /** - * Updates the status line. - */ - public void updateStatusLine() { - if (viewSite != null && !shell.isDisposed()) { - Runnable update = new Runnable() { - public void run() { - if (!shell.isDisposed()) { - IStatusLineManager statusLine = viewSite.getActionBars().getStatusLineManager(); - if (diffRoot == null) { - statusLine.setMessage(null); - statusLine.setErrorMessage(null); - return; - } - SyncSet set = getSyncSet(new StructuredSelection(diffRoot.getChildren())); - if (set.hasConflicts()) { - statusLine.setMessage(null); - statusLine.setErrorMessage(set.getStatusLineMessage()); - } else { - statusLine.setErrorMessage(null); - statusLine.setMessage(set.getStatusLineMessage()); - } - viewSite.getActionBars().updateActionBars(); - } - } - }; - // Post or run the update - if (shell.getDisplay() != Display.getCurrent()) { - shell.getDisplay().asyncExec(update); - } else { - update.run(); - } - } - } - - protected SyncSet getSyncSet(IStructuredSelection selection) { - return new SyncSet(selection); - } - public boolean saveIfNecessary() { - if (! isSaveNeeded()) return true; - - final boolean[] result = new boolean[] { false }; - getShell().getDisplay().syncExec(new Runnable() { - public void run() { - try { - result[0] = MessageDialog.openQuestion(getShell(), Policy.bind("SyncView.saveTitle"),//$NON-NLS-1$ - Policy.bind("SyncView.saveMessage"));//$NON-NLS-1$ - if (result[0]) { - ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - saveChanges(monitor); - } - }, new NullProgressMonitor()); - } - } catch (CoreException e) { - IStatus status = e.getStatus(); - ErrorDialog.openError(getShell(), status.getMessage(), Policy.bind("SyncView.errorSaving"), status);//$NON-NLS-1$ - result[0] = false; - } - } - }); - return result[0]; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncSet.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncSet.java deleted file mode 100644 index 55808a083..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncSet.java +++ /dev/null @@ -1,288 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; - -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.compare.structuremergeviewer.IDiffContainer; -import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.core.resources.IResource; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.team.core.sync.IRemoteSyncElement; -import org.eclipse.team.internal.ui.Policy; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * This class contains a set of resources that are slated to be - * synchronized. It performs various operations on the - * set in preparation for catchup/release. - */ -public class SyncSet { - private HashSet set; - - /** - * Creates a new sync set on the nodes in the given selection. - */ - public SyncSet(IStructuredSelection nodeSelection) { - this.set = new HashSet(nodeSelection.size() + 1); - collectNodes(nodeSelection); - } - - /** - * Collects all nodes to which this action will apply. This means - * all nodes in the selection, plus all their children. - */ - private void collectNodes(IStructuredSelection selection) { - Object[] nodes = selection.toArray(); - for (int i = 0; i < nodes.length; i++) { - recursivelyAdd((ITeamNode)nodes[i]); - } - } - - /** - * Adds all parent creations for the given node to the sync set. - */ - private void collectParentCreations(ITeamNode node) { - IDiffElement parent = node.getParent(); - if (parent != null && parent instanceof ITeamNode) { - if (parent.getKind() != IRemoteSyncElement.IN_SYNC) { - set.add(parent); - collectParentCreations((ITeamNode)parent); - } - } - } - - /** - * Returns all nodes in the set that have changes - */ - public ITeamNode[] getChangedNodes() { - ArrayList nodeList = new ArrayList(set.size()); - for (Iterator it = set.iterator(); it.hasNext();) { - ITeamNode node = (ITeamNode)it.next(); - int dir = node.getChangeDirection(); - // We assume changed nodes of the wrong type have been culled - // during set creation. - if (dir != Differencer.NO_CHANGE) { - nodeList.add(node); - } - } - ITeamNode[] nodes = new ITeamNode[nodeList.size()]; - nodeList.toArray(nodes); - return nodes; - } - - /** - * Returns the resources from all the nodes in this set. - */ - public IResource[] getResources() { - ITeamNode[] changed = getChangedNodes(); - IResource[] resources = new IResource[changed.length]; - for (int i = 0; i < changed.length; i++) { - resources[i] = changed[i].getResource(); - } - return resources; - } - - /** - * Returns a message for the status line describing this sync set. - */ - public String getStatusLineMessage() { - int incoming = 0; - int outgoing = 0; - int conflicts = 0; - for (Iterator it = set.iterator(); it.hasNext();) { - ITeamNode next = (ITeamNode)it.next(); - switch (next.getChangeDirection()) { - case IRemoteSyncElement.INCOMING: - incoming++; - break; - case IRemoteSyncElement.OUTGOING: - outgoing++; - break; - case IRemoteSyncElement.CONFLICTING: - conflicts++; - break; - } - } - StringBuffer result = new StringBuffer(); - - if (conflicts == 0) { - result.append(Policy.bind("SyncSet.noConflicts")); //$NON-NLS-1$ - } else { - result.append(Policy.bind("SyncSet.conflicts", new Object[] {Integer.toString(conflicts)} )); //$NON-NLS-1$ - } - if (incoming == 0) { - result.append(Policy.bind("SyncSet.noIncomings")); //$NON-NLS-1$ - } else { - result.append(Policy.bind("SyncSet.incomings", new Object[] {Integer.toString(incoming)} )); //$NON-NLS-1$ - } - if (outgoing == 0) { - result.append(Policy.bind("SyncSet.noOutgoings")); //$NON-NLS-1$ - } else { - result.append(Policy.bind("SyncSet.outgoings", new Object[] {Integer.toString(outgoing)} )); //$NON-NLS-1$ - } - return result.toString(); - } - - /** - * Returns true if there are any conflicting nodes in the set, and - * false otherwise. - */ - public boolean hasConflicts() { - for (Iterator it = set.iterator(); it.hasNext();) { - if (((ITeamNode)it.next()).getChangeDirection() == IRemoteSyncElement.CONFLICTING) { - return true; - } - } - return false; - } - - /** - * Returns true if this sync set has incoming changes. - * Note that conflicts are not considered to be incoming changes. - */ - public boolean hasIncomingChanges() { - for (Iterator it = set.iterator(); it.hasNext();) { - if (((ITeamNode)it.next()).getChangeDirection() == IRemoteSyncElement.INCOMING) { - return true; - } - } - return false; - } - - /** - * Returns true if this sync set has outgoing changes. - * Note that conflicts are not considered to be outgoing changes. - */ - public boolean hasOutgoingChanges() { - for (Iterator it = set.iterator(); it.hasNext();) { - if (((ITeamNode)it.next()).getChangeDirection() == IRemoteSyncElement.OUTGOING) { - return true; - } - } - return false; - } - - /** - * Returns true if this sync set has auto-mergeable conflicts. - */ - public boolean hasAutoMergeableConflicts() { - for (Iterator it = set.iterator(); it.hasNext();) { - ITeamNode node = (ITeamNode)it.next(); - if ((node.getKind() & IRemoteSyncElement.AUTOMERGE_CONFLICT) != 0) { - return true; - } - } - return false; - } - - /** - * Adds the given node, plus all its children, to the given set. - */ - private void recursivelyAdd(ITeamNode node) { - // Add the node and recurse - if (set.add(node)) { - if (node instanceof IDiffContainer) { - IDiffElement[] children = ((IDiffContainer)node).getChildren(); - for (int i = 0; i < children.length; i++) { - if (children[i] instanceof ITeamNode) { - recursivelyAdd((ITeamNode)children[i]); - } - } - } - // Add any created parents (can't release or load a - // resource creation without including new parents) - collectParentCreations(node); - } - } - - /** - * Removes all conflicting nodes from this set. - */ - public void removeConflictingNodes() { - for (Iterator it = set.iterator(); it.hasNext();) { - ITeamNode node = (ITeamNode)it.next(); - if (node.getChangeDirection() == IRemoteSyncElement.CONFLICTING) { - it.remove(); - } - } - } - /** - * Removes all outgoing nodes from this set. - */ - public void removeOutgoingNodes() { - for (Iterator it = set.iterator(); it.hasNext();) { - ITeamNode node = (ITeamNode)it.next(); - if (node.getChangeDirection() == IRemoteSyncElement.OUTGOING) { - it.remove(); - } - } - } - /** - * Removes all incoming nodes from this set. - */ - public void removeIncomingNodes() { - for (Iterator it = set.iterator(); it.hasNext();) { - ITeamNode node = (ITeamNode)it.next(); - if (node.getChangeDirection() == IRemoteSyncElement.INCOMING) { - it.remove(); - } - } - } - /** - * Removes all nodes from this set that are not auto-mergeable conflicts - */ - public void removeNonMergeableNodes() { - for (Iterator it = set.iterator(); it.hasNext();) { - ITeamNode node = (ITeamNode)it.next(); - if ((node.getKind() & IRemoteSyncElement.MANUAL_CONFLICT) != 0) { - it.remove(); - } else if (node.getChangeDirection() != ITeamNode.CONFLICTING) { - it.remove(); - } - } - } - - /** - * Removes all nodes that aren't applicable for the direction. - */ - public void removeNonApplicableNodes(int direction) { - for (Iterator it = set.iterator(); it.hasNext();) { - ITeamNode node = (ITeamNode)it.next(); - int nodeDirection = node.getKind() & IRemoteSyncElement.DIRECTION_MASK; - if (nodeDirection != IRemoteSyncElement.CONFLICTING) { - if (nodeDirection != direction) { - it.remove(); - } - } - } - } - - /** - * Remove the given node from the sync set - */ - public void remove(ITeamNode node) { - set.remove(node); - } - - protected HashSet getSyncSet() { - return set; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncView.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncView.java deleted file mode 100644 index 9cb9d34cb..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncView.java +++ /dev/null @@ -1,556 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.compare.IPropertyChangeNotifier; -import org.eclipse.compare.NavigationAction; -import org.eclipse.compare.structuremergeviewer.DiffNode; -import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.dialogs.ErrorDialog; -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.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.ui.IHelpContextIds; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.team.internal.ui.UIConstants; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IPartListener; -import org.eclipse.ui.ISaveablePart; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.part.IShowInSource; -import org.eclipse.ui.part.ShowInContext; -import org.eclipse.ui.part.ViewPart; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * This class provides a view for performing synchronizations - * between the local workspace and a repository. - */ -public class SyncView extends ViewPart implements ISaveablePart, IPropertyChangeListener { - public static final String VIEW_ID = "org.eclipse.team.ui.sync.SyncView"; //$NON-NLS-1$ - private SyncCompareInput input; - private Composite top; - - // The possible sync modes - public static final int SYNC_NONE = 0; - public static final int SYNC_INCOMING = 1; - public static final int SYNC_OUTGOING = 2; - public static final int SYNC_BOTH = 3; - public static final int SYNC_MERGE = 4; - public static final int SYNC_COMPARE = 5; - - // Titles cached for efficiency - private final String CATCHUP_TITLE = Policy.bind("SyncView.incomingModeTitle"); //$NON-NLS-1$ - private final String RELEASE_TITLE = Policy.bind("SyncView.outgoingModeTitle"); //$NON-NLS-1$ - private final String FREE_TITLE = Policy.bind("SyncView.freeModeTitle"); //$NON-NLS-1$ - - private int currentSyncMode = SYNC_NONE; - - private String viewTitle = ""; //$NON-NLS-1$ - - /** - * Action for toggling the sync mode. - */ - class SyncModeAction extends Action { - // The sync mode that this action enables - private int syncMode; - public SyncModeAction(String title, ImageDescriptor image, int mode) { - super(title, image); - this.syncMode = mode; - } - public void run() { - SyncView.this.setSyncMode(syncMode); - } - } - - private SyncModeAction incomingMode; - private SyncModeAction outgoingMode; - private SyncModeAction freeMode; - private NavigationAction next; - private NavigationAction previous; - - private class PartListener implements IPartListener { - public void partActivated(IWorkbenchPart part) { - } - public void partBroughtToTop(IWorkbenchPart part) { - } - public void partClosed(IWorkbenchPart part) { - } - public void partDeactivated(IWorkbenchPart part) { - if (part == SyncView.this && input != null) { - input.saveIfNecessary(); - } - } - public void partOpened(IWorkbenchPart part) { - } - } - - private IPartListener partListener; - - /** - * Creates a new view. - */ - public SyncView() { - super(); - } - - /* - * @see IWorkbenchPart#createPartControl - */ - public void createPartControl(Composite parent) { - top = new Composite(parent, SWT.NONE); - - //XXX Set the control data to be this part, so the compare - //frames that will eventually live in this widget hierarchy - //have some way to access the action bars for hooking global - //actions. See corresponding XXX comment in CompareEditor#findActionBars - top.setData(this); - - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - top.setLayout(layout); - top.setLayoutData(new GridData(GridData.FILL_BOTH)); - - showDefaultContents(); - - initializeSyncModes(); - // add part listener - partListener = new PartListener(); - getViewSite().getWorkbenchWindow().getPartService().addPartListener(partListener); - WorkbenchHelp.setHelp(top, IHelpContextIds.SYNC_VIEW); - } - - public void dispose() { - // remove part listener - if (partListener != null) { - getViewSite().getWorkbenchWindow().getPartService().removePartListener(partListener); - partListener = null; - } - - if (input instanceof IPropertyChangeNotifier) - ((IPropertyChangeNotifier)input).removePropertyChangeListener(this); - super.dispose(); - } - - /** - * Makes the sync view visible in the active page. If there isn't a sync - * view registered <code>null</code> is returned. Otherwise the opened view - * part is returned. - */ - public static SyncView findViewInActivePage(IWorkbenchPage activePage) { - try { - if (activePage == null) { - activePage = TeamUIPlugin.getActivePage(); - if (activePage == null) return null; - } - IViewPart part = activePage.findView(VIEW_ID); - if (part == null) - part = activePage.showView(VIEW_ID); - return (SyncView)part; - } catch (PartInitException pe) { - return null; - } - } - - /** - * Sets up the sync modes and the actions for switching between them. - */ - private void initializeSyncModes() { - // Create the actions - incomingMode = new SyncModeAction( - Policy.bind("SyncView.incomingModeAction"), //$NON-NLS-1$ - TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_CATCHUP_ENABLED), - SYNC_INCOMING); - incomingMode.setToolTipText(Policy.bind("SyncView.incomingModeToolTip")); //$NON-NLS-1$ - incomingMode.setChecked(false); - incomingMode.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_CATCHUP_DISABLED)); - incomingMode.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_CATCHUP)); - - outgoingMode = new SyncModeAction( - Policy.bind("SyncView.outgoingModeAction"), //$NON-NLS-1$ - TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_RELEASE_ENABLED), - SYNC_OUTGOING); - outgoingMode.setToolTipText(Policy.bind("SyncView.outgoingModeToolTip")); //$NON-NLS-1$ - outgoingMode.setChecked(false); - outgoingMode.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_RELEASE_DISABLED)); - outgoingMode.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_RELEASE)); - - freeMode = new SyncModeAction( - Policy.bind("SyncView.freeModeAction"), //$NON-NLS-1$ - TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_FREE_ENABLED), - SYNC_BOTH); - freeMode.setToolTipText(Policy.bind("SyncView.freeModeToolTip")); //$NON-NLS-1$ - freeMode.setChecked(false); - freeMode.setDisabledImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_FREE_DISABLED)); - freeMode.setHoverImageDescriptor(TeamImages.getImageDescriptor(UIConstants.IMG_SYNC_MODE_FREE)); - - // Set up global actions for next and previous - next = new NavigationAction(true); - previous = new NavigationAction(false); - IActionBars actionBars = getViewSite().getActionBars(); - if (actionBars != null) { - actionBars.setGlobalActionHandler(IWorkbenchActionConstants.NEXT, next); - actionBars.setGlobalActionHandler(IWorkbenchActionConstants.PREVIOUS, previous); - actionBars.updateActionBars(); - } - } - - private boolean isEmpty(DiffNode node) { - if (node == null) return true; - if (node.getKind() != 0) return false; - IDiffElement[] children = node.getChildren(); - for (int i = 0; i < children.length; i++) { - if (!isEmpty(children[i])) return false; - } - return true; - } - private boolean isEmpty(IDiffElement element) { - if (element.getKind() != 0) return false; - if (element instanceof DiffNode) { - IDiffElement[] children = ((DiffNode)element).getChildren(); - for (int i = 0; i < children.length; i++) { - if (!isEmpty(children[i])) return false; - } - } - return true; - } - - /** - * Runs an operation and handles progress and exceptions. Returns true - * if the operation was successful, and false if there were errors or - * the user canceled. - */ - private boolean run(IRunnableWithProgress op) { - ProgressMonitorDialog dialog = new ProgressMonitorDialog(getSite().getShell()); - try { - dialog.run(true, true, op); - return true; - } catch (InvocationTargetException e) { - Throwable throwable = e.getTargetException(); - IStatus error = null; - if (throwable instanceof TeamException) { - error = ((TeamException)throwable).getStatus(); - } else if (throwable instanceof CoreException) { - error = ((CoreException)throwable).getStatus(); - } else { - error = new Status(IStatus.ERROR, TeamUIPlugin.ID, 1, Policy.bind("simpleInternal"), throwable); //$NON-NLS-1$ - } - ErrorDialog.openError(getSite().getShell(), Policy.bind("SyncView.unableSynchronize"), null, error); //$NON-NLS-1$ - TeamUIPlugin.log(error); - } catch (InterruptedException e) { - } - return false; - } - - /** - * Asks the part to take focus within the workbench. - */ - public void setFocus() { - if (top != null && !top.isDisposed()) { - top.setFocus(); - } - } - - /** - * Activates the given sync mode. - */ - void setSyncMode(int mode) { - // Implement radio button behaviour - switch (mode) { - case SYNC_INCOMING: - incomingMode.setChecked(true); - outgoingMode.setChecked(false); - freeMode.setChecked(false); - setTitleWithDirtyIndicator(CATCHUP_TITLE); - break; - case SYNC_OUTGOING: - outgoingMode.setChecked(true); - incomingMode.setChecked(false); - freeMode.setChecked(false); - setTitleWithDirtyIndicator(RELEASE_TITLE); - break; - case SYNC_BOTH: - freeMode.setChecked(true); - outgoingMode.setChecked(false); - incomingMode.setChecked(false); - setTitleWithDirtyIndicator(FREE_TITLE); - break; - } - // Only update actions if there is valid input - if (input != null && input.getDiffRoot() != null && mode != currentSyncMode) { - currentSyncMode = mode; - input.getViewer().syncModeChanged(mode); - updateActions(); - } - } - - /** - * Shows default contents for the view if there is nothing to synchronize. - */ - private void showDefaultContents() { - Label label = new Label(top, SWT.WRAP); - label.setLayoutData(new GridData(GridData.FILL_BOTH)); - label.setText(Policy.bind("SyncView.text")); //$NON-NLS-1$ - } - - /** - * Shows synchronization information for the given resources in the sync view. - * @deprecated - */ - public void showSync(SyncCompareInput input) { - showSync(input, null); - } - - /** - * Shows synchronization information for the given resources in the sync - * view. - * @param input the diff tree to be displayed - * @param page the page on which to open the sync view - */ - public void showSync(SyncCompareInput input, IWorkbenchPage page) { - next.setCompareEditorInput(input); - previous.setCompareEditorInput(input); - IActionBars actionBars = getViewSite().getActionBars(); - actionBars.updateActionBars(); - - input.setViewSite(getViewSite()); - this.input = input; - currentSyncMode = SYNC_NONE; - - // listen to property notifications from our input, this - // is to support global save enablement. - if (input instanceof IPropertyChangeNotifier) - ((IPropertyChangeNotifier)input).addPropertyChangeListener(this); - - // Remove old viewer - Control[] oldChildren = top.getChildren(); - if (oldChildren != null) { - for (int i = 0; i < oldChildren.length; i++) { - oldChildren[i].dispose(); - } - } - // Remove actions from toolbar - IActionBars bars = getViewSite().getActionBars(); - bars.getToolBarManager().removeAll(); - bars.getToolBarManager().update(false); - bars.getMenuManager().removeAll(); - bars.getMenuManager().update(); - bars.updateActionBars(); - - // Display the default contents while running the diff - showDefaultContents(); - top.layout(); - - // Run the diff and stop if cancel or error occurred. - if (!run(input)) return; - - // Check for problem message - if (input.getMessage() != null) { - MessageDialog.openInformation(getSite().getShell(), Policy.bind("SyncView.unableSynchronize"), input.getMessage()); //$NON-NLS-1$ - return; - } - - // Check for empty comparison - if (isEmpty(input.getDiffRoot())) { - MessageDialog.openInformation(getSite().getShell(), Policy.bind("nothingToSynchronize"), Policy.bind("SyncView.same")); //$NON-NLS-1$ //$NON-NLS-2$ - return; - } - - // Remove the default contents - oldChildren = top.getChildren(); - if (oldChildren != null) { - for (int i = 0; i < oldChildren.length; i++) { - oldChildren[i].dispose(); - } - } - - // Show the result - Control control = input.createContents(top); - control.setLayoutData(new GridData(GridData.FILL_BOTH)); - /*TreeViewer viewer = input.getViewer(); - if (viewer != null) { - Control viewerControl = viewer.getControl(); - if (viewerControl != null && !viewerControl.isDisposed()) { - WorkbenchHelp.setHelp(viewerControl, new ViewContextComputer(this, ITeamHelpContextIds.SYNC_VIEW)); - } - }*/ - - top.layout(); - - // Set the sync mode depending on user preference - if (TeamUIPlugin.getPlugin().getPreferenceStore().getBoolean(UIConstants.PREF_ALWAYS_IN_INCOMING_OUTGOING)) { - freeMode.run(); - } else { - if (input.hasIncomingChanges()) { - incomingMode.run(); - } else { - outgoingMode.run(); - } - } - // Reveal if fast view - try { - if (page == null) page = TeamUIPlugin.getActivePage(); - if (page != null) page.showView(VIEW_ID); - } catch (PartInitException e) { - TeamUIPlugin.log(e.getStatus()); - } - } - - /** - * Updates the actions for this view's action bar. - */ - private void updateActions() { - IActionBars bars = getViewSite().getActionBars(); - IToolBarManager toolBar = bars.getToolBarManager(); - IMenuManager menu = bars.getMenuManager(); - toolBar.removeAll(); - menu.removeAll(); - - toolBar.add(incomingMode); - toolBar.add(outgoingMode); - toolBar.add(freeMode); - input.getViewer().contributeToActionBars(bars); - - toolBar.update(false); - menu.update(false); - bars.updateActionBars(); - } - - /** - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class key) { - if (key == IShowInSource.class) { - return new IShowInSource() { - public ShowInContext getShowInContext() { - if (input == null || input.getViewer() == null) return null; - return new ShowInContext(null, input.getViewer().getSelection()); - } - }; - } - return super.getAdapter(key); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) - */ - public void doSave(IProgressMonitor monitor) { - - 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(monitor); - - firePropertyChange(PROP_DIRTY); - - } catch (InterruptedException x) { - } catch (OperationCanceledException x) { - } catch (InvocationTargetException x) { - String reason= x.getTargetException().getMessage(); - ErrorDialog.openError(getSite().getShell(), Policy.bind("SyncView.cantSaveError", reason), null, null); //$NON-NLS-1$ - } - } - - /* (non-Javadoc) - * @see org.eclipse.ui.ISaveablePart#doSaveAs() - */ - public void doSaveAs() { - } - - /* (non-Javadoc) - * @see org.eclipse.ui.ISaveablePart#isDirty() - */ - public boolean isDirty() { - if (input instanceof CompareEditorInput) - return ((CompareEditorInput)input).isSaveNeeded(); - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() - */ - public boolean isSaveAsAllowed() { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.ISaveablePart#isSaveOnCloseNeeded() - */ - public boolean isSaveOnCloseNeeded() { - return true; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - if (isDirty()) { - firePropertyChange(PROP_DIRTY); - } - setTitleWithDirtyIndicator(null); - } - - private void setTitleWithDirtyIndicator(String title) { - if(title != null) { - viewTitle = title; - } - if(isDirty()) { - setTitle(Policy.bind("SyncView.dirtyIndicatorInTitle", viewTitle)); //$NON-NLS-1$ - } else { - setTitle(viewTitle); - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/TeamFile.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/TeamFile.java deleted file mode 100644 index f9ec2fc2a..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/TeamFile.java +++ /dev/null @@ -1,393 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.compare.CompareUI; -import org.eclipse.compare.ITypedElement; -import org.eclipse.compare.structuremergeviewer.DiffElement; -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.compare.structuremergeviewer.ICompareInput; -import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener; -import org.eclipse.compare.structuremergeviewer.IDiffContainer; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.util.ListenerList; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.sync.IRemoteSyncElement; -import org.eclipse.team.internal.core.TeamPlugin; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * A sync node for a version-controlled file, where the left - * side is the local file, the right side is the remote file, - * and the ancestor is the common file. - */ -public class TeamFile extends DiffElement implements ICompareInput, ITeamNode, IAdaptable { - - private MergeResource mergeResource; - - private Shell shell; - private ListenerList listeners; - - private TypedBufferedContent localByteContents; - private TypedBufferedContent commonByteContents; - private TypedBufferedContent remoteByteContents; - - boolean hasBeenSaved = false; - - private IProgressMonitor monitor; - - /** - * Creates a new file node. - */ - public TeamFile(IDiffContainer parent, MergeResource res, int changeType, Shell shell) { - super(parent, changeType); - Assert.isNotNull(res); - this.mergeResource = res; - this.shell = shell; - - commonByteContents = new TypedBufferedContent(this, false) { - public InputStream createStream() throws CoreException { - return mergeResource.getBaseRevision(); - } - }; - remoteByteContents = new TypedBufferedContent(this, false) { - protected InputStream createStream() throws CoreException { - return mergeResource.getLatestRevision(); - } - }; - - if(getResource().exists()) { - localByteContents = getLocalTypedContent(); - } else { - localByteContents = null; - } - } - - public void addCompareInputChangeListener(ICompareInputChangeListener l) { - if (listeners == null) { - listeners = new ListenerList(); - } - listeners.add(l); - } - - /* - * @see ICompareInput#copy(boolean) - */ - public void copy(boolean leftToRight) { - if (leftToRight) return; - ITypedElement right = getRight(); - ITypedElement left = getLeft(); - try { - if (left == null) { - // Addition - saveChanges(new ByteArrayInputStream(new byte[0])); - localByteContents = getLocalTypedContent(); - } else { - // deletion - saveChanges(null); - localByteContents = null; - } - } catch(CoreException e) { - TeamPlugin.log(e.getStatus()); - } - } - - public boolean equals(Object other) { - if (other != null && other.getClass() == getClass()) { - TeamFile file = (TeamFile) other; - return mergeResource.equals(file.mergeResource); - } - return super.equals(other); - } - - /* - * @see ICompareInput#getAncestor - */ - public ITypedElement getAncestor() { - if (mergeResource.hasBaseRevision()) { - return commonByteContents; - } - return null; - } - - /* - * Method declared on ITeamNode. - */ - public int getChangeDirection() { - return getKind() & Differencer.DIRECTION_MASK; - } - - /* - * @see ITeamNode#getChangeType() - */ - public int getChangeType() { - return getKind() & Differencer.CHANGE_TYPE_MASK; - } - - /* - * @see ITypedInput#getType - */ - public Image getImage() { - return CompareUI.getImage(getType()); - } - - /* - * @see ICompareInput#getLeft - */ - public ITypedElement getLeft() { - return localByteContents; - } - - /* - * @see ITypedInput#getName - */ - public String getName() { - if(hasBeenSaved) { - return Policy.bind("TeamFile.modified", mergeResource.getName()); //$NON-NLS-1$ - } else { - return mergeResource.getName(); - } - } - - /* - * @see ICompareInput#getRight - */ - public ITypedElement getRight() { - if (mergeResource.hasLatestRevision()) { - return remoteByteContents; - } else { - return null; - } - } - - /* - * @see ITypedInput#getType - */ - public String getType() { - return mergeResource.getExtension(); - } - - /* - * @see ICompareInput#removeCompareInputChangeListener(ICompareInputChangeListener) - */ - public void removeCompareInputChangeListener(ICompareInputChangeListener listener) { - if (listeners != null) { - listeners.remove(listener); - } - } - - /* - * @see Object - */ - public int hashCode() { - return mergeResource.hashCode(); - } - - /** - * Returns the team resource managed by this object. - * Guaranteed to be non-null. - */ - public MergeResource getMergeResource() { - return mergeResource; - } - - /** - * Returns the core resource managed by this object. - * Guaranteed to be non-null. - */ - public IResource getResource() { - return mergeResource.getResource(); - } - - /** - * For debugging purposes only. - */ - public String toString() { - return "TeamFile(" + mergeResource.getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - protected TypedBufferedContent getLocalTypedContent() { - // don't allow editing of outgoing deletion content. To revert from the deletion the - // user should use the appropriate sync view action. - boolean outgoingDeletion = getChangeDirection() == IRemoteSyncElement.OUTGOING && getChangeType() == IRemoteSyncElement.DELETION; - final String name = getName(); - return new TypedBufferedContent(this, !outgoingDeletion) { - protected InputStream createStream() throws CoreException { - return mergeResource.getLocalStream(); - } - public void setContent(byte[] contents) { - try { - if(contents==null) { - saveChanges(new ByteArrayInputStream(new byte[0])); - } else { - saveChanges(new ByteArrayInputStream(contents)); - } - } catch(CoreException e) { - ErrorDialog.openError(TeamUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow().getShell(), Policy.bind("TeamFile.saveChanges", name), null, e.getStatus()); //$NON-NLS-1$ - } - Display.getDefault().syncExec(new Runnable() { - public void run() { - fireContentChanged(); - } - }); - } - public ITypedElement replace(ITypedElement child, ITypedElement other) { - return null; - } - }; - } - - /** - * The local resource has beed modified (i.e. merged). - */ - public void merged() { - // calculate the new sync state based on the type of change that was merged. This - // logic cannot be in the IRemoteSyncElement because there is no way to update the - // base before calling getSyncKind() again. - if(getChangeDirection()==INCOMING) { - switch(getChangeType()) { - case Differencer.ADDITION: - case Differencer.CHANGE: - setKind(OUTGOING | Differencer.CHANGE); - break; - case Differencer.DELETION: - setKind(CONFLICTING | Differencer.CHANGE); - } - } else { - setKind(OUTGOING | (getKind() & Differencer.CHANGE_TYPE_MASK)); - } - hasBeenSaved = false; - } - - public void setProgressMonitor(IProgressMonitor monitor) { - this.monitor = monitor; - } - - private void saveChanges(final InputStream is) throws CoreException { - run(new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - IFile file = (IFile) getResource(); - if (is != null) { - if (!file.exists()) { - createParents(getParent(), getResource().getParent()); - file.create(is, false, monitor); - } else { - file.setContents(is, false, true, monitor); - } - } else { - file.delete(false, true, monitor); - deleteParents(getParent(), getResource().getParent()); - } - hasBeenSaved = true; - - // update the UI with the sync state change. - fireThreeWayInputChange(); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } - } - }); - } - - private void createParents(IDiffContainer parentNode, IContainer parentFolder) throws CoreException { - if(!parentFolder.exists() && parentFolder.getType() != IResource.PROJECT) { - createParents(parentNode.getParent(), parentFolder.getParent()); - ((IFolder)parentFolder).create(false /* force */, true, null); - if(parentNode instanceof ChangedTeamContainer) { - ((ChangedTeamContainer)parentNode).setKind(IRemoteSyncElement.IN_SYNC); - } - } - } - - private void deleteParents(IDiffContainer parentNode, IContainer parentFolder) throws CoreException { - if(parentFolder.members().length == 0 && parentFolder.getType() != IResource.PROJECT) { - IContainer parent = parentFolder.getParent(); - parentFolder.delete(false, null); - if(parentNode instanceof ChangedTeamContainer) { - ((ChangedTeamContainer)parentNode).setKind(IRemoteSyncElement.IN_SYNC); - } - deleteParents(parentNode.getParent(), parent); - } - } - - private void run(IRunnableWithProgress runnable) throws CoreException { - try { - if(monitor == null) { - new ProgressMonitorDialog(shell).run(false, false, runnable); - } else { - runnable.run(monitor); - } - } catch (InvocationTargetException e) { - if (e.getTargetException() instanceof CoreException) { - throw (CoreException)e.getTargetException(); - } else { - throw new CoreException(new Status(IStatus.ERROR, TeamUIPlugin.ID, 0, Policy.bind("simpleInternal"), e.getTargetException())); //$NON-NLS-1$ - } - } catch (InterruptedException e) { - // Ignore - } - } - - private void fireThreeWayInputChange() { - Display.getDefault().syncExec(new Runnable() { - public void run() { - if (listeners != null) { - Object[] listenerArray = listeners.getListeners(); - // Iterate backwards so that the model gets updated last - // it might want to remove the node completely, which might - // upset other listeners. - for (int i = listenerArray.length; --i >= 0;) - ((ICompareInputChangeListener) listenerArray[i]).compareInputChanged(TeamFile.this); - } - } - }); - } - - public boolean hasBeenSaved() { - return hasBeenSaved; - } - - /** - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class adapter) { - if (adapter == IResource.class) - return mergeResource.getResource(); - return null; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/TypedBufferedContent.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/TypedBufferedContent.java deleted file mode 100644 index f891b81b0..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/TypedBufferedContent.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import org.eclipse.compare.BufferedContent; -import org.eclipse.compare.IEditableContent; -import org.eclipse.compare.ITypedElement; -import org.eclipse.swt.graphics.Image; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * A content buffer for resources on a server. - */ -abstract class TypedBufferedContent extends BufferedContent implements ITypedElement, IEditableContent { - private ITeamNode node; - private boolean editable; - - /** - * Creates a new content buffer for the given team node. - */ - TypedBufferedContent(ITeamNode node, boolean editable) { - this.node = node; - this.editable = editable; - } - - public Image getImage() { - return node.getImage(); - } - - public String getName() { - return node.getName(); - } - - public String getType() { - return node.getType(); - } - - /** - * Returns true if this object can be modified. - * If it returns <code>false</code> the other methods must not be called. - * - * @return <code>true</code> if this object can be modified. - */ - public boolean isEditable() { - return editable; - } - - /** - * This is not the definitive API! - * This method is called on a parent to - * - add a child, - * - remove a child, - * - copy the contents of a child - * - * What to do is encoded in the two arguments as follows: - * add: child == null other != null - * remove: child != null other == null - * copy: child != null other != null - */ - public ITypedElement replace(ITypedElement child, ITypedElement other) { - return null; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/UnchangedTeamContainer.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/UnchangedTeamContainer.java deleted file mode 100644 index 3b6a7a8de..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/UnchangedTeamContainer.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.sync; - - -import org.eclipse.compare.CompareUI; -import org.eclipse.compare.ITypedElement; -import org.eclipse.compare.ResourceNode; -import org.eclipse.compare.structuremergeviewer.DiffNode; -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.compare.structuremergeviewer.IDiffContainer; -import org.eclipse.core.resources.IResource; -import org.eclipse.swt.graphics.Image; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under - * development and expected to change significantly before reaching stability. - * It is being made available at this early stage to solicit feedback from pioneering - * adopters on the understanding that any code that uses this API will almost - * certainly be broken (repeatedly) as the API evolves. - * - * A node in a diff tree that represents a folder with no changes - * to itself, it is only a placeholder for changes in its children. - */ -public class UnchangedTeamContainer extends DiffNode implements ITeamNode { - private IResource resource; - - public UnchangedTeamContainer(IDiffContainer parent, IResource resource) { - this(parent, resource, Differencer.NO_CHANGE); - } - - public UnchangedTeamContainer(IDiffContainer parent, IResource resource, int description) { - super(parent, description); - setLeft(new ResourceNode(resource)); - this.resource = resource; - } - - /* - * Method declared on ITeamNode - */ - public int getChangeDirection() { - return ITeamNode.NO_CHANGE; - } - - /* - * @see ITeamNode#getChangeType() - */ - public int getChangeType() { - return ITeamNode.NO_CHANGE; - } - - public Image getImage() { - return CompareUI.getImage(getType()); - } - - public String getName() { - return resource.getName(); - } - - /** - * Returns the resource underlying this diff node. - */ - public IResource getResource() { - return resource; - } - - public String getType() { - return ITypedElement.FOLDER_TYPE; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/AuthenticatedTargetSitePropertiesPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/AuthenticatedTargetSitePropertiesPage.java deleted file mode 100644 index 1214b376c..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/AuthenticatedTargetSitePropertiesPage.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.AuthenticatedSite; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.ui.dialogs.PropertyPage; - -public class AuthenticatedTargetSitePropertiesPage extends PropertyPage { - public static final int WIDTH_HINT = 250; - - private Site site; - private Text nameText, passwordText; - - /** - * Initializes the page - */ - private void initialize() { - IAdaptable element = getElement(); - if (element instanceof SiteElement) { - site = ((SiteElement)element).getSite(); - } else { - SiteElement adapter = (SiteElement)element.getAdapter(SiteElement.class); - if (adapter != null) { - site = adapter.getSite(); - } - } - } - - /** - * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite) - */ - protected Control createContents(Composite parent) { - initialize(); - Composite container = new Composite(parent, SWT.NONE); - container.setLayout(new GridLayout(2, false)); - - Label serverLabel = new Label(container, SWT.NONE); - serverLabel.setText(Policy.bind("AuthenticatedTargetSitePropertiesPage.Server")); //$NON-NLS-1$ - serverLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); - Label serverText = new Label(container, SWT.NONE); - serverText.setText(site.getURL().getHost()); - GridData data = new GridData(); - data.widthHint = WIDTH_HINT; - serverText.setLayoutData(data); - - Label nameLabel = new Label(container, SWT.NONE); - nameLabel.setText(Policy.bind("AuthenticatedTargetSitePropertiesPage.User")); //$NON-NLS-1$ - nameLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); - nameText = new Text(container, SWT.SINGLE | SWT.BORDER); - data = new GridData(); - data.widthHint = WIDTH_HINT; - nameText.setLayoutData(data); - String name=((AuthenticatedSite)site).getUsername(); - if (name!=null) nameText.setText(name); - - Label passwordLabel = new Label(container, SWT.NONE); - passwordLabel.setText(Policy.bind("AuthenticatedTargetSitePropertiesPage.Password")); //$NON-NLS-1$ - passwordLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); - passwordText = new Text(container, SWT.SINGLE | SWT.BORDER); - passwordText.setEchoChar('*'); - passwordText.setText(""); //$NON-NLS-1$ - data = new GridData(); - data.widthHint = WIDTH_HINT; - passwordText.setLayoutData(data); - - return container; - } - - /** - * @see org.eclipse.jface.preference.IPreferencePage#performOk() - */ - public boolean performOk() { - String name = nameText.getText(); - String password = passwordText.getText(); - try { - if (name!=null && name.length()>0) ((AuthenticatedSite)site).setUsername(name); - if (password!=null && password.length()>0) ((AuthenticatedSite)site).setPassword(password); - return true; - } catch (TeamException e) { - ErrorDialog.openError(getShell(), Policy.bind("AuthenticatedTargetSitePropertiesPage.Error"), null, e.getStatus()); //$NON-NLS-1$ - return false; - } - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java deleted file mode 100644 index 08b5ad7c6..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java +++ /dev/null @@ -1,400 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IPluginRegistry; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.wizard.IWizardContainer; -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.ConfigurationWizardElement; -import org.eclipse.team.internal.ui.ConfigureProjectWizardMainPage; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.team.internal.ui.UIConstants; -import org.eclipse.team.ui.IConfigurationWizard; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.internal.model.AdaptableList; - -public class ConfigureTargetWizard extends Wizard implements IConfigurationWizard { - protected IWorkbench workbench; - protected IProject project; - protected IConfigurationWizard wizard; - - protected ConfigureProjectWizardMainPage mainPage; - protected static MappingSelectionPage mappingPage; - - private String pluginId = UIConstants.PLUGIN_ID; - - protected final static String TAG_WIZARD = "wizard"; //$NON-NLS-1$ - protected final static String TAG_DESCRIPTION = "description"; //$NON-NLS-1$ - protected final static String ATT_NAME = "name"; //$NON-NLS-1$ - protected final static String ATT_CLASS = "class"; //$NON-NLS-1$ - protected final static String ATT_ICON = "icon"; //$NON-NLS-1$ - protected final static String ATT_ID = "id"; //$NON-NLS-1$ - - public ConfigureTargetWizard() { - setNeedsProgressMonitor(true); - setWindowTitle(getWizardWindowTitle()); //$NON-NLS-1$ - } - - public static final String MAPPING_PAGE_NAME = "mapping-page"; //$NON-NLS-1$ - - protected SiteSelectionPage siteSelectionPage = null; - /** - * @see ConfigureProjectWizard#getExtensionPoint() - */ - protected String getExtensionPoint() { - return UIConstants.PT_TARGETCONFIG; - } - - /** - * @see ConfigureProjectWizard#getWizardDescription() - */ - protected String getWizardDescription() { - return Policy.bind("TargetSiteCreationWizard.description"); //$NON-NLS-1$ - } - - /** - * @see ConfigureProjectWizard#getWizardLabel() - */ - protected String getWizardLabel() { - return Policy.bind("TargetSiteCreationWizard.label"); //$NON-NLS-1$ - } - - /** - * @see ConfigureProjectWizard#getWizardWindowTitle() - */ - protected String getWizardWindowTitle() { - if(project != null) { - return Policy.bind("TargetSiteCreationWizard.windowTitleProject"); //$NON-NLS-1$ - } else { - return Policy.bind("TargetSiteCreationWizard.windowTitleNoProject"); //$NON-NLS-1$ - } - } - - /* - * @see Wizard#addPages - */ - public void addPages() { - Site[] sites = TargetManager.getSites(); - AdaptableList wizards = getAvailableWizards(); - - if(sites.length > 0 && project != null) { - TargetProvider provider = null; - try { - provider = TargetManager.getProvider(project); - } catch (TeamException e) { - TeamUIPlugin.log(e.getStatus()); - } - siteSelectionPage = new SiteSelectionPage("site-selection-page", Policy.bind("TargetSiteCreationWizard.siteSelectionPage"), TeamImages.getImageDescriptor(UIConstants.IMG_WIZBAN_SHARE), provider); //$NON-NLS-1$ //$NON-NLS-2$ - addPage(siteSelectionPage); - } - - if(project != null) { - mappingPage = new MappingSelectionPage(ConfigureTargetWizard.MAPPING_PAGE_NAME, Policy.bind("MappingSelectionPage.mappingTitle"), TeamImages.getImageDescriptor(UIConstants.IMG_WIZBAN_SHARE)); //$NON-NLS-1$ - mappingPage.setWizard(this); - } - - try { - if(wizards.size() == 1) { - ConfigurationWizardElement element = (ConfigurationWizardElement)wizards.getChildren()[0]; - this.wizard = (IConfigurationWizard)element.createExecutableExtension(); - wizard.init(workbench, project); - wizard.addPages(); - if (wizard.getPageCount() > 0) { - wizard.setContainer(getContainer()); - IWizardPage[] pages = wizard.getPages(); - for (int i = 0; i < pages.length; i++) { - addPage(pages[i]); - } - } - } else { - mainPage = new ConfigureProjectWizardMainPage("target-selection-page", getWizardLabel(), TeamImages.getImageDescriptor(UIConstants.IMG_WIZBAN_SHARE), wizards, Policy.bind("ConfigureProjectWizardMainPage.selectTarget")); //$NON-NLS-1$ //$NON-NLS-2$ - mainPage.setDescription(getWizardDescription()); - mainPage.setProject(project); - mainPage.setWorkbench(workbench); - addPage(mainPage); - } - } catch (CoreException e) { - TeamUIPlugin.log(e.getStatus()); - return; - } - } - - public IWizardPage getNextPage(IWizardPage page) { - if(page == siteSelectionPage) { - if(siteSelectionPage.isDisconnect()) { - return null; - } - if(siteSelectionPage.getSite() != null) { - mappingPage.setSite(siteSelectionPage.getSite()); - mappingPage.setPreviousPage(page); - return mappingPage; - } else if(mainPage != null) { - return mainPage; - } else if(wizard != null) { - return wizard.getStartingPage(); - } - } - if(wizard != null) { - return wizard.getNextPage(page); - } - return super.getNextPage(page); - } - - public static MappingSelectionPage getMappingPage() { - return mappingPage; - } - - public boolean canFinish() { - // If we are on the first page, never allow finish unless the selected wizard has no pages. - IWizardPage currentPage = getContainer().getCurrentPage(); - if (currentPage == mainPage) { - if (mainPage.getSelectedWizard() != null && mainPage.getNextPage() == null) { - return true; - } - return false; - } else if(currentPage == siteSelectionPage) { - if(siteSelectionPage.getSite() != null || siteSelectionPage.isDisconnect()) { - return true; - } else { - return false; - } - } - - MappingSelectionPage mappingPage = getMappingPage(); - if(mappingPage != null && currentPage == mappingPage) { - return mappingPage.isPageComplete(); - } - if(wizard != null) { - return wizard.canFinish(); - } - return super.canFinish(); - } - - /* - * @see Wizard#performFinish - */ - public boolean performFinish() { - // handles finish on site selection page and on mapping page - IWizardPage currentPage = getContainer().getCurrentPage(); - if(currentPage == siteSelectionPage || currentPage == getMappingPage()) { - Site site; - if(currentPage == siteSelectionPage) { - // if the user selected the disconnect option then disconnect - // this project from the target - if(siteSelectionPage.isDisconnect()) { - try { - TargetManager.unmap(project); - } catch (TeamException e) { - ErrorDialog.openError(getShell(), Policy.bind("Error"), Policy.bind("ConfigureTargetWizard.errorUnmappingProject"), e.getStatus()); //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } - return true; - } - site = siteSelectionPage.getSite(); - } else { - site = getMappingPage().getSite(); - } - // a site has been selected on either the site selection page or the - // mapping page. Use this site information to map the project to the - // target. - IPath path = Path.EMPTY; - if(getMappingPage() != null) { - path = getMappingPage().getMapping(); - } - if(! setMapping(getContainer(), project, site, path)) - return false; //mapping failed so fail finish - } - - // allow target wizard to finish - if (wizard != null) { - return wizard.performFinish(); - } - return true; - } - - public static boolean setMapping(IWizardContainer container, IProject project, Site site, IPath path) { - if(validateSite(site, container)) { - if(TargetManager.getSite(site.getType(), site.getURL()) == null) { - TargetManager.addSite(site); - } - try { - TargetProvider provider = TargetManager.getProvider(project); - if(provider != null) { - if(!provider.getSite().equals(site) && !MessageDialog.openQuestion(container.getShell(), - Policy.bind("ConfigureTargetWizardQuestion_2"), //$NON-NLS-1$ - Policy.bind("ConfigureTargetWizard.alreadyMapped", project.getName(), provider.getURL().toExternalForm()))) { //$NON-NLS-1$ - return false; - } - TargetManager.unmap(project); - } - TargetManager.map(project, site, path); - return true; - } catch (TeamException e) { - ErrorDialog.openError(container.getShell(), Policy.bind("ConfigureTargetWizardError_6"), Policy.bind("ConfigureTargetWizardError_mapping_the_project_with_this_site_7"), e.getStatus()); //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } - } else { - return false; - } - } - - public static boolean validateSite(final Site site, final IWizardContainer container) { - final boolean[] valid = new boolean[] {true}; - final String[] message = new String[] {Policy.bind("ConfigureTargetWizardURL_doesn__t_exist_on_the_server_8")}; //$NON-NLS-1$ - final int[] code = new int[] {-1}; - try { - container.run(true, false, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) - throws InvocationTargetException, InterruptedException { - try { - monitor.beginTask(Policy.bind("ConfigureTargetWizardValidating_connection_to_Site..._9"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$ - IRemoteTargetResource remote = site.getRemoteResource(); - valid[0] = remote.canBeReached(monitor); - } catch(TeamException e) { - message[0] = e.getStatus().getMessage(); - code[0] = e.getStatus().getCode(); - valid[0] = false; - } finally { - monitor.done(); - } - } - }); - } catch (InvocationTargetException e) { - valid[0] = false; - message[0] = e.getTargetException().getMessage(); - } catch (InterruptedException e) { - return false; - } - if(! valid[0]) { - if(! MessageDialog.openQuestion(container.getShell(), - Policy.bind("ConfigureTargetWizardConnection_Error_10"), //$NON-NLS-1$ - Policy.bind("ConfigureTargetWizard.errorOccurred", new Object[] {site.getURL().toExternalForm(), new Integer(code[0]), message[0]}))) { //$NON-NLS-1$ - return false; - } - } - return true; - } - - /** - * Returns the configuration wizards that are available for invocation. - * - * @return the available wizards - */ - protected AdaptableList getAvailableWizards() { - AdaptableList result = new AdaptableList(); - IPluginRegistry registry = Platform.getPluginRegistry(); - IExtensionPoint point = registry.getExtensionPoint(pluginId, getExtensionPoint()); - if (point != null) { - IExtension[] extensions = point.getExtensions(); - for (int i = 0; i < extensions.length; i++) { - IConfigurationElement[] elements = extensions[i].getConfigurationElements(); - for (int j = 0; j < elements.length; j++) { - IConfigurationElement element = elements[j]; - if (element.getName().equals(TAG_WIZARD)) { - ConfigurationWizardElement wizard = createWizardElement(element); - if (wizard != null) { - result.add(wizard); - } - } - } - } - } - - return result; - } - /** - * Returns a new ConfigurationWizardElement configured according to the parameters - * contained in the passed Registry. - * - * May answer null if there was not enough information in the Extension to create - * an adequate wizard - * - * @param element the element for which to create a wizard element - * @return the wizard element for the given element - */ - protected ConfigurationWizardElement createWizardElement(IConfigurationElement element) { - // WizardElements must have a name attribute - String nameString = element.getAttribute(ATT_NAME); - if (nameString == null) { - // Missing attribute - return null; - } - ConfigurationWizardElement result = new ConfigurationWizardElement(nameString); - if (initializeWizard(result, element)) { - // initialization was successful - return result; - } - return null; - } - /** - * Initialize the passed element's properties based on the contents of - * the passed registry. Answer a boolean indicating whether the element - * was able to be adequately initialized. - * - * @param element the element to initialize the properties for - * @param extension the registry to get properties from - * @return whether initialization was successful - */ - protected boolean initializeWizard(ConfigurationWizardElement element, IConfigurationElement config) { - element.setID(config.getAttribute(ATT_ID)); - String description = ""; //$NON-NLS-1$ - IConfigurationElement [] children = config.getChildren(TAG_DESCRIPTION); - if (children.length >= 1) { - description = children[0].getValue(); - } - - element.setDescription(description); - - // apply CLASS and ICON properties - element.setConfigurationElement(config); - String iconName = config.getAttribute(ATT_ICON); - if (iconName != null) { - IExtension extension = config.getDeclaringExtension(); - element.setImageDescriptor(TeamImages.getImageDescriptorFromExtension(extension, iconName)); - } - // ensure that a class was specified - if (element.getConfigurationElement() == null) { - // Missing attribute - return false; - } - setForcePreviousAndNextButtons(true); - return true; - } - /* - * Method declared on IConfigurationWizard - */ - public void init(IWorkbench workbench, IProject project) { - this.workbench = workbench; - this.project = project; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/CreateNewFolderAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/CreateNewFolderAction.java deleted file mode 100644 index 92a9334d4..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/CreateNewFolderAction.java +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; - -/** - * Action to create a new remote folder. - */ -public class CreateNewFolderAction extends TargetAction { - - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() throws TeamException { - return getSelectedRemoteFolders().length == 1; - } - - /** - * @see IActionDelegate#run(IAction) - */ - public void run(IAction action) { - try { - TeamUIPlugin.runWithProgressDialog(getShell(), true /* cancelable */, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) - throws InvocationTargetException, InterruptedException { - try { - createDir(getShell(), getSelectedRemoteFolders()[0], new String()); - } catch (TeamException e) { - throw new InvocationTargetException(e); - } - } - }); - } catch (InvocationTargetException e) { - handle(e, Policy.bind("Error"), Policy.bind("CreateNewFolderAction.errorCreatingFolder")); //$NON-NLS-1$ //$NON-NLS-2$ - } catch (InterruptedException e) { - } - } - - /** - * Throws a TeamException if one occured. - * Returns null if the operation was cancelled or an exception occured - */ - public static IRemoteTargetResource createDir(final Shell shell, final IRemoteTargetResource parent, final String defaultName) throws TeamException { - final IRemoteTargetResource[] newFolder = new IRemoteTargetResource[] {null}; - try { - TeamUIPlugin.runWithProgressDialog(shell, true, new IRunnableWithProgress() { - public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - monitor.beginTask(Policy.bind("CreateNewFolderAction.creatingFolder"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$ - final String[] folderName = new String[] {null}; - final String suggestedName = getSuggestedFolderName(parent, Policy.subMonitorFor(monitor, 0), defaultName); - shell.getDisplay().syncExec(new Runnable() { - public void run() { - InputDialog dialog = new InputDialog(shell, - Policy.bind("CreateNewFolderAction.title"), //$NON-NLS-1$ - Policy.bind("CreateNewFolderAction.message"), //$NON-NLS-1$ - suggestedName, - null); - Policy.checkCanceled(monitor); - if(dialog.open() == InputDialog.OK) { - folderName[0] = dialog.getValue(); - } - } - }); - if(folderName[0] != null) { - newFolder[0] = parent.getFolder(folderName[0]); - newFolder[0].mkdirs(Policy.subMonitorFor(monitor, 0)); - } - } catch(TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }); - } catch(InvocationTargetException e) { - if (e.getTargetException() instanceof TeamException) { - throw (TeamException)e.getTargetException(); - } - TeamUIPlugin.handle(e); - } catch(InterruptedException e) { - } - return newFolder[0]; - } - - protected static String getSuggestedFolderName(IRemoteTargetResource parent, IProgressMonitor monitor, String defaultName) throws TeamException { - IRemoteResource[] members; - monitor.subTask(Policy.bind("CreateNewFolderAction.suggestedNameProgress")); //$NON-NLS-1$ - members = parent.members(monitor); - ArrayList names = new ArrayList(); - - String suggestedFolderName = defaultName; - - boolean nameUsed = false; - - for (int i = 0; i < members.length; i++) { - String existingName = members[i].getName(); - names.add(existingName); // cache them for next round since faster - if(existingName.equals(suggestedFolderName)) { - nameUsed = true; - } - } - - if(!nameUsed) - return suggestedFolderName; - - //Otherwise, keep proposing new names by incrementing a postfix name index until we find one not used - int postfix = 1; - - String baseName = suggestedFolderName; - - do { - nameUsed = false; - for (int i = 0; i < members.length && !nameUsed; i++) { - suggestedFolderName = Policy.bind("CreateNewFolderAction.suggestedNameConcat", baseName, String.valueOf(postfix)); //$NON-NLS-1$ - String existingName = (String) names.get(i); - - if(existingName.equals(suggestedFolderName)) { - postfix = postfix + 1; - nameUsed = true; - } - } - } while(nameUsed); - return suggestedFolderName; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java deleted file mode 100644 index d5db55b42..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java +++ /dev/null @@ -1,190 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.DetailsDialog; -import org.eclipse.team.internal.ui.Policy; - -/** - * Discards a remembered Site from Target Management. Before a Site can be - * discarded all resources using this site must be deconfigured. This action will - * prompt the user if a Site cannot be discarded because of existing connections. - */ -public class DiscardSiteAction extends TargetAction { - - private class AlreadyMappedDialog extends DetailsDialog { - private IProject[] projects; - private org.eclipse.swt.widgets.List detailsList; - private Button unmap; - - public AlreadyMappedDialog(Shell shell, IProject[] projects) { - super(shell, Policy.bind("SiteExplorerView.unmapDialogTitle")); //$NON-NLS-1$ - setImageKey(DLG_IMG_WARNING); - this.projects = projects; - } - - protected Composite createDropDownDialogArea(Composite parent) { - // create a composite with standard margins and spacing - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); - layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); - layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); - layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - composite.setLayout(layout); - composite.setLayoutData(new GridData(GridData.FILL_BOTH)); - composite.setFont(parent.getFont()); - - detailsList = new org.eclipse.swt.widgets.List(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); - GridData data = new GridData (); - data.heightHint = 75; - data.horizontalAlignment = GridData.FILL; - data.grabExcessHorizontalSpace = true; - detailsList.setLayoutData(data); - - for (int i = 0; i < projects.length; i++) { - IProject project = projects[i]; - TargetProvider target; - try { - target = TargetManager.getProvider(project); - } catch (TeamException e) { - continue; - } - detailsList.add(Policy.bind("SiteExplorerView.mappedProjects", project.getName(), target.getURL().toExternalForm())); //$NON-NLS-1$ - } - return composite; - } - - protected void createMainDialogArea(Composite composite) { - Label label = new Label(composite, SWT.WRAP); - label.setText(Policy.bind("SiteExplorerView.projectsAlreadyMapped")); //$NON-NLS-1$ - GridData data = new GridData( - GridData.GRAB_HORIZONTAL | - GridData.GRAB_VERTICAL | - GridData.HORIZONTAL_ALIGN_FILL | - GridData.VERTICAL_ALIGN_CENTER); - data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); - label.setLayoutData(data); - label.setFont(composite.getFont()); - - unmap = new Button(composite, SWT.CHECK); - unmap.setText(Policy.bind("SiteExplorerView.unmapProjectsAndDisconnect")); //$NON-NLS-1$ - unmap.setSelection(false); - unmap.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - updateEnablements(); - } - }); - setPageComplete(false); - updateEnablements(); - } - - protected void updateEnablements() { - setPageComplete(unmap.getSelection()); - } - } - - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() throws TeamException { - return getSelectedSites().length > 0; - } - - /** - * @see IActionDelegate#run(IAction) - */ - public void run(IAction action) { - deletedSelected(); - } - - private void deletedSelected() { - try { - Site[] sites = getSelectedSites(); - if(sites.length > 0) { - - // sites are already mapped, ask if they want to unmap projects first - IProject[] mappedProjects = projectsMappedToSite(sites); - if( mappedProjects.length > 0 ) { - AlreadyMappedDialog dialog = new AlreadyMappedDialog(getShell(), mappedProjects); - if(dialog.open() == AlreadyMappedDialog.OK) { - for (int i = 0; i < mappedProjects.length; i++) { - TargetManager.unmap(mappedProjects[i]); - } - } else { - // nothing to do - return; - } - } else { - MessageDialog d = new MessageDialog(getShell(), - Policy.bind("SiteExplorerView.promptForDeletingSitesTitle"), //$NON-NLS-1$ - null, - Policy.bind("SiteExplorerView.promptForDeletingSites", new Integer(sites.length).toString()), //$NON-NLS-1$ - MessageDialog.QUESTION, - new String[] { - IDialogConstants.YES_LABEL, - IDialogConstants.CANCEL_LABEL }, 0); - if( d.open() != MessageDialog.OK ) { - return; - } - } - // sites aren't mapped, just ask then delete them form the view - // and from the target manager. - for (int i = 0; i < sites.length; i++) { - TargetManager.removeSite(sites[i]); - sites[i].dispose(); - } - } - } catch (TeamException e) { - ErrorDialog.openError(getShell(), - Policy.bind("Error"), //$NON-NLS-1$ - Policy.bind("CreateNewFolderAction.errorDeletingSites"), //$NON-NLS-1$ - e.getStatus()); - } - } - - private IProject[] projectsMappedToSite(Site[] sites) throws TeamException { - List mappedProjects = new ArrayList(); - IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); - for (int i = 0; i < projects.length; i++) { - IProject project = projects[i]; - TargetProvider target = TargetManager.getProvider(project); - for (int j = 0; j < sites.length; j++) { - if(target != null && target.getSite().equals(sites[j])) { - mappedProjects.add(project); - } - } - } - return (IProject[]) mappedProjects.toArray(new IProject[mappedProjects.size()]); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ExportTargetSiteMainPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ExportTargetSiteMainPage.java deleted file mode 100644 index dc456aa9f..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ExportTargetSiteMainPage.java +++ /dev/null @@ -1,204 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableItem; -import org.eclipse.swt.widgets.Text; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamWizardPage; - -/** - * This page allows the user to save the settings used by Target sites to a file. - */ -public class ExportTargetSiteMainPage extends TeamWizardPage { - private List selectedSites = new ArrayList(); - private Text fileText; - private String fileName = ""; //$NON-NLS-1$ - private Table table; - private Button browseButton; - - /** - * Constructor for ExportTargetSiteMainPage. - * @param pageName The name of the page. - */ - public ExportTargetSiteMainPage(String pageName) { - super(pageName); - } - - /** - * Constructor for ExportTargetSiteMainPage. - * @param pageName The name of the page - * @param title The title of the page - * @param titleImage The image for the page - */ - public ExportTargetSiteMainPage(String pageName, String title, ImageDescriptor titleImage) { - super(pageName, title, titleImage); - } - - /** - * @see org.eclipse.jface.dialogs.IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - Composite composite = createComposite(parent, 1); - initializeDialogUnits(composite); - createLabel(composite, Policy.bind("ExportTargetSiteMainPage.Select_Sites")); //$NON-NLS-1$ - - //TODO: add F1 help. - - table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); - table.setLayout(new TableLayout()); - GridData data = new GridData(GridData.FILL_BOTH); - data.heightHint = 300; - table.setLayoutData(data); - table.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - if (event.detail == SWT.CHECK) { - TableItem item = (TableItem) event.item; - if (item.getChecked()) { - selectedSites.add(item.getData()); - } else { - selectedSites.remove(item.getData()); - } - updateEnablement(); - } - } - }); - createLabel(composite, Policy.bind("ExportTargetSiteMainPage.Target_Site_Filename")); //$NON-NLS-1$ - - Composite inner = new Composite(composite, SWT.NULL); - inner.setLayoutData(new GridData(GridData.FILL_BOTH)); - GridLayout layout = new GridLayout(); - layout.numColumns = 3; - layout.marginHeight = 0; - layout.marginWidth = 0; - inner.setLayout(layout); - - createLabel(inner, Policy.bind("ExportTargetSiteMainPage.File_name")); //$NON-NLS-1$ - fileText = createTextField(inner); - if (fileName != null) - fileText.setText(fileName); - fileText.addListener(SWT.Modify, new Listener() { - public void handleEvent(Event event) { - fileName = fileText.getText(); - updateEnablement(); - } - }); - - browseButton = new Button(inner, SWT.PUSH); - browseButton.setText(Policy.bind("ExportTargetSiteMainPage.Browse")); //$NON-NLS-1$ - data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, browseButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - browseButton.setLayoutData(data); - browseButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - FileDialog d = new FileDialog(getShell(), SWT.SAVE); - d.setFilterExtensions(new String[] { "*.tsf" }); //$NON-NLS-1$ - d.setFilterNames(new String[] { Policy.bind("ExportTargetSiteMainPage.Target_Site_Files")}); //$NON-NLS-1$ - d.setFileName(Policy.bind("ExportTargetSiteMainPage.default")); //$NON-NLS-1$ - d.setFilterPath(new File(".").getAbsolutePath()); //$NON-NLS-1$ - String f = d.open(); - if (f != null) { - fileText.setText(f); - fileName = f; - } - } - }); - - initializeSites(); - setControl(composite); - updateEnablement(); - } - - public void setSelectedSites(Site[] selectedSites) { - this.selectedSites.addAll(Arrays.asList(selectedSites)); - } - - public void setFileName(String file) { - if (file != null) { - this.fileName = file; - } - } - - private void initializeSites() { - List siteList = new ArrayList(); - Site[] workspaceSites = TargetManager.getSites(); - for (int i = 0; i < workspaceSites.length; i++) { - TableItem item = new TableItem(table, SWT.NONE); - item.setData(workspaceSites[i]); - item.setText(workspaceSites[i].getDisplayName()); - } - } - - /** - * Returns the fileName. - * @return String - */ - public String getFileName() { - return fileName; - } - - public Site[] getSelectedSites() { - return (Site[]) selectedSites.toArray(new Site[selectedSites.size()]); - } - - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - fileText.setFocus(); - } - } - - private void updateEnablement() { - boolean complete; - if (selectedSites.size() == 0) { - setMessage(null); - complete = false; - } else if (fileName.length() == 0) { - setMessage(null); - complete = false; - } else { - File f = new File(fileName); - if (f.isDirectory()) { - setMessage(Policy.bind("ExportTargetSiteMainPage.folder_specified"), ERROR); //$NON-NLS-1$ - complete = false; - } else { - complete = true; - } - } - if (complete) { - setMessage(null); - } - setPageComplete(complete); - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java deleted file mode 100644 index df8b5526a..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java +++ /dev/null @@ -1,179 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.DetailsDialog; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -/** - * Action for getting the contents of the selected resources - */ -public class GetAction extends TargetAction { - - private class OutgoingChangesDialog extends DetailsDialog { - private IResource[] outgoingChanges; - private org.eclipse.swt.widgets.List detailsList; - - public OutgoingChangesDialog(Shell shell, IResource[] outgoingChanges) { - super(shell, Policy.bind("GetAction.confirmFileOverwriteTitle")); //$NON-NLS-1$ - setImageKey(DLG_IMG_QUESTION); - this.outgoingChanges = outgoingChanges; - } - - protected Composite createDropDownDialogArea(Composite parent) { - // create a composite with standard margins and spacing - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); - layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); - layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); - layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - composite.setLayout(layout); - composite.setLayoutData(new GridData(GridData.FILL_BOTH)); - composite.setFont(parent.getFont()); - - detailsList = new org.eclipse.swt.widgets.List(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); - GridData data = new GridData (); - data.heightHint = 75; - data.horizontalAlignment = GridData.FILL; - data.grabExcessHorizontalSpace = true; - detailsList.setLayoutData(data); - - for (int i = 0; i < outgoingChanges.length; i++) { - detailsList.add(outgoingChanges[i].getFullPath().toString()); //$NON-NLS-1$ - } - return composite; - } - - protected void createMainDialogArea(Composite parent) { - Label label = new Label(parent, SWT.WRAP); - label.setText(Policy.bind("GetAction.confirmFileOverwrite")); //$NON-NLS-1$ - GridData data = new GridData( - GridData.GRAB_HORIZONTAL | - GridData.GRAB_VERTICAL | - GridData.HORIZONTAL_ALIGN_FILL | - GridData.VERTICAL_ALIGN_CENTER); - data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); - label.setLayoutData(data); - label.setFont(parent.getFont()); - setPageComplete(true); - } - - protected void updateEnablements() { - } - } - - public void run(IAction action) { - if(promptForOutgoingChanges()) { - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - Hashtable table = getTargetProviderMapping(); - Set keySet = table.keySet(); - monitor.beginTask(null, keySet.size() * 1000); - - // perform the get on each provider - Iterator iterator = keySet.iterator(); - while (iterator.hasNext()) { - TargetProvider provider = (TargetProvider)iterator.next(); - monitor.setTaskName(Policy.bind("GetAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$ - List list = (List)table.get(provider); - IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); - provider.get(providerResources, Policy.subInfiniteMonitorFor(monitor, 1000)); - } - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }, Policy.bind("GetAction.title"), PROGRESS_DIALOG); //$NON-NLS-1$ - } - } - - private boolean promptForOutgoingChanges() { - try { - // find any outgoing changes that will be overwritten and prompt - Hashtable table = getTargetProviderMapping(); - Set keySet = table.keySet(); - - Iterator iterator = keySet.iterator(); - List outgoingChanges = new ArrayList(); - while (iterator.hasNext()) { - TargetProvider provider = (TargetProvider)iterator.next(); - List list = (List)table.get(provider); - IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); - outgoingChanges.addAll(Arrays.asList(findResourcesWithOutgoingChanges(providerResources))); - } - if(! outgoingChanges.isEmpty()) { - final OutgoingChangesDialog dialog = new OutgoingChangesDialog(getShell(), - (IResource[]) outgoingChanges.toArray(new IResource[outgoingChanges.size()])); - final boolean okToContinue[] = {true}; - getShell().getDisplay().syncExec(new Runnable() { - public void run() { - if(dialog.open() != OutgoingChangesDialog.OK) { - okToContinue[0] = false; - } - } - }); - return okToContinue[0]; - } - return true; - } catch(CoreException e) { - TeamUIPlugin.handle(e); - } catch(TeamException e) { - TeamUIPlugin.handle(e); - } - return false; - } - - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() throws TeamException { - IResource[] resources = getSelectedResources(); - if (resources.length == 0) return false; - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - TargetProvider provider = TargetManager.getProvider(resource.getProject()); - if(provider == null) - return false; - if(! provider.canPut(resource)) - return false; //if one can't don't allow for any - } - return true; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAsAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAsAction.java deleted file mode 100644 index 79e5db948..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAsAction.java +++ /dev/null @@ -1,198 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.PromptingDialog; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.actions.NewProjectAction; -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.ui.dialogs.ProjectLocationSelectionDialog; - -/** - * Action to transfer a remote folder and it's contents into the workspace. If - * the remote folder doesn't have a .project then the project creation wizard - * is shown to configure a new project, otherwise the a prompt is shown to choose - * the project name and location. - * - * @see GetAsProjectAction - */ -public class GetAsAction extends GetAsProjectAction { - public void run(IAction action) { - - final IRemoteTargetResource[] folders = getSelectedRemoteFolders(); - if (folders.length != 1) return; - final IRemoteTargetResource remoteFolder = folders[0]; - final String remoteName = remoteFolder.getName(); - - // Fetch the members of the folder to see if they contain a .project file. - final boolean[] hasProjectMetaFile = new boolean[] { false }; - final boolean[] errorOccured = new boolean[] { false }; - run(new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - hasProjectMetaFile[0] = hasProjectMetaFile(remoteFolder, monitor); - } catch (TeamException e) { - throw new InvocationTargetException(e); - } - } - }, Policy.bind("GetAs.checkoutFailed"), PROGRESS_DIALOG); //$NON-NLS-1$ - if (errorOccured[0]) return; - - // Prompt outside a workspace runnable so that the project creation delta can be heard - IProject newProject = null; - if ( ! hasProjectMetaFile[0]) { - newProject = getNewProject(remoteFolder.getName()); - if (newProject == null) return; - } - - final IProject createdProject = newProject; - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - IProject project; - if (hasProjectMetaFile[0]) { - // Prompt for name - final Shell shell = getShell(); - final int[] result = new int[] { Dialog.OK }; - project = ResourcesPlugin.getWorkspace().getRoot().getProject(remoteName); - final ProjectLocationSelectionDialog dialog = new ProjectLocationSelectionDialog(shell, project); - dialog.setTitle(Policy.bind("GetAs.enterProjectTitle", remoteName)); //$NON-NLS-1$ - - shell.getDisplay().syncExec(new Runnable() { - public void run() { - result[0] = dialog.open(); - } - }); - if (result[0] != Dialog.OK) return; - - Object[] destinationPaths = dialog.getResult(); - if (destinationPaths == null) return; - String newName = (String) destinationPaths[0]; - IPath newLocation = new Path((String) destinationPaths[1]); - - // prompt if the project exists locally - project = ResourcesPlugin.getWorkspace().getRoot().getProject(newName); - PromptingDialog prompt = new PromptingDialog(getShell(), new IResource[] { project }, - getOverwriteLocalAndFileSystemPrompt(), Policy.bind("GetAsProject.confirmOverwrite"));//$NON-NLS-1$ - if (prompt.promptForMultiple().length == 0) return; - - monitor.beginTask(null, 100); - monitor.setTaskName(Policy.bind("GetAs.taskname", remoteFolder.getName(), newName)); //$NON-NLS-1$ - - // create the project - try { - if (newLocation.equals(Platform.getLocation())) { - // create in default location - project.create(Policy.subMonitorFor(monitor, 3)); - } else { - // create in some other location - IProjectDescription desc = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName()); - desc.setLocation(newLocation); - project.create(desc, Policy.subMonitorFor(monitor, 3)); - } - project.open(Policy.subMonitorFor(monitor, 2)); - } catch (CoreException e) { - throw new TeamException(e.getStatus()); - } - } else { - project = createdProject; - monitor.beginTask(null, 95); - monitor.setTaskName(Policy.bind("GetAs.taskname", remoteFolder.getName(), createdProject.getName())); //$NON-NLS-1$ - } - - get(project, remoteFolder, Policy.subInfiniteMonitorFor(monitor, 95)); - - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }, Policy.bind("GetAs.checkoutFailed"), PROGRESS_DIALOG); //$NON-NLS-1$ - } - - /* - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() throws TeamException { - return getSelectedRemoteFolders().length == 1; - } - - /** - * Get a new project. - * - * The suggestedName is not currently used but is a desired capability. - */ - private IProject getNewProject(String suggestedName) { - NewProjectListener listener = new NewProjectListener(); - ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE); - (new NewProjectAction(PlatformUI.getWorkbench().getActiveWorkbenchWindow())).run(); - ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener); - return listener.getNewProject(); - } - - protected boolean hasProjectMetaFile(IRemoteTargetResource remote, IProgressMonitor monitor) throws TeamException { - IRemoteResource[] children = remote.members(monitor); - for (int i = 0; i < children.length; i++) { - if(children[i].getName().equals(".project")) { //$NON-NLS-1$ - return true; - } - } - return false; - } - - class NewProjectListener implements IResourceChangeListener { - private IProject newProject = null; - /** - * @see IResourceChangeListener#resourceChanged(IResourceChangeEvent) - */ - public void resourceChanged(IResourceChangeEvent event) { - IResourceDelta root = event.getDelta(); - IResourceDelta[] projectDeltas = root.getAffectedChildren(); - for (int i = 0; i < projectDeltas.length; i++) { - IResourceDelta delta = projectDeltas[i]; - IResource resource = delta.getResource(); - if (delta.getKind() == IResourceDelta.ADDED) { - newProject = (IProject)resource; - } - } - } - /** - * Gets the newProject. - * @return Returns a IProject - */ - public IProject getNewProject() { - return newProject; - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAsProjectAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAsProjectAction.java deleted file mode 100644 index db1349183..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAsProjectAction.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.io.File; -import java.util.HashSet; -import java.util.Set; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.ui.*; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.core.target.UrlUtil; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.PromptingDialog; -import org.eclipse.team.internal.ui.TeamUIPlugin; - -/** - * Action to transfer a remote folder and it's contents into the workspace. The - * resulting project is named with the remote folder name and the kind of project - * is determined by the remote .project file. If the remote folder doesn't not - * contain a .project, then the project default simple type is used. - * - * @see GetAsAction - */ -public class GetAsProjectAction extends TargetAction { - - public void run(IAction action) { - - final IRemoteTargetResource[] remoteFolders = getSelectedRemoteFolders(); - - Set targetProjects = new HashSet(); - for (int i = 0; i < remoteFolders.length; i++) { - String projectName = remoteFolders[i].getName(); - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); - targetProjects.add(project); - } - final IResource[] projects = (IResource[]) targetProjects.toArray(new IResource[targetProjects.size()]); - PromptingDialog prompt = new PromptingDialog(getShell(), projects, - getOverwriteLocalAndFileSystemPrompt(), - Policy.bind("GetAsProject.confirmOverwrite"));//$NON-NLS-1$ - - try { - if (prompt.promptForMultiple().length != projects.length) return; - } catch (InterruptedException e) { - return; - } - - try { - TeamUIPlugin.runWithProgressDialog(getShell(), true, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - monitor.beginTask(getTaskName(remoteFolders), remoteFolders.length * 100); - monitor.setTaskName(getTaskName(remoteFolders)); - for (int i = 0; i < remoteFolders.length; i++) { - IProject project = (IProject)projects[i]; - IRemoteTargetResource remote = remoteFolders[i]; - IProgressMonitor subMonitor = Policy.subInfiniteMonitorFor(monitor, 100); - get(project, remote, subMonitor); - } - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }); - } catch (InvocationTargetException e) { - handle(e, Policy.bind("Error"), Policy.bind("GetAsProject.errorGettingResources")); //$NON-NLS-1$ //$NON-NLS-2$ - } catch (InterruptedException e) { - return; - } - } - - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() throws TeamException { - return getSelectedRemoteFolders().length > 0; - } - - protected void get(IProject project, IRemoteTargetResource remote, IProgressMonitor monitor) throws TeamException { - try { - monitor.beginTask(null, 100); - try { - if(!project.exists()) { - project.create(Policy.subMonitorFor(monitor, 5)); - } - if(!project.isOpen()) { - project.open(Policy.subMonitorFor(monitor, 5)); - } - } catch (CoreException e) { - ErrorDialog.openError(getShell(), Policy.bind("Error"), Policy.bind("GetAsProject.errorCreatingProject"), e.getStatus()); //$NON-NLS-1$ //$NON-NLS-2$ - return; - } - Site site = remote.getSite(); - TargetProvider provider = TargetManager.getProvider(project); - if(provider != null) { - TargetManager.unmap(project); - } - TargetManager.map(project, site, UrlUtil.getTrailingPath(remote.getURL(), site.getURL())); - provider = TargetManager.getProvider(project); - provider.get(project, remote, Policy.subMonitorFor(monitor, 90)); - } finally { - monitor.done(); - } - } - - protected static String getTaskName(IRemoteTargetResource[] remoteFolders) { - if (remoteFolders.length == 1) { - IRemoteTargetResource folder = remoteFolders[0]; - return Policy.bind("GetAsProject.taskName1", folder.getURL().toExternalForm()); //$NON-NLS-1$ - } - else { - return Policy.bind("GetAsProject.taskNameN", new Integer(remoteFolders.length).toString()); //$NON-NLS-1$ - } - } - - protected IPromptCondition getOverwriteLocalAndFileSystemPrompt() { - return new IPromptCondition() { - // prompt if resource in workspace exists or exists in local file system - public boolean needsPrompt(IResource resource) { - File localLocation = getFileLocation(resource); - if(resource.exists() || localLocation.exists()) { - return true; - } - return false; - } - public String promptMessage(IResource resource) { - File localLocation = getFileLocation(resource); - if(resource.exists()) { - return Policy.bind("GetAsProject.thisResourceExists", resource.getName());//$NON-NLS-1$ - } else { - return Policy.bind("GetAsProject.thisExternalFileExists", resource.getName());//$NON-NLS-1$ - }//$NON-NLS-1$ - } - private File getFileLocation(IResource resource) { - return new File(resource.getParent().getLocation().toFile(), resource.getName()); - } - }; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java deleted file mode 100644 index f2129f36a..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.InfiniteSubProgressMonitor; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.IHelpContextIds; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.sync.ITeamNode; -import org.eclipse.team.internal.ui.sync.SyncSet; -import org.eclipse.ui.help.WorkbenchHelp; - -public class GetSyncAction extends TargetSyncAction { - - public GetSyncAction(TargetSyncCompareInput model, ISelectionProvider sp, String label, Shell shell) { - super(model, sp, label, shell); - WorkbenchHelp.setHelp(this, IHelpContextIds.SYNC_GET_ACTION); - } - - /** - * @see TargetSyncAction#isEnabled(ITeamNode) - */ - protected boolean isEnabled(ITeamNode node) { - // Get action is enabled for any changed nodes. - SyncSet set = new SyncSet(new StructuredSelection(node)); - return set.hasIncomingChanges() || set.hasConflicts(); - } - - /** - * @see TargetSyncAction#removeNonApplicableNodes(SyncSet, int) - */ - protected void removeNonApplicableNodes(SyncSet set, int syncMode) { - set.removeOutgoingNodes(); - } - - /** - * @see TargetSyncAction#run(SyncSet, IProgressMonitor) - */ - protected SyncSet run(SyncSet syncSet, IProgressMonitor monitor) { - try { - ITeamNode[] changed = syncSet.getChangedNodes(); - if (changed.length == 0) { - return syncSet; - } - List fileResources = new ArrayList(); - List folderDeletions = new ArrayList(); - List folderAdditions = new ArrayList(); - //Find the incoming file changes the potential incoming folder deletions: - for (int i = 0; i < changed.length; i++) { - if (changed[i].getChangeDirection()==ITeamNode.INCOMING || changed[i].getChangeDirection()==ITeamNode.CONFLICTING) { - if (changed[i].getResource().getType()==IResource.FILE) fileResources.add(changed[i].getResource()); - else if (changed[i].getChangeType()==Differencer.DELETION - && /*don't delete nonexistant folders*/changed[i].getResource().exists()) - folderDeletions.add(changed[i].getResource()); - else { - //If the new remote folders have no children then we'd better explicitly create them locally: - IResource resource=changed[i].getResource(); - if (getRemoteResourceFor(resource).members(monitor).length==0) - folderAdditions.add(changed[i].getResource()); - } - } - } - get((IResource[])fileResources.toArray(new IResource[fileResources.size()]), monitor); - get((IResource[])folderAdditions.toArray(new IResource[folderDeletions.size()]), monitor); - if (folderDeletions.size()>0) { - //Prune the list of potential incoming folder deletions, retaining only those that don't have local content: - boolean delete; - Iterator iter=folderDeletions.iterator(); - for (IContainer container=(IContainer)iter.next(); iter.hasNext(); container=(IContainer)iter.next()) { - delete=true; - IResource[] children=container.members(); - for (int j = 0; j < children.length; j++) { - if (!folderDeletions.contains(children[j])) { - delete=false; - break; - } - } - if (!delete) iter.remove(); - } - get((IResource[])folderDeletions.toArray(new IResource[folderDeletions.size()]), monitor); - } - } catch (final TeamException e) { - getShell().getDisplay().syncExec(new Runnable() { - public void run() { - ErrorDialog.openError(getShell(), null, null, e.getStatus()); - } - }); - return null; - } catch (final CoreException e) { - getShell().getDisplay().syncExec(new Runnable() { - public void run() { - ErrorDialog.openError(getShell(), null, null, e.getStatus()); - } - }); - return null; - } - return syncSet; - } - - /** - * Put the given resources to their associated providers. - * - * @param resources the resources to commit - * @param monitor the progress monitor - */ - public void get(IResource[] resources, IProgressMonitor monitor) throws TeamException { - monitor = Policy.monitorFor(monitor); - try { - Hashtable table = getTargetProviderMapping(resources); - Set keySet = table.keySet(); - monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ - Iterator iterator = keySet.iterator(); - while (iterator.hasNext()) { - IProgressMonitor subMonitor = new InfiniteSubProgressMonitor(monitor, 1000); - TargetProvider provider = (TargetProvider)iterator.next(); - monitor.setTaskName(Policy.bind("GetAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$ - List list = (List)table.get(provider); - IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); - provider.get(providerResources, subMonitor); - } - } finally { - monitor.done(); - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ImportTargetSiteMainPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ImportTargetSiteMainPage.java deleted file mode 100644 index b667a277c..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ImportTargetSiteMainPage.java +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.io.File; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Text; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamWizardPage; - -public class ImportTargetSiteMainPage extends TeamWizardPage { - private Text fileText; - private String file = ""; //$NON-NLS-1$ - private Button browseButton; - - /** - * @see org.eclipse.jface.wizard.WizardPage#WizardPage(String, String, ImageDescriptor) - */ - public ImportTargetSiteMainPage(String pageName, String title, ImageDescriptor titleImage) { - super(pageName, title, titleImage); - } - - private void updateEnablement() { - boolean complete; - - if (file.length() == 0) { - setMessage(null); - complete = false; - } else { - // See if the file exists - File f = new File(file); - if (!f.exists()) { - setMessage(Policy.bind("ImportTargetSiteMainPage.nonexistent_file"), ERROR); //$NON-NLS-1$ - complete = false; - } else if (f.isDirectory()) { - setMessage(Policy.bind("ImportTargetSiteMainPage.folder_specified"), ERROR); //$NON-NLS-1$ - complete = false; - } else { - complete = true; - } - } - if (complete) { - setMessage(null); - } - setPageComplete(complete); - } - - /** - * single-use mutator - * @param file The name to use for the file. - */ - public void setFileName(String file) { - if (file != null) { - this.file = file; - } - } - - /** - * Method getFileName. - * @return String - */ - public String getFileName() { - return file; - } - - /** - * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean) - */ - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - fileText.setFocus(); - } - } - - /** - * @see org.eclipse.jface.dialogs.IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - Composite composite = createComposite(parent, 1); - initializeDialogUnits(composite); - - //TODO: add F1 help. - - Composite inner = new Composite(composite, SWT.NULL); - inner.setLayoutData(new GridData(GridData.FILL_BOTH)); - GridLayout layout = new GridLayout(); - layout.numColumns = 3; - layout.marginHeight = 0; - layout.marginWidth = 0; - inner.setLayout(layout); - - createLabel(inner, Policy.bind("ImportTargetSiteMainPage.File_name")); //$NON-NLS-1$ - fileText = createTextField(inner); - if (file != null) fileText.setText(file); - fileText.addListener(SWT.Modify, new Listener() { - public void handleEvent(Event event) { - file = fileText.getText(); - updateEnablement(); - } - }); - - browseButton = new Button(inner, SWT.PUSH); - browseButton.setText(Policy.bind("ImportTargetSiteMainPage.Browse")); //$NON-NLS-1$ - GridData data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, browseButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - browseButton.setLayoutData(data); - browseButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - FileDialog d = new FileDialog(getShell()); - d.setFilterExtensions(new String[] {"*.tsf", "*"}); //$NON-NLS-1$ //$NON-NLS-2$ - d.setFilterNames(new String[] {Policy.bind("ImportTargetSiteMainPage.Target_Site_Files"), Policy.bind("ImportTargetSiteMainPage.allFiles")}); //$NON-NLS-1$ //$NON-NLS-2$ - d.setFilterPath(new File(".").getAbsolutePath()); //$NON-NLS-1$ - String f = d.open(); - if (f != null) { - fileText.setText(f); - file = f; - } - } - }); - - setControl(composite); - updateEnablement(); - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java deleted file mode 100644 index 511836e2f..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java +++ /dev/null @@ -1,195 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerFilter; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.UrlUtil; -import org.eclipse.team.internal.ui.IHelpContextIds; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.model.WorkbenchLabelProvider; - -public class MappingSelectionPage extends TargetWizardPage { - private IPath path = Path.EMPTY; - private Site site; - private TreeViewer viewer; - private Text textPath; - - public MappingSelectionPage(String pageName, String title, ImageDescriptor titleImage) { - super(pageName, title, titleImage); - setDescription(Policy.bind("MappingSelectionPage.description")); //$NON-NLS-1$ - } - - public void setSite(Site site) { - this.site = site; - } - - public Site getSite() { - return site; - } - - public void createControl(Composite p) { - Composite composite = createComposite(p, 1); - // set F1 help - WorkbenchHelp.setHelp(composite, IHelpContextIds.TARGET_MAPPING_SELECTION_PAGE); - - createLabel(composite, Policy.bind("MappingSelectionPage.label")); //$NON-NLS-1$ - - viewer = new TreeViewer(composite, SWT.BORDER | SWT.SINGLE); - - GridData data = new GridData (GridData.FILL_BOTH); - viewer.getTree().setLayoutData(data); - viewer.setContentProvider(new SiteLazyContentProvider()); - viewer.setLabelProvider(new WorkbenchLabelProvider()); - viewer.setSorter(new SiteViewSorter()); - viewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - updateTextPath(); - } - }); - - // include only folders in view - viewer.addFilter(new ViewerFilter() { - public boolean select(Viewer viewer, Object parentElement, Object element) { - if(element instanceof RemoteResourceElement) { - return ((RemoteResourceElement)element).getRemoteResource().isContainer(); - } - return false; - } - }); - - Button newFolderButton = new Button(composite, SWT.PUSH); - newFolderButton.setText(Policy.bind("MappingSelectionPage.newFolderLabel")); //$NON-NLS-1$ - newFolderButton.addListener(SWT.Selection, new Listener() { - public void handleEvent (Event event) { - Shell shell = getShell(); - try { - // assume that only one folder is selected in the folder tree - IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); - Object currentSelection = selection.getFirstElement(); - final IRemoteTargetResource selectedFolder = getSelectedRemoteFolder(selection); - String defaultName = ((ConfigureTargetWizard) getWizard()).project.getName(); - - IRemoteTargetResource newFolder = CreateNewFolderAction.createDir(getShell(), selectedFolder, defaultName); - if (newFolder == null) - return; - - RemoteResourceElement newFolderUIElement = new RemoteResourceElement(newFolder); - - ((RemoteResourceElement)currentSelection).setCachedChildren(null); - viewer.refresh(currentSelection); - viewer.setExpandedState(currentSelection, true); - viewer.setSelection(new StructuredSelection(newFolderUIElement)); - } catch (TeamException e) { - TeamUIPlugin.handle(e); - return; - } - } - }); - setViewerInput(); - setControl(composite); - setPageComplete(true); - } - - private IRemoteTargetResource getSelectedRemoteFolder(IStructuredSelection selection) { - if (!selection.isEmpty()) { - final List filesSelection = new ArrayList(); - Iterator it = selection.iterator(); - while(it.hasNext()) { - Object o = it.next(); - if(o instanceof RemoteResourceElement) { - return ((RemoteResourceElement)o).getRemoteResource(); - } else if(o instanceof SiteElement) { - try { - return ((SiteElement)o).getSite().getRemoteResource(); - } catch (TeamException e) { - return null; - } - } - } - } - return null; - } - - /** - * Method updateTextPath. - */ - private void updateTextPath() { - IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); - if (!selection.isEmpty()) { - final List filesSelection = new ArrayList(); - Iterator it = selection.iterator(); - while(it.hasNext()) { - Object o = it.next(); - if(o instanceof RemoteResourceElement) { - RemoteResourceElement element = (RemoteResourceElement) o; - URL remoteResourceURL; - remoteResourceURL = element.getRemoteResource().getURL(); - this.path = UrlUtil.getTrailingPath( - remoteResourceURL, - this.site.getURL()); - return; - } - } - } - } - - public IPath getMapping() { - return this.path; - } - - /** - * Attempt to set the viewer input. - * Do nothing if we don't have enough info yet to set it. - */ - private void setViewerInput() { - if(this.site == null || viewer == null) - return; - viewer.setInput(new SiteRootsElement(new Site[] {site}, getContainer())); - } - - /** - * @see IDialogPage#setVisible(boolean) - */ - public void setVisible(boolean visible) { - if(visible) { - setViewerInput(); - viewer.setSelection(new StructuredSelection(new SiteElement(site))); - } - super.setVisible(visible); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ProjectTargetMappingPropertiesPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ProjectTargetMappingPropertiesPage.java deleted file mode 100644 index 94d5d6f41..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ProjectTargetMappingPropertiesPage.java +++ /dev/null @@ -1,125 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IPath; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.core.target.UrlUtil; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.ui.dialogs.PropertyPage; - -public class ProjectTargetMappingPropertiesPage extends PropertyPage { - public static final int WIDTH_HINT = 250; - - private IProject proj; - private Site site = null; - private IPath mapping; - private TargetProvider origProvider=null; - - private Label serverText,folderText; - - /** - * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite) - */ - protected Control createContents(Composite parent) { - initialize(); - Composite container = new Composite(parent, SWT.NONE); - container.setLayout(new GridLayout(2, false)); - - Label serverLabel = new Label(container, SWT.NONE); - serverLabel.setText(Policy.bind("ProjectTargetMappingPropertiesPage.URL")); //$NON-NLS-1$ - serverText = new Label(container, SWT.NONE); - serverText.setText(site.getURL().toString()); - GridData data = new GridData(); - data.widthHint = WIDTH_HINT; - serverText.setLayoutData(data); - - Label folderLabel = new Label(container, SWT.NONE); - folderLabel.setText(Policy.bind("ProjectTargetMappingPropertiesPage.FolderName")); //$NON-NLS-1$ - folderText = new Label(container, SWT.NONE); - folderText.setText(mapping.toString()); - data = new GridData(); - data.widthHint = WIDTH_HINT; - folderText.setLayoutData(data); - - Button change = new Button(container, SWT.PUSH); - change.setText(Policy.bind("ProjectTargetMappingPropertiesPage.ChangeBtn")); //$NON-NLS-1$ - change.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - ConfigureTargetWizard wizard = new ConfigureTargetWizard(); - wizard.init(null, proj); - WizardDialog dialog = new WizardDialog(getShell(), wizard); - dialog.open(); - refreshInfo(); - } - }); - - return container; - } - - private void initialize() { - IAdaptable element = getElement(); - if (element instanceof IProject) { - proj = ((IProject) element).getProject(); - } else { - IProject adapter = (IProject) element.getAdapter(IProject.class); - if (adapter != null) { - proj = adapter.getProject(); - } - } - try { - TargetProvider provider = TargetManager.getProvider(proj); - if (origProvider==null) origProvider=provider; - site = provider.getSite(); - mapping = UrlUtil.getTrailingPath(provider.getURL(), site.getURL()); - } catch (TeamException e) { - ErrorDialog.openError(getShell(), Policy.bind("ProjectTargetMappingPropertiesPage.Error"), null, e.getStatus()); //$NON-NLS-1$ - } - } - - private void refreshInfo() { - initialize(); - serverText.setText(site.getURL().toString()); - folderText.setText(mapping.toString()); - } - - /** - * @see org.eclipse.jface.preference.PreferencePage#performDefaults() - */ - protected void performDefaults() { - super.performDefaults(); - IPath oldMapping = UrlUtil.getTrailingPath(origProvider.getURL(), origProvider.getSite().getURL()); - try { - TargetManager.unmap(proj); - TargetManager.map(proj, origProvider.getSite(), oldMapping); - } catch (TeamException e) { - ErrorDialog.openError(getShell(), Policy.bind("ProjectTargetMappingPropertiesPage.Error"), null, e.getStatus()); //$NON-NLS-1$ - } - refreshInfo(); - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/PutAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/PutAction.java deleted file mode 100644 index 6b81f47b1..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/PutAction.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - - -import java.lang.reflect.InvocationTargetException; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.InfiniteSubProgressMonitor; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -/** - * Action for checking in the selected resources - */ -public class PutAction extends TargetAction { - /* - * Method declared on IActionDelegate. - */ - public void run(IAction action) { - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - Hashtable table = getTargetProviderMapping(); - Set keySet = table.keySet(); - monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ - Iterator iterator = keySet.iterator(); - while (iterator.hasNext()) { - IProgressMonitor subMonitor = new InfiniteSubProgressMonitor(monitor, 1000); - TargetProvider provider = (TargetProvider)iterator.next(); - monitor.setTaskName(Policy.bind("PutAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$ - List list = (List)table.get(provider); - IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); - - provider.put(providerResources, subMonitor); - } - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }, Policy.bind("PutAction.title"), PROGRESS_DIALOG); //$NON-NLS-1$ - } - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() throws TeamException { - IResource[] resources = getSelectedResources(); - if (resources.length == 0) return false; - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - TargetProvider provider = TargetManager.getProvider(resource.getProject()); - if(provider == null) - return false; - if(! provider.canGet(resource)) - return false; //if one can't don't allow for any - } - return true; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/PutSyncAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/PutSyncAction.java deleted file mode 100644 index ab141e082..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/PutSyncAction.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.InfiniteSubProgressMonitor; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.IHelpContextIds; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.sync.ITeamNode; -import org.eclipse.team.internal.ui.sync.SyncSet; -import org.eclipse.team.internal.ui.sync.SyncView; -import org.eclipse.ui.help.WorkbenchHelp; - -public class PutSyncAction extends TargetSyncAction { - - public PutSyncAction(TargetSyncCompareInput model, ISelectionProvider sp, String label, Shell shell) { - super(model, sp, label, shell); - WorkbenchHelp.setHelp(this, IHelpContextIds.SYNC_PUT_ACTION); - } - - /** - * @see TargetSyncAction#isEnabled(ITeamNode) - */ - protected boolean isEnabled(ITeamNode node) { - // Put action is enabled for any changed nodes. - return new SyncSet(new StructuredSelection(node)).getChangedNodes().length > 0; - } - - /** - * @see TargetSyncAction#removeNonApplicableNodes(SyncSet, int) - */ - protected void removeNonApplicableNodes(SyncSet set, int syncMode) { - if (syncMode == SyncView.SYNC_OUTGOING) { - set.removeIncomingNodes(); - } - } - - /** - * @see TargetSyncAction#run(SyncSet, IProgressMonitor) - */ - protected SyncSet run(SyncSet syncSet, IProgressMonitor monitor) { - try { - ITeamNode[] changed = syncSet.getChangedNodes(); - if (changed.length == 0) { - return syncSet; - } - List fileResources = new ArrayList(); - List folderDeletions = new ArrayList(); - List folderAdditions = new ArrayList(); - //Find the outgoing file changes the potential outgoing folder deletions: - for (int i = 0; i < changed.length; i++) { - if (changed[i].getChangeDirection()==ITeamNode.OUTGOING || changed[i].getChangeDirection()==ITeamNode.CONFLICTING) { - if (changed[i].getResource().getType()==IResource.FILE) fileResources.add(changed[i].getResource()); - else if (changed[i].getChangeType()==Differencer.DELETION) - folderDeletions.add(changed[i].getResource()); - else if (((IContainer)(changed[i].getResource())).members().length==0) - ////If the new local folders have no children then we'd better explicitly create them remotely: - folderAdditions.add(changed[i].getResource()); - } - } - put((IResource[])fileResources.toArray(new IResource[fileResources.size()]), monitor); - if (folderAdditions.size()>0) - put((IResource[])folderAdditions.toArray(new IResource[folderDeletions.size()]), monitor); - if (folderDeletions.size()>0) { - //Prune the list of potential outgoing folder deletions, retaining only those that don't have remote content: - boolean delete; - Iterator iter=folderDeletions.iterator(); - for (IContainer i=(IContainer)iter.next(); iter.hasNext(); i=(IContainer)iter.next()) { - delete=true; - IRemoteResource[] children=getRemoteResourceFor(i).members(monitor); - for (int j = 0; j < children.length; j++) { - if (!folderDeletions.contains(children[j])) { - delete=false; - break; - } - } - if (!delete) iter.remove(); - } - put((IResource[])folderDeletions.toArray(new IResource[folderDeletions.size()]), monitor); - } - } catch (final TeamException e) { - getShell().getDisplay().syncExec(new Runnable() { - public void run() { - ErrorDialog.openError(getShell(), null, null, e.getStatus()); - } - }); - return null; - } catch (final CoreException e) { - getShell().getDisplay().syncExec(new Runnable() { - public void run() { - ErrorDialog.openError(getShell(), null, null, e.getStatus()); - } - }); - return null; - } - return syncSet; - } - - /** - * Put the given resources to their associated providers. - * - * @param resources the resources to commit - * @param monitor the progress monitor - */ - public void put(IResource[] resources, IProgressMonitor monitor) throws TeamException { - monitor = Policy.monitorFor(monitor); - try { - Hashtable table = getTargetProviderMapping(resources); - Set keySet = table.keySet(); - monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ - Iterator iterator = keySet.iterator(); - while (iterator.hasNext()) { - IProgressMonitor subMonitor = new InfiniteSubProgressMonitor(monitor, 1000); - TargetProvider provider = (TargetProvider)iterator.next(); - monitor.setTaskName(Policy.bind("PutAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$ - List list = (List)table.get(provider); - IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); - provider.put(providerResources, subMonitor); - } - } finally { - monitor.done(); - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java deleted file mode 100644 index 890c43176..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java +++ /dev/null @@ -1,181 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.operation.IRunnableContext; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.model.IWorkbenchAdapter; - -/** - * Used to show IRemoteTargetResource instances in the UI. In addition these elements - * support caching of values returned from IRemoteTargetResource methods, as such these - * instances aren't as much proxies as the underlying remote handles. - * <p> - * Implementation in progress: support for configuring these elements with a custom - * progress monitor that can be the target of long running operations. This will - * allow showing progress in wizards and in the SiteExplorerView when navigating - * remote servers.</p> - */ -public class RemoteResourceElement implements IWorkbenchAdapter, IAdaptable { - - // remote resource this element represents - private IRemoteTargetResource remote; - - // cache for the remote values - private IRemoteResource[] children = null; - private int size = 0; - private String lastModified = null; - - // context in which to perform long-running operations - private IRunnableContext runContext; - - public RemoteResourceElement(IRemoteTargetResource remote) { - this.remote = remote; - } - - public RemoteResourceElement(IRemoteTargetResource remote, IRunnableContext runContext) { - this(remote); - this.runContext = runContext; - } - - public IRemoteTargetResource getRemoteResource() { - return remote; - } - - public Object getAdapter(Class adapter) { - if (adapter == IWorkbenchAdapter.class) return this; - return null; - } - - public Object[] getChildren(Object o) { - final Object[][] result = new Object[1][]; - try { - IRunnableWithProgress runnable = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - // progress for fetching remote children is always unknown - // let's not bother even trying to guess. - monitor.beginTask(null, IProgressMonitor.UNKNOWN); - if(children == null) { - setCachedChildren(remote.members(Policy.subMonitorFor(monitor, 50))); - } - List remoteElements = new ArrayList(); - for (int i = 0; i < children.length; i++) { - IRemoteTargetResource child = (IRemoteTargetResource)children[i]; - RemoteResourceElement element = new RemoteResourceElement(child, runContext); - - // cache size and last modified - element.setLastModified(child.getLastModified(Policy.subMonitorFor(monitor, 25))); - element.setSize(child.getSize(Policy.subMonitorFor(monitor, 25))); - remoteElements.add(element); - } - result[0] = (RemoteResourceElement[])remoteElements.toArray(new RemoteResourceElement[remoteElements.size()]); - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }; - - if(runContext == null) { - TeamUIPlugin.runWithProgress(null, true /*cancelable*/, runnable); - } else { - runContext.run(true, true, runnable); - } - } catch (InterruptedException e) { - return new Object[0]; - } catch (InvocationTargetException e) { - TeamUIPlugin.handle(e.getTargetException()); - return new Object[0]; - } - return result[0]; - } - - public ImageDescriptor getImageDescriptor(Object object) { - if(remote.isContainer()) { - return PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER); - } else { - return PlatformUI.getWorkbench().getEditorRegistry().getImageDescriptor(remote.getName()); - } - } - - public String getLabel(Object o) { - // would be nice to display more than just the name (e.g. timestamp, size...) - return remote.getName(); - } - - public Object getParent(Object o) { - return null; - } - - public int hashCode() { - return getRemoteResource().hashCode(); - } - - public boolean equals(Object obj) { - if(this == obj) - return true; - if(!(obj instanceof RemoteResourceElement)) - return false; - return ((RemoteResourceElement)obj).getRemoteResource().equals(getRemoteResource()); - } - - public void clearChildren() { - children = null; - } - - public IRemoteResource[] getCachedChildren() { - return children; - } - - public void setCachedChildren(IRemoteResource[] children) { - this.children = children; - } - - protected void setRemoteResource(IRemoteTargetResource remote) { - this.remote = remote; - } - - public String getLastModified() { - return lastModified; - } - - public int getSize() { - return size; - } - - public void setLastModified(String lastModified) { - this.lastModified = lastModified; - } - - public void setSize(int size) { - this.size = size; - } - - public String getName() { - return remote.getName(); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java deleted file mode 100644 index f1f87551f..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.jface.operation.IRunnableContext; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.team.internal.ui.UIConstants; -import org.eclipse.team.ui.TeamImages; - -/** - * Used to show Site instances in the UI. Sites are really just remote - * resources but are shown with a different icon and label. - * - * @see RemoteResourceElement - */ -public class SiteElement extends RemoteResourceElement { - private Site site; - - public SiteElement(Site site) { - super(null); - this.site = site; - } - - public SiteElement(Site site, IRunnableContext runContext) { - super(null, runContext); - this.site = site; - } - - public Site getSite() { - return site; - } - - public int hashCode() { - return site.hashCode(); - } - - public ImageDescriptor getImageDescriptor(Object object) { - return TeamImages.getImageDescriptor(UIConstants.IMG_SITE_ELEMENT); - } - - public String getLabel(Object o) { - return getSite().getDisplayName(); - } - - public Object getParent(Object o) { - return null; - } - - public boolean equals(Object obj) { - if(this == obj) - return true; - if(!(obj instanceof SiteElement)) - return false; - Site otherSite = ((SiteElement)obj).getSite(); - return getSite().equals(otherSite); - } - /** - * @see IWorkbenchAdapter#getChildren(Object) - */ - public Object[] getChildren(Object o) { - try { - setRemoteResource(site.getRemoteResource()); - } catch (TeamException e) { - TeamUIPlugin.handle(e); - return new Object[0]; - } - return super.getChildren(this); - } - /** - * @see RemoteResourceElement#getRemoteResource() - */ - public IRemoteTargetResource getRemoteResource() { - try { - return site.getRemoteResource(); - } catch (TeamException e) { - TeamUIPlugin.handle(e); - return null; - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java deleted file mode 100644 index 92693ec2c..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java +++ /dev/null @@ -1,562 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.SashForm; -import org.eclipse.swt.events.KeyAdapter; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.core.target.ISiteListener; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.ui.IHelpContextIds; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.team.internal.ui.UIConstants; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.dialogs.PropertyDialogAction; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.internal.WorkbenchImages; -import org.eclipse.ui.model.WorkbenchLabelProvider; -import org.eclipse.ui.part.ViewPart; - -/** - * Is a view that allows browsing remote target sites. It is modeled after - * a file explorer: a tree of folders is show with a table of the folder's - * contents. - * <p> - * Progress is shown in the main workbench window's status line progress - * monitor.</p> - * - * @see Site - * @see IRemoteTargetResource - */ -public class SiteExplorerView extends ViewPart implements ISiteListener { - - public static final String VIEW_ID = "org.eclipse.team.ui.target.SiteExplorerView"; //$NON-NLS-1$ - - // The tree viewer showing the folders and sites - private TreeViewer folderTree; - - // The table view that shows the resources in the currently selected folder - // from the folders tree. - private TableViewer folderContentsTable; - - // The root - private SiteRootsElement root; - - // Embedded progress monitor part used to display progress when contacting the server - // Note: this feature is not enabled yet and is still under construction - private IProgressMonitor progressMonitorPart; - - // The view's actions - private Action addSiteAction; - private Action newFolderAction; - private PropertyDialogAction propertiesAction; - - /** - * Sorter for the folderContents table - */ - class FolderListingSorter extends ViewerSorter { - private boolean reversed = false; - private int columnNumber; - - public static final int NAME = 0; - public static final int SIZE = 1; - public static final int MODIFIED = 2; - - // column headings: "Name" "Size" "Modified" - private int[][] SORT_ORDERS_BY_COLUMN = { - {NAME}, /* name */ - {SIZE, NAME}, /* size */ - {MODIFIED, NAME, SIZE}, /* modified */ - }; - - public FolderListingSorter(int columnNumber) { - this.columnNumber = columnNumber; - } - - public int compare(Viewer viewer, Object o1, Object o2) { - RemoteResourceElement e1 = (RemoteResourceElement)o1; - RemoteResourceElement e2 = (RemoteResourceElement)o2; - int[] columnSortOrder = SORT_ORDERS_BY_COLUMN[columnNumber]; - int result = 0; - for (int i = 0; i < columnSortOrder.length; ++i) { - result = compareColumnValue(columnSortOrder[i], e1, e2); - if (result != 0) - break; - } - if (reversed) - result = -result; - return result; - } - - int compareColumnValue(int columnNumber, RemoteResourceElement e1, RemoteResourceElement e2) { - IRemoteTargetResource r1 = e1.getRemoteResource(); - IRemoteTargetResource r2 = e2.getRemoteResource(); - switch (columnNumber) { - case NAME: - if (r1.isContainer() && r2.isContainer()) - return compareNames(r1, r2); - else if (r1.isContainer()) - return -1; - else if (r2.isContainer()) - return 1; - return compareNames(r1, r2); - case SIZE: - return new Integer(e1.getSize()).compareTo(new Integer(e2.getSize())); - case MODIFIED: - return getCollator().compare(e1.getLastModified(), e2.getLastModified()); - default: - return 0; - } - } - - protected int compareNames(IRemoteTargetResource resource1, IRemoteTargetResource resource2) { - return resource1.getName().compareTo(resource2.getName()); - } - - /** - * Returns the number of the column by which this is sorting. - */ - public int getColumnNumber() { - return columnNumber; - } - - /** - * Returns true for descending, or false - * for ascending sorting order. - */ - public boolean isReversed() { - return reversed; - } - - /** - * Sets the sorting order. - */ - public void setReversed(boolean newReversed) { - reversed = newReversed; - } - } - - /** - * @see IWorkbenchPart#createPartControl(Composite) - */ - public void createPartControl(Composite top) { - Composite p = new Composite(top, SWT.NULL); - GridData data = new GridData (GridData.FILL_BOTH); - p.setLayoutData(data); - GridLayout gridLayout = new GridLayout(); - gridLayout.numColumns = 3; - gridLayout.marginHeight = 0; - gridLayout.marginWidth = 0; - p.setLayout (gridLayout); - - SashForm sash = new SashForm(p, SWT.HORIZONTAL); - data = new GridData(GridData.FILL_BOTH); - data.horizontalSpan = 3; - sash.setLayoutData(data); - - folderTree = new TreeViewer(sash, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); - folderTree.setContentProvider(new SiteLazyContentProvider()); - folderTree.setLabelProvider(new WorkbenchLabelProvider()); - - folderTree.setSorter(new SiteViewSorter()); - folderTree.getControl().addKeyListener(new KeyAdapter() { - public void keyPressed(KeyEvent event) { - if (event.keyCode == SWT.F5) { - RemoteResourceElement[] selectedFolders = getSelectedRemoteFolder((IStructuredSelection)folderTree.getSelection()); - if(selectedFolders.length == 1) { - selectedFolders[0].setCachedChildren(null); - folderTree.refresh(selectedFolders[0]); - updateFileTable(selectedFolders[0]); - } - } - } - }); - - folderTree.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - IStructuredSelection selection = (IStructuredSelection)folderTree.getSelection(); - final RemoteResourceElement[] remoteFolders = getSelectedRemoteFolder(selection); - if(remoteFolders.length == 1) { - updateFileTable(remoteFolders[0]); - } - } - }); - - folderTree.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent e) { - IStructuredSelection selection = (IStructuredSelection)folderTree.getSelection(); - if(selection.size() == 1) { - expandInTreeCurrentSelection(selection, true /*toggle expanded*/); - } - } - }); - - folderTree.setSorter(new ViewerSorter() { - public int compare(Viewer viewer, Object e1, Object e2) { - String name1 = ""; //$NON-NLS-1$ - String name2 = ""; //$NON-NLS-1$ - if(e1 instanceof RemoteResourceElement) { - name1 = ((RemoteResourceElement)e1).getRemoteResource().getName(); - } else if(e1 instanceof SiteElement) { - name1 = ((SiteElement)e1).getSite().getURL().toExternalForm(); - } - if(e2 instanceof RemoteResourceElement) { - name2 = ((RemoteResourceElement)e2).getRemoteResource().getName(); - } else if(e2 instanceof SiteElement) { - name2 = ((SiteElement)e2).getSite().getURL().toExternalForm(); - } - - return getCollator().compare(name1, name2); - } - }); - - // show only folders in tree - folderTree.addFilter(new ViewerFilter() { - public boolean select(Viewer viewer, Object parentElement, Object element) { - if(element instanceof RemoteResourceElement) { - return ((RemoteResourceElement)element).getRemoteResource().isContainer(); - } - return false; - } - }); - - Table table = new Table(sash, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); - TableLayout layout = new TableLayout(); - table.setLayout(layout); - table.setHeaderVisible(true); - - TableColumn tableColumn = new TableColumn(table, SWT.NULL); - tableColumn.setText(Policy.bind("SiteExplorerView.Name_1")); //$NON-NLS-1$ - tableColumn.addSelectionListener(getColumnListener()); - layout.addColumnData(new ColumnWeightData(30, true)); - - tableColumn = new TableColumn(table, SWT.NULL); - tableColumn.setText(Policy.bind("SiteExplorerView.Size_2")); //$NON-NLS-1$ - tableColumn.setAlignment(SWT.RIGHT); - tableColumn.addSelectionListener(getColumnListener()); - layout.addColumnData(new ColumnWeightData(10, true)); - - tableColumn = new TableColumn(table, SWT.NULL); - tableColumn.setText(Policy.bind("SiteExplorerView.Modified_3")); //$NON-NLS-1$ - tableColumn.addSelectionListener(getColumnListener()); - layout.addColumnData(new ColumnWeightData(30, true)); - - tableColumn = new TableColumn(table, SWT.NULL); - tableColumn.setText(Policy.bind("SiteExplorerView.URL_4")); //$NON-NLS-1$ - layout.addColumnData(new ColumnWeightData(30, true)); - - folderContentsTable = new TableViewer(table); - folderContentsTable.setContentProvider(new SiteLazyContentProvider()); - folderContentsTable.setLabelProvider(new SiteExplorerViewLabelProvider()); - - folderContentsTable.getControl().addKeyListener(new KeyAdapter() { - public void keyPressed(KeyEvent event) { - if (event.keyCode == SWT.F5) { - RemoteResourceElement folder = (RemoteResourceElement)folderContentsTable.getInput(); - if(folder != null) { - folder.setCachedChildren(null); - folderContentsTable.refresh(); - } - } - } - }); - - folderContentsTable.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent e) { - IStructuredSelection selection = (IStructuredSelection)folderContentsTable.getSelection(); - if(selection.size() == 1) { - final RemoteResourceElement[] remoteFolders = getSelectedRemoteFolder(selection); - if(remoteFolders.length == 1) { - IStructuredSelection treeSelection = (IStructuredSelection)folderTree.getSelection(); - expandInTreeCurrentSelection(treeSelection, false /*don't toggle*/); - folderTree.setSelection(new StructuredSelection(remoteFolders[0])); - } - } - } - }); - FolderListingSorter sorter = new FolderListingSorter(FolderListingSorter.NAME); - sorter.setReversed(false); - folderContentsTable.setSorter(sorter); - - sash.setWeights(new int[] {33, 67}); - - TargetManager.addSiteListener(this); - - root = new SiteRootsElement(getViewSite().getWorkbenchWindow()); - initalizeActions(); - folderTree.setInput(root); - - // F1 Help - WorkbenchHelp.setHelp(folderTree.getControl(), IHelpContextIds.SITE_EXPLORER_VIEW); - } - - private Shell getShell() { - return folderTree.getTree().getShell(); - } - - private RemoteResourceElement[] getSelectedRemoteFolder(IStructuredSelection selection) { - if (!selection.isEmpty()) { - final List folders = new ArrayList(); - Iterator it = selection.iterator(); - while(it.hasNext()) { - Object o = it.next(); - if(o instanceof RemoteResourceElement) { - folders.add(o); - } - } - return (RemoteResourceElement[]) folders.toArray(new RemoteResourceElement[folders.size()]); - } - return new RemoteResourceElement[0]; - } - - private void expandInTreeCurrentSelection(IStructuredSelection selection, boolean toggle) { - if (!selection.isEmpty()) { - Iterator it = selection.iterator(); - while(it.hasNext()) { - Object element = it.next(); - if(toggle) { - folderTree.setExpandedState(element, !folderTree.getExpandedState(element)); - } else { - folderTree.setExpandedState(element, true); - } - } - } - } - - /** - * Method updateFileTable. - */ - private void updateFileTable(RemoteResourceElement remoteFolder) { - if(remoteFolder != null && !remoteFolder.equals(folderContentsTable.getInput())) { - folderContentsTable.setInput(remoteFolder); - } - } - - private void initalizeActions() { - final Shell shell = folderContentsTable.getTable().getShell(); - // Create actions - - // Refresh (toolbar) - addSiteAction = new Action(Policy.bind("SiteExplorerView.addSiteAction"), TeamImages.getImageDescriptor(UIConstants.IMG_SITE_ELEMENT)) { //$NON-NLS-1$ - public void run() { - ConfigureTargetWizard wizard = new ConfigureTargetWizard(); - wizard.init(null, null); - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.open(); - } - }; - addSiteAction.setToolTipText(Policy.bind("SiteExplorerView.addSiteActionTooltip")); //$NON-NLS-1$ - WorkbenchHelp.setHelp(addSiteAction, IHelpContextIds.ADD_SITE_ACTION); - - newFolderAction = new Action(Policy.bind("SiteExplorerView.newFolderAction"), WorkbenchImages.getImageDescriptor(org.eclipse.ui.ISharedImages.IMG_OBJ_FOLDER)) { //$NON-NLS-1$ - public void run() { - final Shell shell = folderTree.getTree().getShell(); - try { - // assume that only one folder is selected in the folder tree, this - // is enforced by isEnable() method for this action - IStructuredSelection selection = (IStructuredSelection)folderTree.getSelection(); - Object currentSelection = selection.getFirstElement(); - - RemoteResourceElement selectedFolder; - if(!selection.isEmpty()) { - selectedFolder = getSelectedRemoteFolder(selection)[0]; - } else { - selectedFolder = (RemoteResourceElement)folderContentsTable.getInput(); - } - - IRemoteTargetResource newFolder = CreateNewFolderAction.createDir(shell, selectedFolder.getRemoteResource(), Policy.bind("CreateNewFolderAction.newFolderName")); //$NON-NLS-1$ - if (newFolder == null) - return; - - // force a refresh - selectedFolder.setCachedChildren(null); - - // select the newly added folder - RemoteResourceElement newFolderUIElement = new RemoteResourceElement(newFolder); - folderTree.refresh(currentSelection); - expandInTreeCurrentSelection(new StructuredSelection(currentSelection), false); - folderTree.setSelection(new StructuredSelection(newFolderUIElement)); - } catch (TeamException e) { - TeamUIPlugin.handle(e); - return; - } - } - public boolean isEnabled() { - return folderContentsTable.getInput() != null || - getSelectedRemoteFolder((IStructuredSelection)folderTree.getSelection()).length == 1; - } - }; - WorkbenchHelp.setHelp(newFolderAction, IHelpContextIds.NEW_FOLDER_ACTION); - - IActionBars bars = getViewSite().getActionBars(); - IToolBarManager tbm = bars.getToolBarManager(); - tbm.add(addSiteAction); - tbm.update(false); - - // Properties - propertiesAction = new PropertyDialogAction(shell, folderTree); - getViewSite().getActionBars().setGlobalActionHandler(IWorkbenchActionConstants.PROPERTIES, propertiesAction); - IStructuredSelection selection = (IStructuredSelection)folderTree.getSelection(); - if (selection.size() == 1 && selection.getFirstElement() instanceof SiteElement) { - propertiesAction.setEnabled(true); - } else { - propertiesAction.setEnabled(false); - } - folderTree.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - IStructuredSelection ss = (IStructuredSelection)event.getSelection(); - boolean enabled = ss.size() == 1 && ss.getFirstElement() instanceof SiteElement; - propertiesAction.setEnabled(enabled); - } - }); - - MenuManager treeMgr = new MenuManager(); - MenuManager tableMgr = new MenuManager(); - Tree tree = folderTree.getTree(); - Table table = folderContentsTable.getTable(); - Menu treeMenu = treeMgr.createContextMenu(tree); - Menu tableMenu = tableMgr.createContextMenu(table); - IMenuListener menuListener = new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - // Misc additions - MenuManager sub = new MenuManager(Policy.bind("SiteExplorerView.newMenu"), IWorkbenchActionConstants.GROUP_ADD); //$NON-NLS-1$ - sub.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - manager.add(sub); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - sub.add(addSiteAction); - sub.add(newFolderAction); - manager.add(propertiesAction); - } - }; - treeMgr.addMenuListener(menuListener); - treeMgr.setRemoveAllWhenShown(true); - tableMgr.addMenuListener(menuListener); - tableMgr.setRemoveAllWhenShown(true); - tree.setMenu(treeMenu); - table.setMenu(tableMenu); - getSite().registerContextMenu(tableMgr, folderContentsTable); - getSite().registerContextMenu(treeMgr, folderTree); - } - - /** - * Add the new site to the viewer and make it the current selection. - * - * @see ISiteListener#siteAdded(Site) - */ - public void siteAdded(Site site) { - SiteElement element = new SiteElement(site, getViewSite().getWorkbenchWindow()); - folderTree.add(root, element); - folderTree.setSelection(new StructuredSelection(element)); - } - - /** - * Remote the site from the viewer and select the next site in the - * tree. - * - * @see ISiteListener#siteRemoved(Site) - */ - public void siteRemoved(Site site) { - folderTree.remove(new SiteElement(site)); - selectNextObjectInTreeViewer(); - } - - private void selectNextObjectInTreeViewer() { - Object[] items = folderTree.getVisibleExpandedElements(); - if(items.length > 0) { - folderTree.setSelection(new StructuredSelection(items[0])); - } else { - folderContentsTable.setInput(null); - } - } - - /** - * Adds the listener that sets the sorter. - */ - private SelectionListener getColumnListener() { - /** - * This class handles selections of the column headers. - * Selection of the column header will cause resorting - * of the shown tasks using that column's sorter. - * Repeated selection of the header will toggle - * sorting order (ascending versus descending). - */ - return new SelectionAdapter() { - /** - * Handles the case of user selecting the - * header area. - * <p>If the column has not been selected previously, - * it will set the sorter of that column to be - * the current tasklist sorter. Repeated - * presses on the same column header will - * toggle sorting order (ascending/descending). - */ - public void widgetSelected(SelectionEvent e) { - // column selected - need to sort - // only allow sorting on name for now - int column = folderContentsTable.getTable().indexOf((TableColumn) e.widget); - if(column == FolderListingSorter.NAME) { - FolderListingSorter oldSorter = (FolderListingSorter)folderContentsTable.getSorter(); - if (oldSorter != null && column == oldSorter.getColumnNumber()) { - oldSorter.setReversed(!oldSorter.isReversed()); - folderContentsTable.refresh(); - } else { - folderContentsTable.setSorter(new FolderListingSorter(column)); - } - } - } - }; - } - - /** - * @see IWorkbenchPart#setFocus() - */ - public void setFocus() { - } - /** - * @see org.eclipse.ui.IWorkbenchPart#dispose() - */ - public void dispose() { - super.dispose(); - TargetManager.removeSiteListener(this); - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerViewLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerViewLabelProvider.java deleted file mode 100644 index a0f2e0ef9..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerViewLabelProvider.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.swt.graphics.Image; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.ui.model.WorkbenchLabelProvider; - -public class SiteExplorerViewLabelProvider extends WorkbenchLabelProvider implements ITableLabelProvider { - - public Image getColumnImage(Object element, int columnIndex) { - if (columnIndex == 0) { - return super.getImage(element); - } - return null; - } - public String getColumnText(Object element, int columnIndex) { - switch (columnIndex) { - case 0 : - return super.getText(element); - case 1 : - if(element instanceof RemoteResourceElement) { - RemoteResourceElement remote = ((RemoteResourceElement)element); - if(remote.getRemoteResource().isContainer()) { - return ""; //$NON-NLS-1$ - } - int size = remote.getSize(); - int sizeKb = size / 1000; - if(sizeKb == 0 && size % 1000 > 0) { - sizeKb = 1; - } - return Policy.bind("SiteExplorerViewLabelProvider.fileSize", new Integer(sizeKb).toString()); //$NON-NLS-1$ - } - case 2 : - if(element instanceof RemoteResourceElement) { - return ((RemoteResourceElement)element).getLastModified(); - } - case 3 : - if(element instanceof RemoteResourceElement) { - return ((RemoteResourceElement)element).getRemoteResource().getURL().toExternalForm(); - } - } - return ""; //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteLazyContentProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteLazyContentProvider.java deleted file mode 100644 index 0bdf305f0..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteLazyContentProvider.java +++ /dev/null @@ -1,25 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.ui.model.WorkbenchContentProvider; - -public class SiteLazyContentProvider extends WorkbenchContentProvider { - - public boolean hasChildren(Object element) { - if (element == null) { - return false; - } - // the + box will always appear, but then disappear - // if not needed after you first click on it. - return true; // just always return true to avoid going to server - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java deleted file mode 100644 index d7022f3a4..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.jface.operation.IRunnableContext; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.ui.model.IWorkbenchAdapter; - -/** - * Used to show all Sites defined in the workbench. - */ -public class SiteRootsElement implements IWorkbenchAdapter, IAdaptable { - private Site[] sites = null; - - // progress monitoring support - private IRunnableContext runContext; - - public SiteRootsElement(Site[] sites, IRunnableContext runContext) { - this.sites = sites; - this.runContext = runContext; - } - - public SiteRootsElement(IRunnableContext runContext) { - this(null, runContext); - } - - public ImageDescriptor getImageDescriptor(Object object) { - return null; - } - - public Object[] getChildren(Object o) { - Site[] childSites; - if(sites == null) { - childSites = TargetManager.getSites(); - } else { - childSites = sites; - } - SiteElement[] siteElements = new SiteElement[childSites.length]; - for (int i = 0; i < childSites.length; i++) { - siteElements[i] = new SiteElement(childSites[i], runContext); - } - return siteElements; - } - - public String getLabel(Object o) { - return null; - } - - public Object getAdapter(Class adapter) { - if (adapter == IWorkbenchAdapter.class) return this; - return null; - } - - public Object getParent(Object o) { - return null; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java deleted file mode 100644 index 6e4681c4a..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java +++ /dev/null @@ -1,187 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.core.target.UrlUtil; -import org.eclipse.team.internal.ui.IHelpContextIds; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.model.WorkbenchContentProvider; -import org.eclipse.ui.model.WorkbenchLabelProvider; - -/** - * Wizard page that allows selecting an existing target provider site - * or to create a new site. - */ -public class SiteSelectionPage extends TargetWizardPage { - private TableViewer table; - private Button useExistingRepo; - private Button useNewRepo; - private Button disconnectTarget; - private Site site; - private TargetProvider currentProvider; - - private boolean disconnect = false; - - public SiteSelectionPage(String pageName, String title, ImageDescriptor titleImage, TargetProvider currentProvider) { - super(pageName, title, titleImage); - setDescription(Policy.bind("SiteSelectionPage.description")); //$NON-NLS-1$ - this.currentProvider = currentProvider; - } - - protected TableViewer createTable(Composite parent) { - Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); - table.setLayoutData(new GridData(GridData.FILL_BOTH)); - TableLayout layout = new TableLayout(); - layout.addColumnData(new ColumnWeightData(100, true)); - table.setLayout(layout); - TableColumn col = new TableColumn(table, SWT.NONE); - col.setResizable(true); - - return new TableViewer(table); - } - - public void createControl(Composite parent) { - Composite composite = createComposite(parent, 2); - // set F1 help - WorkbenchHelp.setHelp(composite, IHelpContextIds.TARGET_NEW_SITE_PAGE); - - Label description = new Label(composite, SWT.WRAP); - GridData data = new GridData(); - data.horizontalSpan = 2; - data.widthHint = 350; - description.setLayoutData(data); - description.setText(Policy.bind("SiteSelectionPage.label")); //$NON-NLS-1$ - - useExistingRepo = createRadioButton(composite, Policy.bind("SiteSelectionPage.useExisting"), 2); //$NON-NLS-1$ - table = createTable(composite); - table.setContentProvider(new WorkbenchContentProvider()); - table.setLabelProvider(new WorkbenchLabelProvider() { - protected String decorateText(String input, Object element) { - if(currentProvider != null && element.equals(new SiteElement(currentProvider.getSite()))) { - IPath mapping = UrlUtil.getTrailingPath(currentProvider.getURL(), currentProvider.getSite().getURL()); - if(mapping.isEmpty()) { - return Policy.bind("SiteSelectionPage.siteLabelCurrent", super.decorateText(input, element)); //$NON-NLS-1$ - } else { - return Policy.bind("SiteSelectionPage.siteLabelCurrentWithMapping", super.decorateText(input, element), mapping.toString()); //$NON-NLS-1$ - } - } - return super.decorateText(input, element); - } - }); - - table.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - SiteElement siteElement = (SiteElement)((IStructuredSelection)table.getSelection()).getFirstElement(); - if(siteElement != null) { - site = siteElement.getSite(); - setPageComplete(true); - } else { - setPageComplete(false); - } - } - }); - useNewRepo = createRadioButton(composite, Policy.bind("SiteSelectionPage.createNew"), 2); //$NON-NLS-1$ - - useExistingRepo.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - if (!useExistingRepo.getSelection()) { - table.getTable().setEnabled(false); - site = null; - } else { - table.getTable().setEnabled(true); - SiteElement siteElement = (SiteElement)((IStructuredSelection)table.getSelection()).getFirstElement(); - if(siteElement != null) { - site = siteElement.getSite(); - } - } - } - }); - - useNewRepo.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - SiteSelectionPage.this.setPageComplete(! useNewRepo.getSelection()); - } - }); - - - if(currentProvider != null ) { - disconnectTarget = createRadioButton(composite, Policy.bind("SiteSelectionPage.disconnectTarget"), 2); //$NON-NLS-1$ - disconnectTarget.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - disconnect = disconnectTarget.getSelection(); - SiteSelectionPage.this.setPageComplete(true); - } - }); - } - - setControl(composite); - initializeValues(); - } - - /** - * Initializes states of the controls. - */ - private void initializeValues() { - Site[] sites = TargetManager.getSites(); - table.setInput(new SiteRootsElement(null /* no progress monitoring required */)); - if (sites.length == 0) { - useNewRepo.setSelection(true); - } else { - useExistingRepo.setSelection(true); - if(currentProvider != null) { - table.setSelection(new StructuredSelection(new SiteElement(currentProvider.getSite()))); - } else { - table.setSelection(new StructuredSelection(new SiteElement(sites[0]))); - } - } - } - - public Site getSite() { - return site; - } - - public boolean isDisconnect() { - return disconnect; - } - - /** - * @see org.eclipse.jface.wizard.IWizardPage#canFlipToNextPage() - */ - public boolean canFlipToNextPage() { - if(isDisconnect()) { - return false; - } else { - return true; - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteViewSorter.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteViewSorter.java deleted file mode 100644 index c0e12ee71..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteViewSorter.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.net.URL; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.team.internal.core.target.Site; - -public class SiteViewSorter extends ViewerSorter { - - public int category(Object element) { - if (element instanceof Site) { - return ((Site)element).getType().hashCode(); - } - return 0; - } - - public int compare(Viewer viewer, Object o1, Object o2) { - int cat1 = category(o1); - int cat2 = category(o2); - if (cat1 != cat2) return cat1 - cat2; - - if (o1 instanceof Site && o2 instanceof Site) { - URL site1 = ((Site)o1).getURL(); - URL site2 = ((Site)o2).getURL(); - return site1.toExternalForm().compareTo(site2.toExternalForm()); - } - return super.compare(viewer, o1, o2); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SyncAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SyncAction.java deleted file mode 100644 index e4be4c143..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SyncAction.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - - -import org.eclipse.core.resources.IResource; -import org.eclipse.jface.action.IAction; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteSyncElement; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.actions.TeamAction; -import org.eclipse.team.internal.ui.sync.SyncCompareInput; -import org.eclipse.team.internal.ui.sync.SyncView; - -/** - * Action for catchup/release in popup menus. - */ -public class SyncAction extends TeamAction { - - public void run(IAction action) { - IResource[] resources = getSelectedResources(); - SyncView view = SyncView.findViewInActivePage(getTargetPage()); - if (view != null) { - view.showSync(getCompareInput(resources), getTargetPage()); - } - } - - protected boolean isEnabled() throws TeamException { - IResource[] resources = getSelectedResources(); - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - if (!resource.isAccessible()) return false; - TargetProvider provider = TargetManager.getProvider(resource.getProject()); - if(provider == null) return false; - } - return true; - } - - protected SyncCompareInput getCompareInput(IResource[] resources) { - return new TargetSyncCompareInput(resources, IRemoteSyncElement.GRANULARITY_TIMESTAMP); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java deleted file mode 100644 index b51073f49..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceVisitor; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.team.internal.ui.actions.TeamAction; - -public abstract class TargetAction extends TeamAction { - /** - * Get selected remote target folders - */ - protected IRemoteTargetResource[] getSelectedRemoteFolders() { - ArrayList resources = null; - if (!selection.isEmpty()) { - resources = new ArrayList(); - Iterator elements = ((IStructuredSelection) selection).iterator(); - while (elements.hasNext()) { - Object next = elements.next(); - IRemoteTargetResource remote = null; - if (next instanceof RemoteResourceElement) { - remote = ((RemoteResourceElement)next).getRemoteResource(); - } else if(next instanceof SiteElement) { - try { - remote = ((SiteElement)next).getSite().getRemoteResource(); - } catch (TeamException e) { - TeamUIPlugin.handle(e); - return new IRemoteTargetResource[0]; - } - } - if(remote != null && remote.isContainer()) { - resources.add(remote); - continue; - } - } - } - if (resources != null && !resources.isEmpty()) { - return (IRemoteTargetResource[])resources.toArray(new IRemoteTargetResource[resources.size()]); - } - return new IRemoteTargetResource[0]; - } - - /** - * Get selected remote target folders - */ - protected Site[] getSelectedSites() { - ArrayList sites = new ArrayList();; - if (!selection.isEmpty()) { - Iterator elements = ((IStructuredSelection) selection).iterator(); - while (elements.hasNext()) { - Object next = elements.next(); - IRemoteTargetResource remote = null; - if (next instanceof SiteElement) { - sites.add(((SiteElement)next).getSite()); - } - } - } - return (Site[])sites.toArray(new Site[sites.size()]); - } - - protected IResource[] findResourcesWithOutgoingChanges(IResource[] resources) throws TeamException, CoreException { - // Collect the dirty resource - final List dirtyResources = new ArrayList(); - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - final TargetProvider provider = TargetManager.getProvider(resource.getProject()); - resource.accept(new IResourceVisitor() { - public boolean visit(IResource resource) throws CoreException { - if (resource.getType() == IResource.FILE) { - if (provider.isDirty(resource) || ! provider.hasBase(resource)) { - dirtyResources.add(resource); - } - } else { - // Check for outgoing folder deletions? - } - return true; - } - }, IResource.DEPTH_INFINITE, true /* include phantoms */); - } - return (IResource[]) dirtyResources.toArray(new IResource[dirtyResources.size()]); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetCatchupReleaseViewer.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetCatchupReleaseViewer.java deleted file mode 100644 index a2770d958..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetCatchupReleaseViewer.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.internal.ui.IHelpContextIds; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.sync.CatchupReleaseViewer; -import org.eclipse.team.internal.ui.sync.SyncView; -import org.eclipse.ui.help.WorkbenchHelp; -public class TargetCatchupReleaseViewer extends CatchupReleaseViewer { - private GetSyncAction getAction; - private PutSyncAction putAction; - - public TargetCatchupReleaseViewer(Composite parent, TargetSyncCompareInput input) { - super(parent, input); - initializeActions(input); - // set F1 help - WorkbenchHelp.setHelp(this.getControl(), IHelpContextIds.TARGET_CATCHUP_RELEASE_VIEWER); - } - - /** - * Creates the actions for this viewer. - */ - private void initializeActions(final TargetSyncCompareInput diffModel) { - Shell shell = getControl().getShell(); - getAction = new GetSyncAction(diffModel, this, Policy.bind("TargetCatchupReleaseViewer.Get_1"), shell); //$NON-NLS-1$ - putAction = new PutSyncAction(diffModel, this, Policy.bind("TargetCatchupReleaseViewer.Put_2"), shell); //$NON-NLS-1$ - } - protected void fillContextMenu(IMenuManager manager) { - super.fillContextMenu(manager); - manager.add(new Separator()); - switch (getSyncMode()) { - case SyncView.SYNC_INCOMING: - getAction.update(SyncView.SYNC_INCOMING); - manager.add(getAction); - break; - case SyncView.SYNC_OUTGOING: - putAction.update(SyncView.SYNC_INCOMING); - manager.add(putAction); - break; - case SyncView.SYNC_BOTH: - getAction.update(SyncView.SYNC_INCOMING); - manager.add(getAction); - putAction.update(SyncView.SYNC_INCOMING); - manager.add(putAction); - break; - } - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetProjectAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetProjectAction.java deleted file mode 100644 index 1e3c15bba..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetProjectAction.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.actions.TeamAction; - -public class TargetProjectAction extends TeamAction { - /* - * Method declared on IActionDelegate. - */ - public void run(IAction action) { - run(new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - IProject project = getSelectedProjects()[0]; - ConfigureTargetWizard wizard = new ConfigureTargetWizard(); - wizard.init(null, project); - WizardDialog dialog = new WizardDialog(getShell(), wizard); - dialog.open(); - } catch (Exception e) { - throw new InvocationTargetException(e); - } - } - }, Policy.bind("ConfigureTargetAction.configureProject"), PROGRESS_BUSYCURSOR); //$NON-NLS-1$ - } - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() { - IProject[] selectedProjects = getSelectedProjects(); - if (selectedProjects.length != 1) return false; - if (!selectedProjects[0].isAccessible()) return false; -/* try { - if (TargetManager.getProvider(selectedProjects[0]) == null) return true; - } catch (TeamException e) { - TeamPlugin.log(IStatus.ERROR, "Exception getting provider", e); - return false; - } - return false; -*/ - return true; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteContentHandler.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteContentHandler.java deleted file mode 100644 index 9212c6776..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteContentHandler.java +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.LinkedList; -import java.util.List; -import java.util.Properties; - -import org.xml.sax.Attributes; -import org.xml.sax.ContentHandler; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -public class TargetSiteContentHandler extends DefaultHandler implements ContentHandler { - private StringBuffer buffer; - private List propList; - private String target; - - /** - * Constructor for TargetSiteContentHandler. - */ - public TargetSiteContentHandler() { - super(); - propList=new LinkedList(); - } - - /** - * @see org.xml.sax.ContentHandler#characters(char[], int, int) - */ - public void characters(char[] ch, int start, int length) throws SAXException { - if (buffer!=null) - buffer.append(ch, start, length); - } - - /** - * @see org.xml.sax.ContentHandler#endElement(String, String, String) - */ - public void endElement(String namespaceURI, String localName, String qName) throws SAXException { - if (qName.equals("site")) { //$NON-NLS-1$ - Properties props=new Properties(); - byte[] bytes=buffer.toString().getBytes(); - InputStream iStream=new ByteArrayInputStream(bytes); - try { - props.load(iStream); - props.setProperty("target", target); //$NON-NLS-1$ - propList.add(props); - } catch (IOException e) { - //TODO: log an error. - } - } - } - - /** - * Retrieve the property list that has been built up. - * @return Properties[] - */ - Properties[] getProperties() { - return (Properties[]) propList.toArray(new Properties[propList.size()]); - } - - /** - * @see org.xml.sax.ContentHandler#startElement(String, String, String, Attributes) - */ - public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { - if (qName.equals("site")) { //$NON-NLS-1$ - buffer = new StringBuffer(); - target=atts.getValue("target"); //$NON-NLS-1$ - } - } - - /** - * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int) - */ - public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { - ; - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteExportWizard.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteExportWizard.java deleted file mode 100644 index e550b3df1..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteExportWizard.java +++ /dev/null @@ -1,191 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.lang.reflect.InvocationTargetException; -import java.util.Properties; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.ProjectSetImportWizard; -import org.eclipse.team.internal.ui.UIConstants; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IExportWizard; -import org.eclipse.ui.IWorkbench; - -/** - * This wizard allows the user to save the settings used by Target sites to a file. - */ -public class TargetSiteExportWizard extends Wizard implements IExportWizard { - private ExportTargetSiteMainPage mainPage; - private IStructuredSelection selection; - /** - * Constructor for TargetSiteExportWizard. - */ - public TargetSiteExportWizard() { - setNeedsProgressMonitor(true); - setWindowTitle(Policy.bind("TargetSiteExportWizard.Target_Site")); //$NON-NLS-1$ - } - - /** - * @see org.eclipse.jface.wizard.IWizard#performFinish() - */ - public boolean performFinish() { - final boolean[] result = new boolean[] { false }; - try { - getContainer().run(false, false, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException { - String filename = mainPage.getFileName(); - Path path = new Path(filename); - if (path.getFileExtension() == null) { - filename = filename + ".tsf"; //$NON-NLS-1$ - } - ProjectSetImportWizard.lastFile = filename; - File file = new File(filename); - File parentFile = file.getParentFile(); - if (parentFile != null && !parentFile.exists()) { - boolean r = MessageDialog.openQuestion( - getShell(), - Policy.bind("TargetSiteExportWizard.Creation_Question"), //$NON-NLS-1$ - Policy.bind("TargetSiteExportWizard.Create_dir")); //$NON-NLS-1$ - if (!r) { - result[0] = false; - return; - } - r = parentFile.mkdirs(); - if (!r) { - MessageDialog.openError(getShell(), - Policy.bind("TargetSiteExportWizard.Export_Problems"), //$NON-NLS-1$ - Policy.bind("TargetSiteExportWizard.Directory_creation_error") //$NON-NLS-1$ - ); - result[0] = false; - return; - } - } - if (file.exists() && file.isFile()) { - boolean r = MessageDialog.openQuestion( - getShell(), - Policy.bind("TargetSiteExportWizard.Overwrite_Question"), //$NON-NLS-1$ - Policy.bind("TargetSiteExportWizard.Overwrite_file") //$NON-NLS-1$ - ); - if (!r) { - result[0] = false; - return; - } - } - BufferedWriter writer = null; - try { - OutputStream jout = new FileOutputStream(file); - - writer = new BufferedWriter(new OutputStreamWriter(jout, "UTF-8")); //$NON-NLS-1$ - writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); //$NON-NLS-1$ - writer.newLine(); - writer.write("<tsf version=\"2.0\">"); //$NON-NLS-1$ - writer.newLine(); - writer.flush(); - - Site[] sites = mainPage.getSelectedSites(); - Properties props; - monitor.beginTask(null, 5 * sites.length); - String target; - - //The 1st one needs to have a unique comment since it only requires an opening tag: - props = sites[0].getConfiguration(); - monitor.worked(2); - target=sites[0].getType(); - monitor.worked(1); - props.store(jout, "<site target=\""+target+"\">"); //$NON-NLS-1$ //$NON-NLS-2$ - monitor.worked(2); - - // For each additional site, write the config to disk: - for (int i = 1; i < sites.length; i++) { - props = sites[i].getConfiguration(); - monitor.worked(2); - target=sites[i].getType(); - monitor.worked(1); - props.store(jout, "</site> <site target=\""+target+"\">"); //$NON-NLS-1$ //$NON-NLS-2$ - monitor.worked(2); - } - jout.flush();//This line may not actually be needed but it's not doing any harm either. - - writer.write("</site>"); //$NON-NLS-1$ - writer.newLine(); - writer.write("</tsf>"); //$NON-NLS-1$ - writer.newLine(); - result[0] = true; - } catch (IOException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - if (writer != null) { - try { - writer.close(); - } catch (IOException e) { - throw new InvocationTargetException(e); - } - } - } - } - }); - } catch (InterruptedException e) { - return true; - } catch (InvocationTargetException e) { - Throwable target = e.getTargetException(); - if (target instanceof TeamException) { - ErrorDialog.openError(getShell(), null, null, ((TeamException) target).getStatus()); - return false; - } - if (target instanceof RuntimeException) { - throw (RuntimeException) target; - } - if (target instanceof Error) { - throw (Error) target; - } - } - return result[0]; - } - - /** - * @see org.eclipse.ui.IWorkbenchWizard#init(IWorkbench, IStructuredSelection) - */ - public void init(IWorkbench workbench, IStructuredSelection selection) { - this.selection = selection; - } - - /** - * @see org.eclipse.jface.wizard.IWizard#addPages() - */ - public void addPages() { - mainPage = new ExportTargetSiteMainPage("targetSiteMainPage", //$NON-NLS-1$ - Policy.bind("TargetSiteExportWizard.Export_a_Target_Site"), //$NON-NLS-1$ - TeamImages.getImageDescriptor(UIConstants.IMG_PROJECTSET_EXPORT_BANNER) //TODO: We need our own banner... - ); - Site[] sites = (Site[]) selection.toList().toArray(new Site[0]); - mainPage.setSelectedSites(sites); - mainPage.setFileName(ProjectSetImportWizard.lastFile); - addPage(mainPage); - } - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteImportWizard.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteImportWizard.java deleted file mode 100644 index 1ea086e35..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSiteImportWizard.java +++ /dev/null @@ -1,158 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Properties; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.Assert; -import org.eclipse.team.internal.core.target.ISiteFactory; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.UIConstants; -import org.eclipse.team.ui.TeamImages; -import org.eclipse.ui.IImportWizard; -import org.eclipse.ui.IWorkbench; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -public class TargetSiteImportWizard extends Wizard implements IImportWizard { - public static String lastFile; - - private ImportTargetSiteMainPage mainPage; - - /** - * Retrieves the Site object that the TargetProvider is contained in. - * @return Site - */ - Site getSite(Properties properties) { - try { - URL url = new URL(properties.getProperty("location")); //$NON-NLS-1$ - return TargetManager.getSite(properties.getProperty("target"), url); //$NON-NLS-1$ - } catch (MalformedURLException e) { - return null; - } - } - - public TargetSiteImportWizard() { - setNeedsProgressMonitor(true); - setWindowTitle(Policy.bind("TargetSiteImportWizard.Target_Site")); //$NON-NLS-1$ - } - - public void addPages() { - mainPage = new ImportTargetSiteMainPage( - "targetSiteMainPage", //$NON-NLS-1$ - Policy.bind("TargetSiteImportWizard.Import_Target_Site"), //$NON-NLS-1$ - TeamImages.getImageDescriptor(UIConstants.IMG_PROJECTSET_IMPORT_BANNER) - ); - mainPage.setFileName(lastFile); - addPage(mainPage); - } - - /** - * @see org.eclipse.jface.wizard.IWizard#performFinish() - */ - public boolean performFinish() { - try { - getContainer().run(true, true, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException { - InputStreamReader reader = null; - try { - String filename = mainPage.getFileName(); - lastFile = filename; - reader = new InputStreamReader(new FileInputStream(filename), "UTF-8"); //$NON-NLS-1$ - - SAXParserFactory factory = SAXParserFactory.newInstance(); - SAXParser parser; - parser = factory.newSAXParser(); - TargetSiteContentHandler handler = new TargetSiteContentHandler(); - InputSource source = new InputSource(reader); - parser.parse(source, handler); - - Properties[] propList = handler.getProperties(); - for (int i = 0; i < propList.length; i++) { - String target = propList[i].getProperty("target"); //$NON-NLS-1$ - ISiteFactory siteFactory = TargetManager.getSiteFactory(target); - Assert.isNotNull(siteFactory); - - final Site newsite = siteFactory.newSite(propList[i]); - Site[] existingSites = TargetManager.getSites(); - boolean dupe = false; - for (int j = 0; j < existingSites.length; j++) { - if (existingSites[j].equals(newsite)) - dupe = true; - } - if (!dupe) { - getShell().getDisplay().syncExec(new Runnable() { - public void run() { - TargetManager.addSite(newsite); - } - }); - } - } - - } catch (IOException e) { - throw new InvocationTargetException(e); - } catch (ParserConfigurationException e) { - throw new InvocationTargetException(e); - } catch (SAXException e) { - throw new InvocationTargetException(e); - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - throw new InvocationTargetException(e); - } - } - } - } - }); - } catch (InterruptedException e) { - return true; - } catch (InvocationTargetException e) { - Throwable target = e.getTargetException(); - if (target instanceof TeamException) { - ErrorDialog.openError(getShell(), null, null, ((TeamException) target).getStatus()); - return false; - } - if (target instanceof RuntimeException) { - throw (RuntimeException) target; - } - if (target instanceof Error) { - throw (Error) target; - } - } - return true; - } - - /** - * @see org.eclipse.ui.IWorkbenchWizard#init(IWorkbench, IStructuredSelection) - */ - public void init(IWorkbench workbench, IStructuredSelection selection) {} - -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncAction.java deleted file mode 100644 index 4c8094e1a..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncAction.java +++ /dev/null @@ -1,235 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.List; -import java.util.Set; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.compare.structuremergeviewer.IDiffContainer; -import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.team.internal.ui.sync.ChangedTeamContainer; -import org.eclipse.team.internal.ui.sync.ITeamNode; -import org.eclipse.team.internal.ui.sync.SyncSet; -import org.eclipse.team.internal.ui.sync.UnchangedTeamContainer; - -public abstract class TargetSyncAction extends Action { - private TargetSyncCompareInput diffModel; - private ISelectionProvider selectionProvider; - - protected int syncMode; - private Shell shell; - - protected static IRemoteResource getRemoteResourceFor(IResource local) throws TeamException { - return TargetManager.getProvider(local.getProject()).getRemoteResourceFor(local); - } - - /** - * Creates a TargetSyncAction which works on selection and doesn't commit changes. - */ - public TargetSyncAction(TargetSyncCompareInput model, ISelectionProvider sp, String label, Shell shell) { - super(label); - this.diffModel = model; - this.selectionProvider = sp; - this.shell = shell; - } - - protected Shell getShell() { - return shell; - } - - protected TargetSyncCompareInput getDiffModel() { - return diffModel; - } - - /** - * Returns true if at least one node can perform the specified action. - */ - private boolean isEnabled(Object[] nodes) { - for (int i = 0; i < nodes.length; i++) { - if (nodes[i] instanceof ITeamNode) { - ITeamNode node = (ITeamNode)nodes[i]; - if (isEnabled(node)) { - return true; - } - } else { - if (nodes[i] instanceof IDiffContainer) - if (isEnabled(((IDiffContainer)nodes[i]).getChildren())) - return true; - } - } - return false; - } - - protected abstract boolean isEnabled(ITeamNode node); - - /** - * Perform the sychronization operation. - */ - public void run() { - ISelection s = selectionProvider.getSelection(); - if (!(s instanceof IStructuredSelection) || s.isEmpty()) { - return; - } - final SyncSet set = new SyncSet((IStructuredSelection)s); - removeNonApplicableNodes(set, syncMode); - final SyncSet[] result = new SyncSet[1]; - WorkspaceModifyOperation op = new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - result[0] = TargetSyncAction.this.run(set, monitor); - } - }; - try { - run(op, Policy.bind("TargetSyncAction.errorEncountered")); //$NON-NLS-1$ - } catch (InterruptedException e) { - } - if (result[0] != null) { - // all returned nodes that have a changed sync kind are assumed - // to have been operated on and will be removed from the diff tree. - removeNodes(result[0].getChangedNodes()); - - // any node that claims that it's IN_SYNC will be automatically - // filtered from the diff tree - see DiffElement.setKind(). - diffModel.updateView(); - } - } - - protected abstract void removeNonApplicableNodes(SyncSet set, int syncMode); - - /** - * The given nodes have been synchronized. Remove them from - * the sync set. - * - * For folders that are outgoing deletions, we may need to leave the - * folder as is or adjust the sync kind depending on the sync kind of - * the folder's children. - * - * @see CVSSyncCompareInput#collectResourceChanges(IDiffContainer, IRemoteSyncElement, IProgressMonitor) - */ - private void removeNodes(final ITeamNode[] nodes) { - // Update the model - Set outgoingFolderDeletions = new HashSet(); - for (int i = 0; i < nodes.length; i++) { - if (nodes[i].getClass() == UnchangedTeamContainer.class) { - // Unchanged containers get removed automatically when all - // children are removed - continue; - } - if (nodes[i].getClass() == ChangedTeamContainer.class) { - // If this node still has children, convert to an - // unchanged container, then it will disappear when - // all children have been removed. - ChangedTeamContainer container = (ChangedTeamContainer)nodes[i]; - IDiffElement[] children = container.getChildren(); - if (children.length > 0) { - IDiffContainer parent = container.getParent(); - UnchangedTeamContainer unchanged = new UnchangedTeamContainer(parent, container.getResource()); - for (int j = 0; j < children.length; j++) { - unchanged.add(children[j]); - } - parent.removeToRoot(container); - continue; - } - // No children, it will get removed below. - } - nodes[i].getParent().removeToRoot(nodes[i]); - } - } - - /** - * Updates the action with the latest selection, setting enablement - * as necessary. - */ - public void update(int syncMode) { - this.syncMode = syncMode; - IStructuredSelection selection = (IStructuredSelection)selectionProvider.getSelection(); - setEnabled(isEnabled(selection.toArray())); - } - - /** - * Subclasses must implement this method, which performs action-specific code. - * - * It may return the sync set which was passed in, or null. - */ - protected abstract SyncSet run(SyncSet syncSet, IProgressMonitor monitor); - - /** - * Helper method to run a runnable in a progress monitor dialog, and display any errors. - */ - protected void run(IRunnableWithProgress op, String problemMessage) throws InterruptedException { - ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell()); - try { - dialog.run(true, true, op); - } catch (InvocationTargetException e) { - Throwable throwable = e.getTargetException(); - IStatus error = null; - if (throwable instanceof CoreException) { - error = ((CoreException)throwable).getStatus(); - } else { - error = new Status(IStatus.ERROR, TeamUIPlugin.ID, 1, Policy.bind("simpleInternal") , throwable); //$NON-NLS-1$ - } - ErrorDialog.openError(shell, problemMessage, error.getMessage(), error); - TeamUIPlugin.log(error); - } - } - - /** - * Helper method. Check if a save is necessary. If it is, prompt the user to save. - * Return true if all necessary saves have been performed, false otherwise. - */ - protected boolean saveIfNecessary() { - return getDiffModel().saveIfNecessary(); - } - - /** - * Convenience method that maps the given resources to their target providers. - * The returned Hashtable has keys which are TargetProviders, and values - * which are Lists of IResources that are shared with that provider. - * - * @return a hashtable mapping providers to their resources - */ - protected Hashtable getTargetProviderMapping(IResource[] resources) throws TeamException { - Hashtable result = new Hashtable(); - for (int i = 0; i < resources.length; i++) { - TargetProvider provider = TargetManager.getProvider(resources[i].getProject()); - List list = (List)result.get(provider); - if (list == null) { - list = new ArrayList(); - result.put(provider, list); - } - list.add(resources[i]); - } - return result; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncCompareInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncCompareInput.java deleted file mode 100644 index 55b00b9d5..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncCompareInput.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import org.eclipse.compare.structuremergeviewer.IDiffContainer; -import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteSyncElement; -import org.eclipse.team.internal.core.target.ITargetRunnable; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.sync.CatchupReleaseViewer; -import org.eclipse.team.internal.ui.sync.SyncCompareInput; - -public class TargetSyncCompareInput extends SyncCompareInput { - - private IResource[] resources; - - protected TargetSyncCompareInput(IResource[] resources, int granularity) { - super(granularity); - this.resources = resources; - } - - /** - * @see SyncCompareInput#createSyncElements(IProgressMonitor) - */ - protected IRemoteSyncElement[] createSyncElements(IProgressMonitor monitor) throws TeamException { - monitor = Policy.monitorFor(monitor); - try { - monitor.beginTask(null, resources.length); - IRemoteSyncElement[] elements = new IRemoteSyncElement[resources.length]; - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - TargetProvider provider = TargetManager.getProvider(resource.getProject()); - elements[i] = provider.getRemoteSyncElement(resource); - monitor.worked(1); - } - return elements; - } finally { - monitor.done(); - } - } - - /** - * @see CompareEditorInput#createDiffViewer(Composite) - */ - public Viewer createDiffViewer(Composite parent) { - CatchupReleaseViewer viewer = new TargetCatchupReleaseViewer(parent, this); - setViewer(viewer); - return viewer; - } - - protected void updateView() { - // Update the view - if (getDiffRoot().hasChildren()) { - getViewer().refresh(); - } else { - getViewer().setInput(null); - } - - // Update the status line - updateStatusLine(); - } - - /** - * @see SyncCompareInput#collectResourceChanges(IDiffContainer, IRemoteSyncElement, IProgressMonitor) - */ - protected IDiffElement collectResourceChanges( - final IDiffContainer parent, - final IRemoteSyncElement tree, - IProgressMonitor pm) throws TeamException { - - final IDiffElement[] result = new IDiffElement[] {null}; - TargetProvider provider = TargetManager.getProvider(tree.getLocal().getProject()); - provider.run(new ITargetRunnable() { - public void run(IProgressMonitor monitor) throws TeamException { - result[0] = TargetSyncCompareInput.super.collectResourceChanges(parent, tree, monitor); - } - }, pm); - return result[0]; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetWizardPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetWizardPage.java deleted file mode 100644 index 3ee584f3f..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetWizardPage.java +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/* - * Common superclass for wizard pages. Provides convenience methods - * for widget creation. - */ -public abstract class TargetWizardPage extends WizardPage { - - private static final int COMBO_HISTORY_LENGTH = 5; - - /* - * WizardPage constructor comment. - * @param pageName the name of the page - */ - public TargetWizardPage(String pageName) { - super(pageName); - } - - /* - * WizardPage constructor comment. - * @param pageName the name of the page - * @param title the title of the page - * @param titleImage the image for the page - */ - public TargetWizardPage(String pageName, String title, org.eclipse.jface.resource.ImageDescriptor titleImage) { - super(pageName, title, titleImage); - } - - protected Button createRadioButton(Composite parent, String label, int span) { - Button button = new Button(parent, SWT.RADIO); - button.setText(label); - GridData data = new GridData(); - data.horizontalSpan = span; - button.setLayoutData(data); - return button; - } - - /* - * Creates a new checkbox instance and sets the default layout data. - * - * @param group the composite in which to create the checkbox - * @param label the string to set into the checkbox - * @return the new checkbox - */ - protected Button createCheckBox(Composite group, String label) { - Button button = new Button(group, SWT.CHECK | SWT.LEFT); - button.setText(label); - GridData data = new GridData(); - data.horizontalSpan = 2; - button.setLayoutData(data); - return button; - } - - /* - * Utility method that creates a combo box - * - * @param parent the parent for the new label - * @return the new widget - */ - protected Combo createCombo(Composite parent) { - Combo combo = new Combo(parent, SWT.READ_ONLY); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - combo.setLayoutData(data); - return combo; - } - - /* - * Creates composite control and sets the default layout data. - * - * @param parent the parent of the new composite - * @param numColumns the number of columns for the new composite - * @return the newly-created coposite - */ - protected Composite createComposite(Composite parent, int numColumns) { - Composite composite = new Composite(parent, SWT.NULL); - - // GridLayout - GridLayout layout = new GridLayout(); - layout.numColumns = numColumns; - composite.setLayout(layout); - - // GridData - GridData data = new GridData(); - data.verticalAlignment = GridData.FILL; - data.horizontalAlignment = GridData.FILL; - composite.setLayoutData(data); - return composite; - } - - /* - * Utility method that creates a label instance - * and sets the default layout data. - * - * @param parent the parent for the new label - * @param text the text for the new label - * @return the new label - */ - protected Label createLabel(Composite parent, String text) { - Label label = new Label(parent, SWT.LEFT); - label.setText(text); - GridData data = new GridData(); - data.horizontalSpan = 1; - data.horizontalAlignment = GridData.FILL; - label.setLayoutData(data); - return label; - } - - /* - * Create a text field specific for this application - * - * @param parent the parent of the new text field - * @return the new text field - */ - protected Text createTextField(Composite parent) { - Text text = new Text(parent, SWT.SINGLE | SWT.BORDER); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.verticalAlignment = GridData.CENTER; - data.grabExcessVerticalSpace = false; - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - text.setLayoutData(data); - return text; - } - - /* - * Adds an entry to a history, while taking care of duplicate history items - * and excessively long histories. The assumption is made that all histories - * should be of length <code>ConfigurationWizardMainPage.COMBO_HISTORY_LENGTH</code>. - * - * @param history the current history - * @param newEntry the entry to add to the history - * @return the history with the new entry appended - */ - protected String[] addToHistory(String[] history, String newEntry) { - ArrayList l = new ArrayList(Arrays.asList(history)); - addToHistory(l, newEntry); - String[] r = new String[l.size()]; - l.toArray(r); - return r; - } - - /* - * Adds an entry to a history, while taking care of duplicate history items - * and excessively long histories. The assumption is made that all histories - * should be of length <code>ConfigurationWizardMainPage.COMBO_HISTORY_LENGTH</code>. - * - * @param history the current history - * @param newEntry the entry to add to the history - */ - protected void addToHistory(List history, String newEntry) { - history.remove(newEntry); - history.add(0,newEntry); - - // since only one new item was added, we can be over the limit - // by at most one item - if (history.size() > COMBO_HISTORY_LENGTH) - history.remove(COMBO_HISTORY_LENGTH); - } - - /* - * Utility method to create an editable combo box - * - * @param parent the parent of the combo box - * @return the created combo - */ - protected Combo createEditableCombo(Composite parent) { - Combo combo = new Combo(parent, SWT.NULL); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - combo.setLayoutData(data); - return combo; - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.java deleted file mode 100644 index a8becb796..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.java +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ui.target; - -import java.lang.reflect.InvocationTargetException; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.InfiniteSubProgressMonitor; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.ui.IPromptCondition; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.team.internal.ui.PromptingDialog; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -public class UploadAction extends TargetAction { - - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() throws TeamException { - IResource[] resources = getSelectedResources(); - if (resources.length == 0) return false; - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - TargetProvider provider = TargetManager.getProvider(resource.getProject()); - if(provider == null) - return false; - if(! provider.canPut(resource)) - return false; //if one can't don't allow for any - // Don't want to go though the resources deeply to see if there are dirty children - } - return true; - } - - /** - * @see IActionDelegate#run(IAction) - */ - public void run(IAction action) { - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - Hashtable table = getTargetProviderMapping(); - Set keySet = table.keySet(); - monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ - Iterator iterator = keySet.iterator(); - boolean hasOutgoing = false; - while (iterator.hasNext()) { - IProgressMonitor subMonitor = new InfiniteSubProgressMonitor(monitor, 1024); - final TargetProvider provider = (TargetProvider)iterator.next(); - subMonitor.setTaskName(Policy.bind("UploadAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$ - - IResource[] providerResources = (IResource[])((List)table.get(provider)).toArray(new IResource[0]); - IResource[] outgoingChanges = findResourcesWithOutgoingChanges(providerResources); - if (outgoingChanges.length > 0) { - // Prompt for any outgoing deletions - PromptingDialog prompt = new PromptingDialog( - getShell(), - outgoingChanges, - new IPromptCondition() { - public boolean needsPrompt(IResource resource) { - return ! resource.exists(); - } - public String promptMessage(IResource resource) { - return Policy.bind("UploadAction.confirmFileDeletionMessage", resource.getFullPath().toString()); //$NON-NLS-1$ - } - }, - Policy.bind("UploadAction.confirmDeletionTitle"));//$NON-NLS-1$ - - // Put the resources that were selected - hasOutgoing = true; - provider.put(prompt.promptForMultiple(), subMonitor); - } - } - if (!hasOutgoing) { - getShell().getDisplay().syncExec( - new Runnable() { - public void run() { - MessageDialog.openInformation(getShell(), - Policy.bind("UploadAction.noDirtyTitle"), //$NON-NLS-1$ - Policy.bind("UploadAction.noDirtyMessage")); //$NON-NLS-1$ - } - }); - }; - } catch (CoreException e) { - throw new InvocationTargetException(e); - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }, Policy.bind("UploadAction.problemMessage"), PROGRESS_DIALOG); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/IConfigurationWizard.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/IConfigurationWizard.java deleted file mode 100644 index 4f218794f..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/IConfigurationWizard.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.ui; - - -import org.eclipse.core.resources.IProject; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.ui.IWorkbench; - -/** - * IConfigurationWizard defines the interface that users of the extension - * point org.eclipse.team.ui.configurationWizards must implement. - */ -public interface IConfigurationWizard extends IWizard { - /** - * Initializes this creation wizard using the passed workbench and - * object selection. - * <p> - * This method is called after the no argument constructor and - * before other methods are called. - * </p> - * - * @param workbench the current workbench - * @param project the selected project - */ - void init(IWorkbench workbench, IProject project); -} - diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/ISharedImages.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/ISharedImages.java deleted file mode 100644 index ebab3832e..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/ISharedImages.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.ui; - - - -/** - * Images that are available for providers to re-use. They include - * common overlays and wizard images. A provider can use their own - * custom images, these shared images are only available for - * convenience. - */ -public interface ISharedImages { - public final String IMG_DIRTY_OVR = "ovr/dirty_ov.gif"; //$NON-NLS-1$ - public final String IMG_CHECKEDIN_OVR = "ovr/version_controlled.gif"; //$NON-NLS-1$ - public final String IMG_CHECKEDOUT_OVR = "ovr/checkedout_ov.gif"; //$NON-NLS-1$ -} - diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamImages.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamImages.java deleted file mode 100644 index 75afb107d..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamImages.java +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.ui; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Hashtable; - -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IPluginDescriptor; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.team.internal.ui.UIConstants; - -/** - * TeamImages provides convenience methods for accessing shared images - * provided by the org.eclipse.team.ui plug-in. - */ -public class TeamImages { - private static Hashtable imageDescriptors = new Hashtable(20); - - static { - initializeImages(); - } - /** - * Creates an image and places it in the image registry. - * - * @param id the identifier for the image - * @param baseURL the base URL for the image - */ - protected static void createImageDescriptor(String id, URL baseURL) { - URL url = null; - try { - url = new URL(baseURL, UIConstants.ICON_PATH + id); - } catch (MalformedURLException e) { - } - ImageDescriptor desc = ImageDescriptor.createFromURL(url); - imageDescriptors.put(id, desc); - } - /** - * Returns the image descriptor for the given image ID. - * Returns null if there is no such image. - * - * @param id the identifier for the image to retrieve - * @return the image associated with the given ID - */ - public static ImageDescriptor getImageDescriptor(String id) { - return (ImageDescriptor)imageDescriptors.get(id); - } - /** - * Convenience method to get an image descriptor for an extension - * - * @param extension the extension declaring the image - * @param subdirectoryAndFilename the path to the image - * @return the image - */ - public static ImageDescriptor getImageDescriptorFromExtension(IExtension extension, String subdirectoryAndFilename) { - IPluginDescriptor pluginDescriptor = extension.getDeclaringPluginDescriptor(); - URL path = pluginDescriptor.getInstallURL(); - URL fullPathString = null; - try { - fullPathString = new URL(path,subdirectoryAndFilename); - return ImageDescriptor.createFromURL(fullPathString); - } catch (MalformedURLException e) { - } - return null; - } - /** - * Initializes the table of images used in this plugin. - */ - private static void initializeImages() { - URL baseURL = TeamUIPlugin.getPlugin().getDescriptor().getInstallURL(); - - // View decoration overlays - createImageDescriptor(ISharedImages.IMG_DIRTY_OVR, baseURL); - createImageDescriptor(ISharedImages.IMG_CHECKEDIN_OVR, baseURL); - createImageDescriptor(ISharedImages.IMG_CHECKEDOUT_OVR, baseURL); - - // Target Management Icons - createImageDescriptor(UIConstants.IMG_SITE_ELEMENT, baseURL); - - // Sync View Icons - createImageDescriptor(UIConstants.IMG_DLG_SYNC_INCOMING, baseURL); - createImageDescriptor(UIConstants.IMG_DLG_SYNC_OUTGOING, baseURL); - createImageDescriptor(UIConstants.IMG_DLG_SYNC_CONFLICTING, baseURL); - createImageDescriptor(UIConstants.IMG_REFRESH, baseURL); - createImageDescriptor(UIConstants.IMG_IGNORE_WHITESPACE, baseURL); - createImageDescriptor(UIConstants.IMG_CONTENTS, baseURL); - - createImageDescriptor(UIConstants.IMG_DLG_SYNC_INCOMING_DISABLED, baseURL); - createImageDescriptor(UIConstants.IMG_DLG_SYNC_OUTGOING_DISABLED, baseURL); - createImageDescriptor(UIConstants.IMG_DLG_SYNC_CONFLICTING_DISABLED, baseURL); - createImageDescriptor(UIConstants.IMG_REFRESH_DISABLED, baseURL); - createImageDescriptor(UIConstants.IMG_IGNORE_WHITESPACE_DISABLED, baseURL); - createImageDescriptor(UIConstants.IMG_CONTENTS_DISABLED, baseURL); - - createImageDescriptor(UIConstants.IMG_DLG_SYNC_INCOMING_ENABLED, baseURL); - createImageDescriptor(UIConstants.IMG_DLG_SYNC_OUTGOING_ENABLED, baseURL); - createImageDescriptor(UIConstants.IMG_DLG_SYNC_CONFLICTING_ENABLED, baseURL); - createImageDescriptor(UIConstants.IMG_REFRESH_ENABLED, baseURL); - createImageDescriptor(UIConstants.IMG_IGNORE_WHITESPACE_ENABLED, baseURL); - createImageDescriptor(UIConstants.IMG_CONTENTS_ENABLED, baseURL); - - createImageDescriptor(UIConstants.IMG_SYNC_MODE_CATCHUP, baseURL); - createImageDescriptor(UIConstants.IMG_SYNC_MODE_RELEASE, baseURL); - createImageDescriptor(UIConstants.IMG_SYNC_MODE_FREE, baseURL); - - createImageDescriptor(UIConstants.IMG_SYNC_MODE_CATCHUP_DISABLED, baseURL); - createImageDescriptor(UIConstants.IMG_SYNC_MODE_RELEASE_DISABLED, baseURL); - createImageDescriptor(UIConstants.IMG_SYNC_MODE_FREE_DISABLED, baseURL); - - createImageDescriptor(UIConstants.IMG_SYNC_MODE_CATCHUP_ENABLED, baseURL); - createImageDescriptor(UIConstants.IMG_SYNC_MODE_RELEASE_ENABLED, baseURL); - createImageDescriptor(UIConstants.IMG_SYNC_MODE_FREE_ENABLED, baseURL); - - createImageDescriptor(UIConstants.IMG_WIZBAN_SHARE, baseURL); - - // Wizard banners - createImageDescriptor(UIConstants.IMG_PROJECTSET_IMPORT_BANNER, baseURL); - createImageDescriptor(UIConstants.IMG_PROJECTSET_EXPORT_BANNER, baseURL); - - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java deleted file mode 100644 index 160b048dc..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.ui; - -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.team.internal.ui.TeamUIPlugin; - -/** - * TeamUI contains public API for generic UI-based Team functionality - */ -public class TeamUI { - // property change types - public static String GLOBAL_IGNORES_CHANGED = "global_ignores_changed"; //$NON-NLS-1$ - - /** - * Register for changes made to Team properties. - * - * @param listener the listener to add - */ - public static void addPropertyChangeListener(IPropertyChangeListener listener) { - TeamUIPlugin.addPropertyChangeListener(listener); - } - - /** - * Deregister as a Team property changes. - * - * @param listener the listener to remove - */ - public static void removePropertyChangeListener(IPropertyChangeListener listener) { - TeamUIPlugin.removePropertyChangeListener(listener); - } -} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/package.html b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/package.html deleted file mode 100644 index 110a89283..000000000 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/package.html +++ /dev/null @@ -1,16 +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"> - <title>Package-level Javadoc</title> -</head> -<body> -Application programming interface for associating a repository provider with a project. -<h2> -Package Specification</h2> -This package specifies the API for providing a configuration wizard that will -associate and configure a particular repository provider with a project in the -local workspace. -</body> -</html>
\ No newline at end of file diff --git a/examples/org.eclipse.compare.examples/.cvsignore b/examples/org.eclipse.compare.examples/.cvsignore deleted file mode 100644 index 73cceacad..000000000 --- a/examples/org.eclipse.compare.examples/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -bin -.classpath diff --git a/examples/org.eclipse.compare.examples/.project b/examples/org.eclipse.compare.examples/.project deleted file mode 100644 index 1fe5dffd9..000000000 --- a/examples/org.eclipse.compare.examples/.project +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.compare.examples</name> - <comment></comment> - <projects> - <project>org.eclipse.compare</project> - <project>org.eclipse.core.resources</project> - <project>org.eclipse.core.runtime</project> - <project>org.eclipse.jface</project> - <project>org.eclipse.jface.text</project> - <project>org.eclipse.swt</project> - <project>org.eclipse.ui</project> - <project>org.eclipse.ui.workbench</project> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/examples/org.eclipse.compare.examples/about.html b/examples/org.eclipse.compare.examples/about.html deleted file mode 100644 index 9db411aab..000000000 --- a/examples/org.eclipse.compare.examples/about.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<html> -<head> -<title>About</title> -<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> -</head> -<body lang="EN-US"> -<h2>About This Content</h2> - -<p>20th June, 2002</p> -<h3>License</h3> -<p>Eclipse.org makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the -Common Public License Version 1.0 ("CPL"). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>. -For purposes of the CPL, "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> - -</body> -</html>
\ No newline at end of file diff --git a/examples/org.eclipse.compare.examples/build.properties b/examples/org.eclipse.compare.examples/build.properties deleted file mode 100644 index 937a64cef..000000000 --- a/examples/org.eclipse.compare.examples/build.properties +++ /dev/null @@ -1,19 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -source.compareexamples.jar = src/ - -bin.includes = doc-html/,\ - about.html,\ - plugin.properties,\ - plugin.xml,\ - compareexamples.jar - -src.includes = about.html diff --git a/examples/org.eclipse.compare.examples/doc-html/hglegal.htm b/examples/org.eclipse.compare.examples/doc-html/hglegal.htm deleted file mode 100644 index 47c8540c8..000000000 --- a/examples/org.eclipse.compare.examples/doc-html/hglegal.htm +++ /dev/null @@ -1,14 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <LINK REL="stylesheet" HREF="book.css" CHARSET="ISO-8859-1" TYPE="text/css"> - <title>Legal Notices</title> -</head> -<body> - -<h3> -<a NAME="Notices"></a>Notices</h3> -(c) Copyright (c) 2000, 2003 IBM Corporation and others. All Rights Reserved. -</body> -</html> diff --git a/examples/org.eclipse.compare.examples/doc-html/ngibmcpy.gif b/examples/org.eclipse.compare.examples/doc-html/ngibmcpy.gif Binary files differdeleted file mode 100644 index c786e43e1..000000000 --- a/examples/org.eclipse.compare.examples/doc-html/ngibmcpy.gif +++ /dev/null diff --git a/examples/org.eclipse.compare.examples/doc-html/ui_structurecreator_ex.html b/examples/org.eclipse.compare.examples/doc-html/ui_structurecreator_ex.html deleted file mode 100644 index 88596b47d..000000000 --- a/examples/org.eclipse.compare.examples/doc-html/ui_structurecreator_ex.html +++ /dev/null @@ -1,84 +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"> - <title>Structural Compare for Key/Value Pairs</title> -</head> -<body> - -<h2>Compare Example - Structural Compare for Key/Value Pairs</h2> - -<h3>Introduction</h3> - -This example demonstrates how to support structural compare for -files consisting of key/value pairs. It shows how to implement and register a -custom structure creator that parses key/value pairs into a tree structure -that is used as the input to the structural compare framework provided by the -Compare plugin. In addition, it registers a standard text viewer for the individual -key/value pairs. - -<p> - -This example is only for demonstration purposes. Structural compare support -for Java property files (another key/value format) is provided by the Eclipse Java Tooling. - -<h3> Running the example</h3> - -<ol> - <li>Create a project (not necessarily a Java project)</li> - - <li>Create a key/value pair file f1.kv</li> - - <li>Open <strong>Window</strong> > <strong>Preferences</strong> > <strong>Workbench</strong> > <strong>File Association</strong> - and associate the default text editor with the file extension "kv"</li> - - <li>Open f1.kv with the editor and enter this contents - <pre> -lastname=Doe -firstname=John -city=Chicago -state=IL -</pre></li> - - <li>Make a copy of this file and rename it f2.kv</li> - - <li>Open f2.kv and change the firstname "John" to "Mary"</li> - - <li>Add another key/value pair "country=US" to f2.kv</li> - - <li>Select both files f1.kv and f2.kv</li> - - <li>From the context menu select <strong>Compare With</strong> > <strong>Each Other</strong></li> - - <li>A new compare editor opens that shows the structural differences of both files in its - top pane. Selecting one of the properties "firstname" or "country" feeds the text of the - corresponding key/value pair into the standard text compare viewer in the bottom pane. - </li> - -</ol> - -<h3>Code organization of the example</h3> -The example code is organized in a single package <tt>org.eclipse.compare.examples.structurecreator</tt>: - -<ul> - <li><tt>KeyValuePairStructureCreator</tt><br> - is the structure creator that parses the contents of a stream into a tree of - <tt>IStructureComparator</tt>s. - </li> - - <li><tt>TextMergeViewerCreator</tt><br> - is a factory for TextMergeViewers. It is registered for the type "kvtxt" which is the - type of an individual key/value pair. - </li> - - <li><tt>Util</tt><br> - provides utility methods for NLS support and for reading an InputStream as a String. - </li> - -</ul> - -<p> </p> - -<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corporation and others 2000, 2003. All Rights Reserved." BORDER=0 height=14 width=324></a></p> -</body> -</html> diff --git a/examples/org.eclipse.compare.examples/plugin.properties b/examples/org.eclipse.compare.examples/plugin.properties deleted file mode 100644 index cbc537819..000000000 --- a/examples/org.eclipse.compare.examples/plugin.properties +++ /dev/null @@ -1,15 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -# -# Resource strings for Compare Examples plugin.xml file -# -pluginName=Compare Example -providerName = Eclipse.org diff --git a/examples/org.eclipse.compare.examples/plugin.xml b/examples/org.eclipse.compare.examples/plugin.xml deleted file mode 100644 index c6f1ef661..000000000 --- a/examples/org.eclipse.compare.examples/plugin.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- File written by PDE 1.0 --> -<plugin - id="org.eclipse.compare.examples" - name="%pluginName" - version="2.1.0" - provider-name="%providerName"> - -<!-- Required plugins --> - -<requires> - <import plugin="org.eclipse.ui"/> - <import plugin="org.eclipse.core.resources"/> - <import plugin="org.eclipse.compare"/> -</requires> - -<!-- Runtime --> - -<runtime> - <library name="compareexamples.jar"> - <export name="*"/> - </library> -</runtime> - -<!-- Extension points --> - -<!-- Extensions --> -<extension - point="org.eclipse.compare.contentMergeViewers"> - <viewer - extensions="kvtxt" - class="org.eclipse.compare.examples.structurecreator.TextMergeViewerCreator"> - </viewer> -</extension> - -<extension - point="org.eclipse.compare.structureCreators"> - <structureCreator - extensions="kv" - class="org.eclipse.compare.examples.structurecreator.KeyValuePairStructureCreator"> - </structureCreator> -</extension> - -</plugin> diff --git a/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/CompareExampleMessages.properties b/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/CompareExampleMessages.properties deleted file mode 100644 index 3ebe0141c..000000000 --- a/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/CompareExampleMessages.properties +++ /dev/null @@ -1,16 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -# -# Resource strings -# -KeyValuePairStructureCreator.title= Key/Value Pair Compare -KeyValuePairStructureCreator.CoreException.message= CoreException -KeyValuePairStructureCreator.BadLocationException.message= BadLocationException diff --git a/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/KeyValuePairStructureCreator.java b/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/KeyValuePairStructureCreator.java deleted file mode 100644 index 8d1b2188b..000000000 --- a/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/KeyValuePairStructureCreator.java +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.examples.structurecreator; - -import org.eclipse.swt.graphics.*; - -import org.eclipse.jface.text.*; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Status; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * This structure creator parses input containing key/value pairs - * and returns the pairs as a tree of <code>IStructureComparator</code>s. - * Each key/value pair must be on a separate line and keys are separated - * from values by a '='. - * <p> - * Example: - * <pre> - * foo=bar - * name=joe - * </pre> - */ -public class KeyValuePairStructureCreator implements IStructureCreator { - - static class KeyValueNode extends DocumentRangeNode implements ITypedElement { - - String fValue; - - public KeyValueNode(String id, String value, IDocument doc, int start, int length) { - super(0, id, doc, start, length); - fValue= value; - } - - String getValue() { - return fValue; - } - - /** - * @see ITypedElement#getName - */ - public String getName() { - return this.getId(); - } - - /** - * Every key/value pair is of type "kvtxt". We register a TextMergeViewer for it. - * @see ITypedElement#getType - */ - public String getType() { - return "kvtxt"; //$NON-NLS-1$ - } - - /** - * @see ITypedElement#getImage - */ - public Image getImage() { - return CompareUI.getImage(getType()); - } - }; - - - public KeyValuePairStructureCreator() { - } - - /** - * This title will be shown in the title bar of the structure compare pane. - */ - public String getName() { - return Util.getString("KeyValuePairStructureCreator.title"); //$NON-NLS-1$ - } - - /** - * Returns a node. - */ - public IStructureComparator getStructure(Object input) { - - if (!(input instanceof IStreamContentAccessor)) - return null; - - IStreamContentAccessor sca= (IStreamContentAccessor) input; - - try { - String contents= Util.readString(sca.getContents()); - if (contents == null) - contents= ""; //$NON-NLS-1$ - Document doc= new Document(contents); - - KeyValueNode root= new KeyValueNode("root", "", doc, 0, doc.getLength()); //$NON-NLS-1$ //$NON-NLS-2$ - - for (int i= 0; i < doc.getNumberOfLines(); i++) { - - IRegion r= doc.getLineInformation(i); - String s= doc.get(r.getOffset(), r.getLength()); - int start= r.getOffset(); - - String key= ""; //$NON-NLS-1$ - String value= ""; //$NON-NLS-1$ - int pos= s.indexOf('='); - if (pos >= 0) { - key= s.substring(0, pos); - value= s.substring(pos+1); - } else { - key= s; - } - if (key.length() > 0) - root.addChild(new KeyValueNode(key, value, doc, start, s.length())); - } - return root; - } catch (CoreException ex) { - String message= Util.getString("KeyValuePairStructureCreator.CoreException.message"); //$NON-NLS-1$ - CompareUI.getPlugin().getLog().log(new Status(Status.ERROR, CompareUI.PLUGIN_ID, 0, message, ex)); - } catch (BadLocationException ex) { - String message= Util.getString("KeyValuePairStructureCreator.BadLocationException.message"); //$NON-NLS-1$ - CompareUI.getPlugin().getLog().log(new Status(Status.ERROR, CompareUI.PLUGIN_ID, 0, message, ex)); - } - - return null; - } - - public void save(IStructureComparator structure, Object input) { - if (input instanceof IEditableContent && structure instanceof KeyValueNode) { - IDocument doc= ((KeyValueNode)structure).getDocument(); - IEditableContent bca= (IEditableContent) input; - String c= doc.get(); - bca.setContent(c.getBytes()); - } - } - - public String getContents(Object node, boolean ignoreWhitespace) { - if (node instanceof KeyValueNode) { - String s= ((KeyValueNode)node).getValue(); - if (ignoreWhitespace) - s= s.trim(); - return s; - } - return null; - } - - public IStructureComparator locate(Object path, Object source) { - return null; - } -} diff --git a/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/TextMergeViewerCreator.java b/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/TextMergeViewerCreator.java deleted file mode 100644 index 2565e4544..000000000 --- a/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/TextMergeViewerCreator.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.examples.structurecreator; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.TextMergeViewer; - -/** - * A factory object for the <code>TextMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class TextMergeViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new TextMergeViewer(parent, mp); - } -} diff --git a/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/Util.java b/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/Util.java deleted file mode 100644 index 04ae99f8a..000000000 --- a/examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/Util.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.examples.structurecreator; - -import java.io.*; -import java.util.*; - -import org.eclipse.core.resources.ResourcesPlugin; - - -public class Util { - - private static final String RESOURCE_BUNDLE= "org.eclipse.compare.examples.structurecreator.CompareExampleMessages"; //$NON-NLS-1$ - - private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); - - public static String getString(String key) { - try { - return fgResourceBundle.getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!"; //$NON-NLS-2$ //$NON-NLS-1$ - } - } - - /** - * Reads the contents of the given input stream into a string. - * The function assumes that the input stream uses the platform's default encoding - * (<code>ResourcesPlugin.getEncoding()</code>). - * Returns null if an error occurred. - */ - static String readString(InputStream is) { - if (is == null) - return null; - BufferedReader reader= null; - try { - StringBuffer buffer= new StringBuffer(); - char[] part= new char[2048]; - int read= 0; - reader= new BufferedReader(new InputStreamReader(is, ResourcesPlugin.getEncoding())); - - while ((read= reader.read(part)) != -1) - buffer.append(part, 0, read); - - return buffer.toString(); - - } catch (IOException ex) { - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException ex) { - // we don't log IOException when closing a file - } - } - } - return null; - } -} diff --git a/examples/org.eclipse.team.examples.filesystem/.classpath b/examples/org.eclipse.team.examples.filesystem/.classpath deleted file mode 100644 index 2bc1164a3..000000000 --- a/examples/org.eclipse.team.examples.filesystem/.classpath +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="/org.eclipse.core.resources"/> - <classpathentry kind="src" path="/org.eclipse.team.core"/> - <classpathentry kind="src" path="/org.apache.xerces"/> - <classpathentry kind="src" path="/org.eclipse.team.ui"/> - <classpathentry kind="src" path="/org.eclipse.ui"/> - <classpathentry kind="src" path="src"/> - <classpathentry kind="src" path="/org.eclipse.core.runtime"/> - <classpathentry kind="src" path="/org.eclipse.core.boot"/> - <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/examples/org.eclipse.team.examples.filesystem/.cvsignore b/examples/org.eclipse.team.examples.filesystem/.cvsignore deleted file mode 100644 index ba077a403..000000000 --- a/examples/org.eclipse.team.examples.filesystem/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -bin diff --git a/examples/org.eclipse.team.examples.filesystem/.project b/examples/org.eclipse.team.examples.filesystem/.project deleted file mode 100644 index aa7f1d122..000000000 --- a/examples/org.eclipse.team.examples.filesystem/.project +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.team.examples.filesystem</name> - <comment></comment> - <projects> - <project>org.apache.xerces</project> - <project>org.eclipse.core.boot</project> - <project>org.eclipse.core.resources</project> - <project>org.eclipse.core.runtime</project> - <project>org.eclipse.team.core</project> - <project>org.eclipse.team.ui</project> - <project>org.eclipse.ui</project> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/examples/org.eclipse.team.examples.filesystem/about.html b/examples/org.eclipse.team.examples.filesystem/about.html deleted file mode 100644 index 9db411aab..000000000 --- a/examples/org.eclipse.team.examples.filesystem/about.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<html> -<head> -<title>About</title> -<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> -</head> -<body lang="EN-US"> -<h2>About This Content</h2> - -<p>20th June, 2002</p> -<h3>License</h3> -<p>Eclipse.org makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the -Common Public License Version 1.0 ("CPL"). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>. -For purposes of the CPL, "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> - -</body> -</html>
\ No newline at end of file diff --git a/examples/org.eclipse.team.examples.filesystem/build.properties b/examples/org.eclipse.team.examples.filesystem/build.properties deleted file mode 100644 index fa97e5430..000000000 --- a/examples/org.eclipse.team.examples.filesystem/build.properties +++ /dev/null @@ -1,14 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -# Eclipse build contribution -source.teamfilesystem.jar=src/ -src.includes=about.html -bin.includes=about.html,icons/,doc-html/,plugin.xml,plugin.properties,*.jar
\ No newline at end of file diff --git a/examples/org.eclipse.team.examples.filesystem/doc-html/hglegal.htm b/examples/org.eclipse.team.examples.filesystem/doc-html/hglegal.htm deleted file mode 100644 index cf2ced352..000000000 --- a/examples/org.eclipse.team.examples.filesystem/doc-html/hglegal.htm +++ /dev/null @@ -1,14 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <meta name="GENERATOR" content="Mozilla/4.73 [en] (Win98; U) [Netscape]">
- <title>Legal Notices</title>
-</head>
-<body>
-
-<h3>
-<a NAME="Notices"></a>Notices</h3>
-(c) Copyright IBM Corp. 2000, 2002. All Rights Reserved.
-</body>
-</html>
diff --git a/examples/org.eclipse.team.examples.filesystem/doc-html/ngibmcpy.gif b/examples/org.eclipse.team.examples.filesystem/doc-html/ngibmcpy.gif Binary files differdeleted file mode 100644 index 61cef4852..000000000 --- a/examples/org.eclipse.team.examples.filesystem/doc-html/ngibmcpy.gif +++ /dev/null diff --git a/examples/org.eclipse.team.examples.filesystem/doc-html/team_filesystem_ex.html b/examples/org.eclipse.team.examples.filesystem/doc-html/team_filesystem_ex.html deleted file mode 100644 index 9604d0d6c..000000000 --- a/examples/org.eclipse.team.examples.filesystem/doc-html/team_filesystem_ex.html +++ /dev/null @@ -1,35 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <title>Team - File System Repository Provider Example</title> -</head> -<body> - -<h2>Team - File System Repository Provider Example</h2> - -<h3>Introduction</h3> - -<p> -The File System Repository Provider shows how to define your own repository provider. -It shows how to override the RepositoryProvider class and register this new class as -a repository provider using the Team extension point. It also illustrates how to create -and register a configuration wizard for connecting a local project to a remote location -and how to provide some custom Team and Replace with menu items for simple Get and Put operations. In -addition it also shows how to use the validate save/validate edit mechanism to support -pessimistic providers. - - -<h3>Running the example</h3> - -To start using this example create a project and select Team > Share Project... from the -project's popup menu. In the wizrd that opens, select File System Example and click Next. -Now enter the location in the local file system where you would like to connect the project -to. The Get and Put operations in the Team menu will now transfer to and from the selected -location. - - -<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2002. All Rights Reserved." BORDER=0></a> -</body> -</html> - diff --git a/examples/org.eclipse.team.examples.filesystem/icons/full/wizards/fsicon_wiz.gif b/examples/org.eclipse.team.examples.filesystem/icons/full/wizards/fsicon_wiz.gif Binary files differdeleted file mode 100644 index af038fa69..000000000 --- a/examples/org.eclipse.team.examples.filesystem/icons/full/wizards/fsicon_wiz.gif +++ /dev/null diff --git a/examples/org.eclipse.team.examples.filesystem/icons/full/wizban/newconnect_wizban.gif b/examples/org.eclipse.team.examples.filesystem/icons/full/wizban/newconnect_wizban.gif Binary files differdeleted file mode 100644 index 3038a23c0..000000000 --- a/examples/org.eclipse.team.examples.filesystem/icons/full/wizban/newconnect_wizban.gif +++ /dev/null diff --git a/examples/org.eclipse.team.examples.filesystem/plugin.properties b/examples/org.eclipse.team.examples.filesystem/plugin.properties deleted file mode 100644 index 360a2e606..000000000 --- a/examples/org.eclipse.team.examples.filesystem/plugin.properties +++ /dev/null @@ -1,28 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -pluginName = Eclipse Team File System Example -providerName=Eclipse.org - -Put.name=Put -Put.tooltip=Copy resources to the shared file system location -Get.name=Get -Get.tooltip=Copy resources from the shared file system location to the workbench -Unmanage.name=Unmanage -Unmanage.tooltip=Mark resources as not-shared - -Replace.name=File System Contents -Replace.tooltip=Overwrites the local copy of this resource with the one in the repository - - -fspropertypage.name=FileSystem Provider -fspropertypage.tooltip=An example repository provider that uses the filesystem to provide storage. -fswizard.name=File System Example (Non-Versioning) -fswizard.description=Associate a project with a file system location. This location can be used to shared resources with others. diff --git a/examples/org.eclipse.team.examples.filesystem/plugin.xml b/examples/org.eclipse.team.examples.filesystem/plugin.xml deleted file mode 100644 index df8b947b7..000000000 --- a/examples/org.eclipse.team.examples.filesystem/plugin.xml +++ /dev/null @@ -1,116 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<plugin - id="org.eclipse.team.examples.filesystem" - name="%pluginName" - version="2.1.0" - provider-name="%providerName" - class="org.eclipse.team.examples.filesystem.FileSystemPlugin"> - - <runtime> - <library name="teamfilesystem.jar"> - <export name="*"/> - <packages prefixes="org.eclipse.team.examples.filesystem"/> - </library> - </runtime> - <requires> - <import plugin="org.eclipse.core.resources"/> - <import plugin="org.eclipse.team.core"/> - <import plugin="org.apache.xerces"/> - <import plugin="org.eclipse.team.ui"/> - <import plugin="org.eclipse.ui"/> - </requires> - -<!-- *************** Repository Provider **************** --> - <extension - point="org.eclipse.team.core.repository"> - <repository - class="org.eclipse.team.examples.filesystem.FileSystemProvider" - id="org.eclipse.team.examples.filesystem.FileSystemProvider"> - </repository> - </extension> - -<!-- *************** POPUP MENUS **************** --> - <extension - point="org.eclipse.ui.popupMenus"> - <objectContribution - objectClass="org.eclipse.core.resources.IResource" - adaptable="true" - id="org.eclipse.team.examples.filesystem.ResourceContributions"> - <filter - name="projectPersistentProperty" - value="org.eclipse.team.core.repository=org.eclipse.team.examples.filesystem.FileSystemProvider"> - </filter> - <action - label="%Get.name" - tooltip="%Get.tooltip" - class="org.eclipse.team.examples.filesystem.ui.GetAction" - menubarPath="team.main/group1" - id="org.eclipse.team.examples.filesystem.get"> - </action> - <action - label="%Put.name" - tooltip="%Put.tooltip" - class="org.eclipse.team.examples.filesystem.ui.PutAction" - menubarPath="team.main/group1" - id="org.eclipse.team.examples.filesystem.put"> - </action> - <action - label="%Replace.name" - tooltip="%ReplaceAction.tooltip" - class="org.eclipse.team.examples.filesystem.ui.ReplaceAction" - menubarPath="replaceWithMenu/replaceWithGroup" - id="org.eclipse.team.examples.filesystem.replace"> - </action> - </objectContribution> - - <objectContribution - objectClass="org.eclipse.core.resources.IProject" - adaptable="true" - id="org.eclipse.team.examples.filesystem.ProjectContributions"> - <filter - name="projectPersistentProperty" - value="org.eclipse.team.core.repository=org.eclipse.team.examples.filesystem.FileSystemProvider"> - </filter> - <action - label="%Unmanage.name" - tooltip="%Unmanage.tooltip" - class="org.eclipse.team.examples.filesystem.ui.DisconnectAction" - menubarPath="team.main/group2" - id="org.eclipse.team.examples.filesystem.unmanage"> - </action> - </objectContribution> - </extension> - -<!-- *************** CONFIGURATION WIZARD **************** --> - <extension - point="org.eclipse.team.ui.configurationWizards"> - <wizard - name="%fswizard.name" - icon="icons/full/wizards/fsicon_wiz.gif" - category="org.eclipse.team.ui" - class="org.eclipse.team.examples.filesystem.ui.ConfigurationWizard" - id="org.eclipse.team.examples.filesystem.ui.ConfigurationWizard"> - <description> - %fswizard.description - </description> - </wizard> - </extension> - - -<!-- *************** PROPERTY PAGES **************** --> - <extension - point="org.eclipse.ui.propertyPages"> - <page - objectClass="org.eclipse.core.resources.IResource" - adaptable="true" - name="%fspropertypage.name" - class="org.eclipse.team.examples.filesystem.ui.FileSystemPropertiesPage" - id="org.eclipse.team.examples.filesystem.ui.FileSystemPropertiesPage"> - <filter - name="projectPersistentProperty" - value="org.eclipse.team.core.repository=org.eclipse.team.examples.filesystem.FileSystemProvider"> - </filter> - </page> - </extension> - -</plugin> diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java deleted file mode 100644 index 040ea09d5..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem; - -import java.util.ArrayList; -import java.util.Collection; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFileModificationValidator; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations; - -/** - * This class models a sentry that verifies whether resources are available for editing or overwriting. - * This has been made a separate clas for illustration purposes. It may have been more apporpriate - * to have FileSystemProvider implement IFileModificationValidator itself since the interface - * only has two methods and their implementation is straight forward. - */ -public final class FileModificationValidator implements IFileModificationValidator { - //Used to avoid creating multiple copies of the OK status: - private static final IStatus OK_STATUS = new Status(Status.OK, FileSystemPlugin.ID, Status.OK, Policy.bind("ok"), null); - - private RepositoryProvider provider; - private SimpleAccessOperations operations; - - /** - * Constructor for FileModificationValidator. - */ - public FileModificationValidator(RepositoryProvider provider) { - this.provider = provider; - operations = provider.getSimpleAccess(); - } - - /** - * This method will convert any exceptions thrown by the SimpleAccessOperations.chechout() to a Status. - * @param resources the resources that are to be checked out - * @return IStatus a status indicator that reports whether the operation went smoothly or not. - * @see org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations#chechout(IResource[] resources, int depth, IProgressMonitor progress) - */ - private IStatus checkout(IResource[] resources) { - try { - operations.checkout(resources, IResource.DEPTH_INFINITE, null); - } catch (TeamException e) { - return new Status(Status.ERROR, FileSystemPlugin.ID, Status.ERROR, e.getLocalizedMessage(), e); - } - return OK_STATUS; - } - - /** - * This method will be called by the workbench/editor before it tries to edit one or more files. - * The idea is to prevent anyone from accidentally working on a file that they won't be able to check in changes to. - * @see org.eclipse.core.resources.IFileModificationValidator#validateEdit(IFile[], Object) - */ - public IStatus validateEdit(IFile[] files, Object context) { - Collection toBeCheckedOut = new ArrayList(); - - //Make a list of all the files that need to be checked out: - for (int i = 0; i < files.length; i++) { - if (!operations.isCheckedOut(files[i])) { - toBeCheckedOut.add(files[i]); - } - } - - return checkout((IResource[]) toBeCheckedOut.toArray(new IResource[toBeCheckedOut.size()])); - } - - /** - * This method will be called by the workbench before it tries to save a file. - * It should not attempt to save any files that don't recieve an OK status here. - * @see org.eclipse.core.resources.IFileModificationValidator#validateSave(IFile) - */ - public IStatus validateSave(IFile file) { - return checkout(new IResource[] { file }); - } - -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemPlugin.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemPlugin.java deleted file mode 100644 index 3a62e7180..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemPlugin.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem; - -import java.io.IOException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPluginDescriptor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.team.core.TeamException; -import org.eclipse.ui.plugin.AbstractUIPlugin; - -/** - * This is the plugin class for the file system examples. It provides the following: - * - * <ol> - * <li>public fields for the plugin and provider IDs as defined in the plugin.xml - * <li>initialization on startup of Policy class that provides internationalization of strings - * <li>helper methods for outputing IStatus objects to the log - * <li>helper methods for converting CoreExceptions and IOExceptions to TeamExceptions - * </ol> - */ -public class FileSystemPlugin extends AbstractUIPlugin { - - /** - * This is the ID of the plugin as defined in the plugin.xml - */ - public static final String ID = "org.eclipse.team.examples.filesystem"; - - /** - * This is the provider ID of the plugin as defined in the plugin.xml - */ - public static final String PROVIDER_ID = ID + ".FileSystemProvider"; - - // This static field will hold the singleton instance of the plugin class - private static FileSystemPlugin plugin; - - /** - * Override the standard plugin constructor. - * - * @param descriptor the plugin descriptor - */ - public FileSystemPlugin(IPluginDescriptor descriptor) { - super(descriptor); - // record this instance as the singleton - plugin = this; - } - - /** - * This method will get invoked when the plugin is started. - * Note that this is not necessarily at workbench startup. - * - * @see org.eclipse.core.runtime.Plugin#startup() - */ - public void startup() throws CoreException { - // localize the string bindings used by the plugins (in order to provide NLS support) - Policy.localize("org.eclipse.team.examples.filesystem.messages"); - } - - /** - * Return the singlton instance of the plugin class to allow other - * classes in the plugin access to plugin instance methods such as - * those for logging errors, etc. - */ - public static FileSystemPlugin getPlugin() { - return plugin; - } - - /** - * Helper method to convert a CoreException into a TeamException. - * We do this to maintain the core status and code. This type of - * mapping may not be appropriate in more complicated exception - * handling situations. - * - * @param e the CoreException - */ - public static TeamException wrapException(CoreException e) { - return new TeamException(e.getStatus()); - } - - /** - * Helper method to convert an IOException into a TeamException. - * This type of mapping may not be appropriate in more complicated - * exception handling situations. - * - * @param e the CoreException - */ - public static TeamException wrapException(IOException e) { - return new TeamException(new Status(IStatus.ERROR, FileSystemPlugin.ID, - TeamException.IO_FAILED, e.getMessage(), e)); - } - - /** - * Helper method to log an exception status. - * - * @param status the status to be logged - */ - public static void log(IStatus status) { - plugin.getLog().log(status); - } -} - diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemProvider.java deleted file mode 100644 index 310b648d3..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemProvider.java +++ /dev/null @@ -1,166 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem; - -import java.io.File; - -import org.eclipse.core.resources.IFileModificationValidator; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.QualifiedName; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations; - -/** - * This example illustrates how to create a concrete implementation of a <code>RepositoryProvider</code> - * that uses the file system to act as the repository. See the plugin.xml file for the xml required - * to register this provider with the Team extension point <code>org.eclipse.team.core.repository</code>. - * The plugin.xml file also contains examples of how to filter menu items using a repsitory provider's - * ID. - * - * <p> - * This example provider illustrates the following: - * <ol> - * <li>simple working implementation of <code>RepositoyProvider</code> - * <li>storage of a persistant property with the project (which provides the target location for the provider) - * <li>access to an instance of <code>SimpleAccessOperations</code> for performing simple file operations - * </ol> - * - * <p> - * Additional functionality that will be illustrated in the future include: - * <ol> - * <li>Validate Save/Validat Edit - * <li>Move/Delete Hook - * <li>Project Sets - * <li>Use of the workspace synchronizer (ISynchronizer) - * <li>Use of decorators - * <li>combining streams and progress monitors to get responsive UI - * </ol> - * - */ -public class FileSystemProvider extends RepositoryProvider { - - // The location of the folder on file system where the repository is stored. - private IPath root; - - // The QualifiedName that is used to persist the location accross workspace as a persistant property on a resource - private static QualifiedName FILESYSTEM_REPO_LOC = new QualifiedName(FileSystemPlugin.ID, "disk_location"); - - /** - * Create a new FileSystemProvider. - */ - public FileSystemProvider() { - super(); - } - - /** - * This method is invoked when the provider is mapped to a project. - * Although we have access to the project at this point (using - * <code>getProject()</code>, we don't know the root location so - * there is nothing we can do yet. - * - * @see org.eclipse.team.core.RepositoryProvider#configureProject() - */ - public void configureProject() throws CoreException { - } - - /** - * This method is invoked when the provider is unmapped from its - * project. - * - * @see org.eclipse.core.resources.IProjectNature#deconfigure() - */ - public void deconfigure() throws CoreException { - // Clear the persistant property containing the location - getProject().setPersistentProperty(FILESYSTEM_REPO_LOC, null); - } - - /** - * Return the provider ID as specified in the plugin.xml - * - * @see RepositoryProvider#getID() - */ - public String getID() { - return FileSystemPlugin.PROVIDER_ID; - } - - /** - * Set the file system location for the provider. This mist be invoked after - * the provider is mapped and configured but before the provider is used to - * perform any operations. - * - * @param location the path representing the location where the project contents will be stored. - * @throws TeamException - */ - public void setTargetLocation(String location) throws TeamException { - - // set the instance variable to the provided path - root = new Path(location); - - // ensure that the location is a folder (if it exists) - File file = new File(location); - if (file.exists() && !file.isDirectory()) { - throw new TeamException(Policy.bind("FileSystemProvider.mustBeFolder", location)); - } - - // record the location as a persistant property so it will be remembered across platform invokations - try { - getProject().setPersistentProperty(FILESYSTEM_REPO_LOC, location); - } catch (CoreException e) { - throw FileSystemPlugin.wrapException(e); - } - } - - /** - * Returns the folder in the file system to which the provider is connected. - * Return <code>null</code> if there is no location or there was a problem - * determining it. - * - * @return IPath The path to the root of the repository. - */ - public IPath getRoot() { - if (root == null) { - try { - String location = getProject().getPersistentProperty(FILESYSTEM_REPO_LOC); - if (location == null) { - return null; - } - root = new Path(location); - } catch (CoreException e) { - // log the problem and carry on - FileSystemPlugin.log(e.getStatus()); - return null; - } - } - return root; - } - - /** - * Return an instance of <code>SimpleAccessOperations</code> that provides the - * operations for transfering data to and from the provider's location. - * Note: The interface <code>SimpleAccessOperations</code> is not part of the official - * Team API. We use it here for convenience. - * - * @see org.eclipse.team.core.RepositoryProvider#getSimpleAccess() - */ - public SimpleAccessOperations getSimpleAccess() { - return new FileSystemSimpleAccessOperations(this); - } - /** - * @see org.eclipse.team.core.RepositoryProvider#getFileModificationValidator() - */ - public IFileModificationValidator getFileModificationValidator() { - return new FileModificationValidator(this); - } - -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemRemoteResource.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemRemoteResource.java deleted file mode 100644 index 8023d2a2c..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemRemoteResource.java +++ /dev/null @@ -1,159 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Platform; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; - -/** - * Class represents a handle to a <code>java.io.File</code> that conforms to - * the <code>org.eclipse.team.core.IRemoteResource</code> interface. - */ -public class FileSystemRemoteResource implements IRemoteResource { - - // the file object in which the data is stored on the disk - private File ioFile; - - /** - * The constructor. - * @param path the full path of the resource on disk - */ - public FileSystemRemoteResource(IPath path) { - this(new File(path.toOSString())); - } - - /** - * Create a remote resource handle from the given java.io.file - * - * @param ioFile the file - */ - FileSystemRemoteResource(File ioFile) { - this.ioFile = ioFile; - } - - /** - * Adapters are used to ensure that the right menus will appear in differnet views. - * - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) - */ - public Object getAdapter(Class adapter) { - return Platform.getAdapterManager().getAdapter(this, adapter); - } - - /** - * Returns an input stream containing the contents of the remote resource. - * The remote resource must be a file. - * - * @see org.eclipse.team.core.sync.IRemoteResource#getContents(IProgressMonitor) - */ - public InputStream getContents(IProgressMonitor progress) throws TeamException { - if (isContainer()) - throw new TeamException("This resource is a container so it cannot have data."); - try { - return new FileInputStream(ioFile); - } catch (FileNotFoundException e) { - throw FileSystemPlugin.wrapException(e); - } - } - - /** - * Return the modification timestamp of the remote resource. - * - * @return long The date and time (in milliseconds) when the file was last changed on disk. - */ - public long getLastModified() { - return ioFile.lastModified(); - } - - /** - * @see org.eclipse.team.core.sync.IRemoteResource#getName() - */ - public String getName() { - return ioFile.getName(); - } - - /** - * @see org.eclipse.team.core.sync.IRemoteResource#isContainer() - */ - public boolean isContainer() { - return ioFile.isDirectory(); - } - - /** - * Fetch the members of the remote resource. The remote resource must be a - * container. - * - * @see org.eclipse.team.core.sync.IRemoteResource#members(IProgressMonitor) - */ - public IRemoteResource[] members(IProgressMonitor progress) throws TeamException { - // Make sure we have a container - if (!isContainer()) - throw new TeamException(Policy.bind("RemoteResource.mustBeFolder", ioFile.getName())); - - // convert the File children to remote resource children - File[] members = ioFile.listFiles(); - IRemoteResource[] result = new IRemoteResource[members.length]; - for (int i = 0; i < members.length; i++) { - result[i] = new FileSystemRemoteResource(members[i]); - } - return result; - } - - /** - * copies a single specified file to a specified location on the filesystem. - * @param dest The location on the filesystem to which the file is to be copied - * @param src The source file - */ - static void copyFile(IPath dest, File src) { - File target = new File(dest.append(src.getName()).toOSString()); - try { - InputStream in = ((IFile) src).getContents(); - java.io.FileOutputStream out = new java.io.FileOutputStream(target); - StreamUtil.pipe(in, out, target.length(), null, target.getName()); - } catch (FileNotFoundException e) {} catch (IOException e) {} catch (CoreException e) {} - } - /** - * Recursively copies an entire directory structure to a specified location on the filesystem - * @param dest The location on the filssystem to which the directory structure is to be written - * @param src The directory structure that is to be duplicated - */ - static void copyFolder(IPath dest, File src) { - String children[] = src.list(); - File current; - for (int i = 0; i < children.length; i++) { - current = new File(children[i]); - if (current.isFile()) - copyFile(dest.append(src.getName()), current); - else if (current.isDirectory()) - copyFolder(dest.append(src.getName()), current); - } - } - - /** - * Creates a copy of the remote resource in the location specified - * @param location The destination for the copy of the remote resource - */ - public void copyOver(IPath location) { - copyFolder(location, ioFile); - } - -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemSimpleAccessOperations.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemSimpleAccessOperations.java deleted file mode 100644 index db1f054bb..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemSimpleAccessOperations.java +++ /dev/null @@ -1,310 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations; - -/** - * SimpleAccessOperations is not part of the Team API. We use it here because it provides - * a reasonable set of operation commonly implemented by repository providers. - * Note: This class is not to be interpreted as an example of how a repository - * provider is to do its work. It is only here because we needed to have some operations - * to perform. In the future, we may update this class to illustrate the use of the workspace - * synchronizer (<code>ISynchronizer</code>). - */ -public class FileSystemSimpleAccessOperations implements SimpleAccessOperations { - - // A reference to the provider - private FileSystemProvider provider; - - /** - * Constructor - * @param provider - */ - FileSystemSimpleAccessOperations(FileSystemProvider provider) { - this.provider = provider; - } - - /** - * Given a local resource, finds the remote counterpart. - * @param resource The local resource to lookup - * @return FileSystemRemoteResource The remote counterpart to the given local resource - */ - public FileSystemRemoteResource getRemoteResourceFor(IResource resource) { - return new FileSystemRemoteResource(provider.getRoot().append(resource.getProjectRelativePath())); - } - - /** - * @see SimpleAccessOperations#get(IResource[], int, IProgressMonitor) - */ - public void get(IResource[] resources, int depth, IProgressMonitor progress) throws TeamException { - // ensure the progress monitor is not null - progress = Policy.monitorFor(progress); - progress.beginTask(Policy.bind("GetAction.working"), resources.length); - for (int i = 0; i < resources.length; i++) { - Policy.checkCanceled(progress); - IPath rootdir = provider.getRoot(); - FileSystemRemoteResource remote = getRemoteResourceFor(resources[i]); - if (resources[i].getType() == IResource.FILE) { - //Copy the resource over to the other side: - IFile localFile = (IFile) resources[i]; //since we know the local resource is a file. - if (localFile.getModificationStamp() != remote.getLastModified()) { - //Only do this if the timestamps are different - try { - //Copy from the local file to the remote file: - InputStream source = null; - try { - // Get the remote file content. - source = remote.getContents(progress); - // Set the local file content to be the same as the remote file. - if (localFile.exists()) - localFile.setContents(source, false, false, progress); - else - localFile.create(source, false, progress); - } finally { - if (source != null) - source.close(); - } - } catch (IOException e) { - throw FileSystemPlugin.wrapException(e); - } catch (CoreException e) { - throw FileSystemPlugin.wrapException(e); - } - } - } else if (depth > 0) { //Assume that resources are either files or containers. - //If the resource is a container, copy its children over. - IRemoteResource[] estranged = remote.members(progress); - IResource[] children = new IResource[estranged.length]; - - if (resources[i].getType() == IResource.PROJECT) { - for (int j = 0; j < estranged.length; j++) { - if (estranged[j].isContainer()) - children[j] = provider.getProject().getFolder(estranged[j].getName()); - else - children[j] = provider.getProject().getFile(estranged[j].getName()); - } - } else if (resources[i].getType() == IResource.FOLDER) { - //Make sure that the folder exists before trying to put anything into it: - IFolder localFolder = (IFolder) resources[i]; - if (!localFolder.exists()) { - try { - localFolder.create(false, true, progress); - } catch (CoreException e) { - throw FileSystemPlugin.wrapException(e); - } - } - - //Create placeholder local resources to place data into: - for (int j = 0; j < estranged.length; j++) { - if (estranged[j].isContainer()) - children[j] = provider.getProject().getFolder(resources[i].getProjectRelativePath().append(estranged[j].getName())); - else - children[j] = provider.getProject().getFile(resources[i].getProjectRelativePath().append(estranged[j].getName())); - } - } - - //Recurse into children: - if (children.length > 0) - get(children, depth - 1, null); - } - progress.worked(1); - } - progress.done(); - } - - /** - * Simply make sure that the local resource is not read only. - * - * @see SimpleAccessOperations#checkout(IResource[], int, IProgressMonitor) - */ - public void checkout(IResource[] resources, int depth, IProgressMonitor progress) throws TeamException { - progress = Policy.monitorFor(progress); - progress.beginTask("Checking resources out...", resources.length); - IPath rootdir = provider.getRoot(); - for (int i = 0; i < resources.length; i++) { - Policy.checkCanceled(progress); - - //Do the actual file locking: - FileSystemRemoteResource remote = getRemoteResourceFor(resources[i]); - File diskFile = new File(rootdir.append(resources[i].getProjectRelativePath()).toOSString()); - if (resources[i].getType() == IResource.FILE) { - //TODO: lock the file on the 'server'. - resources[i].setReadOnly(false); - } else if (depth > 0) { - diskFile.mkdirs(); - //Recursively checkout children too: - try { - IResource[] children; - if (resources[i].getType() == IResource.PROJECT) - children = provider.getProject().members(); - else - children = provider.getProject().getFolder(resources[i].getName()).members(); - if (children.length > 0) - checkout(children, depth - 1, null); - } catch (CoreException e) { - throw FileSystemPlugin.wrapException(e); - } - } - progress.worked(1); - } - progress.done(); - } - - /** - * Checkin the resources to the given depth. Mark all checked in resources as read only. - * - * @see org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations#checkin(IResource[], int, IProgressMonitor) - */ - public void checkin(IResource[] resources, int depth, IProgressMonitor progress) throws TeamException { - // ensure the progress monitor is not null - progress = Policy.monitorFor(progress); - progress.beginTask(Policy.bind("PutAction.working"), resources.length); - for (int i = 0; i < resources.length; i++) { - Policy.checkCanceled(progress); - IPath rootdir = provider.getRoot(); - // Verify that the resources are checked out: - if (!isCheckedOut(resources[i])) - return; - - File diskFile = new File(rootdir.append(resources[i].getProjectRelativePath()).toOSString()); - if (resources[i].getType() == IResource.FILE) { - //Copy the resource over to the other side: - IFile localFile = (IFile) resources[i]; //since we know the local resource is a file. - if (localFile.getModificationStamp() != diskFile.lastModified()) { - //Only do this if the timestamps are different - try { - diskFile.getParentFile().mkdirs(); - //Copy from the local file to the remote file: - InputStream in = null; - FileOutputStream out = null; - try { - in = localFile.getContents(); - out = new FileOutputStream(diskFile); - //Copy the contents of the local file to the remote file: - StreamUtil.pipe(in, out, diskFile.length(), progress, diskFile.getName()); - } finally { - if (in != null) - in.close(); - if (out != null) - out.close(); - } - } catch (IOException e) { - throw FileSystemPlugin.wrapException(e); - } catch (CoreException e) { - throw FileSystemPlugin.wrapException(e); - } - } - } else if (depth > 0) { //Assume that resources are either files or containers. - diskFile.mkdirs(); - //Recursively copy children, if any, over as well: - try { - IResource[] children; - if (resources[i].getType() == IResource.PROJECT) - children = provider.getProject().members(); - else - children = provider.getProject().getFolder(resources[i].getName()).members(); - if (children.length > 0) - checkin(children, depth - 1, null); - } catch (CoreException e) { - throw FileSystemPlugin.wrapException(e); - } - } - progress.worked(1); - } - uncheckout(resources, depth, progress); - progress.done(); - } - - /** - * Mark all checked in resources as read only. - * - * @see org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations#uncheckout(IResource[], int, IProgressMonitor) - */ - public void uncheckout(IResource[] resources, int depth, IProgressMonitor progress) throws TeamException { - progress = Policy.monitorFor(progress); - progress.beginTask("Re-locking resources...", resources.length); - IPath rootdir = provider.getRoot(); - for (int i = 0; i < resources.length; i++) { - Policy.checkCanceled(progress); - - //Do the actual file unlocking: - FileSystemRemoteResource remote = getRemoteResourceFor(resources[i]); - File diskFile = new File(rootdir.append(resources[i].getProjectRelativePath()).toOSString()); - if (resources[i].getType() == IResource.FILE) { - //TODO: unlock the file on the 'server'. - resources[i].setReadOnly(true); - } else if (depth > 0) { - diskFile.mkdirs(); - //Recursively uncheckout children too: - try { - IResource[] children; - if (resources[i].getType() == IResource.PROJECT) - children = provider.getProject().members(); - else - children = provider.getProject().getFolder(resources[i].getName()).members(); - if (children.length > 0) - uncheckout(children, depth - 1, null); - } catch (CoreException e) { - throw FileSystemPlugin.wrapException(e); - } - } - progress.worked(1); - } - progress.done(); - } - - /** - * @see org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations#delete(IResource[], IProgressMonitor) - */ - public void delete(IResource[] resources, IProgressMonitor progress) throws TeamException {} - - /** - * @see org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations#moved(IPath, IResource, IProgressMonitor) - */ - public void moved(IPath source, IResource target, IProgressMonitor progress) throws TeamException {} - - /** - * A resource is checked out if it is not read only. - * - * @see org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations#isCheckedOut(IResource) - */ - public boolean isCheckedOut(IResource resource) { - return !resource.isReadOnly(); - } - - /** - * @see org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations#hasRemote(IResource) - */ - public boolean hasRemote(IResource resource) { - return false; - } - - /** - * @see org.eclipse.team.internal.core.simpleAccess.SimpleAccessOperations#isDirty(IResource) - */ - public boolean isDirty(IResource resource) { - return false; - } - -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/Policy.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/Policy.java deleted file mode 100644 index 00220dcdd..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/Policy.java +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem; - -import java.text.MessageFormat; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; - -/** - * This class is a clone of the Polciy classes many Eclipse plugin suse to - * provide NLSing of strings and aid in proper progress monitoring. - */ -public class Policy { - - protected static ResourceBundle bundle = null; - - /** - * Creates a NLS catalog for the given locale. - */ - public static void localize(String bundleName) { - bundle = ResourceBundle.getBundle(bundleName); - } - - /** - * Lookup the message with the given ID in this catalog and bind its - * substitution locations with the given string. - */ - public static String bind(String id, String binding) { - return bind(id, new String[] { binding }); - } - - /** - * Lookup the message with the given ID in this catalog and bind its - * substitution locations with the given strings. - */ - public static String bind(String id, String binding1, String binding2) { - return bind(id, new String[] { binding1, binding2 }); - } - - /** - * Gets a string from the resource bundle. We don't want to crash because of a missing String. - * Returns the key if not found. - */ - public static String bind(String key) { - try { - return bundle.getString(key); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; - } - } - - /** - * Gets a string from the resource bundle and binds it with the given arguments. If the key is - * not found, return the key. - */ - public static String bind(String key, Object[] args) { - try { - return MessageFormat.format(bind(key), args); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; - } - } - - /** - * Progress monitor helpers - */ - public static void checkCanceled(IProgressMonitor monitor) { - if (monitor.isCanceled()) - throw new OperationCanceledException(); - } - - public static IProgressMonitor monitorFor(IProgressMonitor monitor) { - if (monitor == null) - return new NullProgressMonitor(); - return monitor; - } -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/StreamUtil.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/StreamUtil.java deleted file mode 100644 index 0e392c269..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/StreamUtil.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import org.eclipse.core.runtime.IProgressMonitor; - -public class StreamUtil { - - protected final static byte[] COPY_BUFFER = new byte[4096]; - - public static void pipe( - InputStream in, - OutputStream out, - long sizeEstimate, - IProgressMonitor progress, - String title) - throws IOException { - - // Only show progress for files larger than 25Kb. - Long kilobytesEstimate = new Long(sizeEstimate / 1024); - boolean showProgress = (progress != null) && (sizeEstimate > 25000); - long bytesCopied = 0; - - synchronized (COPY_BUFFER) { - // Read the initial chunk. - int read = in.read(COPY_BUFFER, 0, COPY_BUFFER.length); - - while (read != -1) { - out.write(COPY_BUFFER, 0, read); - - // Report progress - if (showProgress) { - bytesCopied = bytesCopied + read; - progress.subTask( - Policy.bind( - "filetransfer.monitor", - new Object[] { title, new Long(bytesCopied / 1024), kilobytesEstimate })); - } - - // Read the next chunk. - read = in.read(COPY_BUFFER, 0, COPY_BUFFER.length); - } // end while - } // end synchronized - } - -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/messages.properties b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/messages.properties deleted file mode 100644 index 832eb7cd2..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/messages.properties +++ /dev/null @@ -1,38 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -fileSystem.propertyLocation=Location: - -FileSystemMainPage.location=Location: -FileSystemMainPage.browseDir=&Browse... -FileSystemMainPage.notValidLocation=Location must be an existing directory - -fsMainPage.name=Select a file system location -fsMainPage.description=This location will be used to share resources with a team - -ConfigurationWizard.errorTitle=Error configuring the provider. -ConfigurationWizard.error=File System provider could not be created - -ConfigurationWizard.name=File System Repository -ConfigurationWizard.description=File System Repository Properties - -DisconnectAction.errorTitle=Error Disconnecting - -PutAction.working=Putting resources... -PutAction.problemMessage=A problem occured putting the resources. - -GetAction.working=Getting resources... -GetAction.problemMessage=A problem occured getting the resources. - -ReplaceAction.working=Replacing resources... -ReplaceAction.problemMessage=A problem occured replacing the resources. - -FileSystemProvider.mustBeFolder=Target location ''{0}'' is a file and must be a folder. -RemoteResource.mustBeFolder=Resource ''{0}'' is a file so it cannot have entries
\ No newline at end of file diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ConfigurationWizard.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ConfigurationWizard.java deleted file mode 100644 index 090f23818..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ConfigurationWizard.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem.ui; - -import org.eclipse.core.resources.IProject; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.examples.filesystem.FileSystemPlugin; -import org.eclipse.team.examples.filesystem.FileSystemProvider; -import org.eclipse.team.examples.filesystem.Policy; -import org.eclipse.team.ui.IConfigurationWizard; -import org.eclipse.ui.IWorkbench; - -/** - * The file system configuration wizard used when associating a project - * the the file system provider. It is registered as a Team configuration wizard - * in the plugin.xml and is invoked when a user chooses to create a File System - * Repository Provider. One invoked, this wizard makes use of the <code>FileSystemMainPage</code> - * in order to obtain a target locaton on disk. - */ -public class ConfigurationWizard extends Wizard implements IConfigurationWizard { - - IProject project; - - FileSystemMainPage mainPage; - - public ConfigurationWizard() { - // retrieve the remembered dialog settings - IDialogSettings workbenchSettings = FileSystemPlugin.getPlugin().getDialogSettings(); - IDialogSettings section = workbenchSettings.getSection("ProviderExamplesWizard"); //$NON-NLS-1$ - if (section == null) { - section = workbenchSettings.addNewSection("ProviderExamplesWizard"); //$NON-NLS-1$ - } - setDialogSettings(section); - } - - /** - * Remember the project so we can map it on finish - * - * @see org.eclipse.team.ui.IConfigurationWizard#init(IWorkbench, IProject) - */ - public void init(IWorkbench workbench, IProject project) { - this.project = project; - } - - public void addPages() { - mainPage = new FileSystemMainPage( - "FileSystemMainPage", //$NON-NLS-1$ - Policy.bind("ConfigurationWizard.name"), - Policy.bind("ConfigurationWizard.description"), - null); - addPage(mainPage); - } - - /* - * Using the information entered in the main page set the provider for - * the given project. - */ - public boolean performFinish() { - mainPage.finish(null); - try { - // Map the provider and set the location - RepositoryProvider.map(project, FileSystemPlugin.PROVIDER_ID); - FileSystemProvider provider = (FileSystemProvider) RepositoryProvider.getProvider(project); - provider.setTargetLocation(mainPage.getLocation()); - } catch (TeamException e) { - ErrorDialog.openError( - getShell(), - Policy.bind("ConfigurationWizard.errorMapping"), - Policy.bind("ConfigurationWizard.error"), - e.getStatus()); - return false; - } - return true; - } - -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/DisconnectAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/DisconnectAction.java deleted file mode 100644 index 52cc47c52..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/DisconnectAction.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem.ui; - -import org.eclipse.core.resources.IProject; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.examples.filesystem.Policy; -import org.eclipse.team.internal.ui.actions.TeamAction; - -/** - * Action for getting the contents of the selected resources - */ -public class DisconnectAction extends TeamAction { - - /** - * @see org.eclipse.ui.IActionDelegate#run(IAction) - */ - public void run(IAction action) { - IProject projects[] = getSelectedProjects(); - try { - for (int i = 0; i < projects.length; i++) { - RepositoryProvider.unmap(projects[i]); - } - } catch (TeamException e) { - ErrorDialog.openError(getShell(), Policy.bind("DisconnectAction.errorTitle"), null, e.getStatus()); - } - } - - /** - * @see TeamAction#isEnabled() - */ - protected boolean isEnabled() { - return true; - } -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java deleted file mode 100644 index e3a5da71f..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem.ui; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IResource; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.examples.filesystem.FileSystemPlugin; -import org.eclipse.team.internal.ui.actions.TeamAction; - -/** - * An abstract class that acts as a super class for FileSystemProvider actions. - * It provides some general methods applicable to multipe actions. - */ -public abstract class FileSystemAction extends TeamAction { - - /** - * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() - */ - protected boolean isEnabled() { - IResource[] resources = getSelectedResources(); - if (resources.length == 0) - return false; - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - // we only want to work on resources mapped to a file system provider - RepositoryProvider provider = RepositoryProvider.getProvider(resource.getProject(), FileSystemPlugin.PROVIDER_ID); - if (provider == null) - return false; - } - return true; - } - - /** - * Split the resources into sets associated with their project/provider - */ - protected Map getRepositoryProviderMapping() throws TeamException { - HashMap result = new HashMap(); - IResource[] resources = getSelectedResources(); - for (int i = 0; i < resources.length; i++) { - RepositoryProvider provider = RepositoryProvider.getProvider(resources[i].getProject()); - List list = (List) result.get(provider); - if (list == null) { - list = new ArrayList(); - result.put(provider, list); - } - list.add(resources[i]); - } - return result; - } - -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java deleted file mode 100644 index 97bea03f7..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java +++ /dev/null @@ -1,301 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem.ui; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.DirectoryDialog; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Text; -import org.eclipse.team.examples.filesystem.Policy; - -/** - * This class provides the main page of the file system repository configuration wizard. - * It allows the user to select a location on disk. Once the page is finished, the - * location can be accessed using the <code>getLocation()</code> method. - */ -public class FileSystemMainPage extends WizardPage { - - private static final int COMBO_HISTORY_LENGTH = 5; - - String location; - Combo locationCombo; - - /* - * WizardPage constructor comment. - * @param pageName the name of the page - * @param title the title of the page - * @param description the description of the page - * @param titleImage the image for the page - */ - - public FileSystemMainPage(String pageName, String title, String description, ImageDescriptor titleImage) { - super(pageName, title, titleImage); - setDescription(description); - setTitle(title); - } - - /* - * Creates a new checkbox instance and sets the default layout data. - * - * @param group the composite in which to create the checkbox - * @param label the string to set into the checkbox - * @return the new checkbox - */ - protected Button createCheckBox(Composite group, String label) { - Button button = new Button(group, SWT.CHECK | SWT.LEFT); - button.setText(label); - GridData data = new GridData(); - data.horizontalSpan = 2; - button.setLayoutData(data); - return button; - } - - /* - * Utility method that creates a combo box - * - * @param parent the parent for the new label - * @return the new widget - */ - protected Combo createCombo(Composite parent) { - Combo combo = new Combo(parent, SWT.READ_ONLY); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - combo.setLayoutData(data); - return combo; - } - - /* - * Creates composite control and sets the default layout data. - * - * @param parent the parent of the new composite - * @param numColumns the number of columns for the new composite - * @return the newly-created coposite - */ - protected Composite createComposite(Composite parent, int numColumns) { - Composite composite = new Composite(parent, SWT.NULL); - - // GridLayout - GridLayout layout = new GridLayout(); - layout.numColumns = numColumns; - composite.setLayout(layout); - - // GridData - GridData data = new GridData(); - data.verticalAlignment = GridData.FILL; - data.horizontalAlignment = GridData.FILL; - composite.setLayoutData(data); - return composite; - } - - /* - * Utility method that creates a label instance - * and sets the default layout data. - * - * @param parent the parent for the new label - * @param text the text for the new label - * @return the new label - */ - protected Label createLabel(Composite parent, String text) { - Label label = new Label(parent, SWT.LEFT); - label.setText(text); - GridData data = new GridData(); - data.horizontalSpan = 1; - data.horizontalAlignment = GridData.FILL; - label.setLayoutData(data); - return label; - } - - /* - * Create a text field specific for this application - * - * @param parent the parent of the new text field - * @return the new text field - */ - protected Text createTextField(Composite parent) { - Text text = new Text(parent, SWT.SINGLE | SWT.BORDER); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.verticalAlignment = GridData.CENTER; - data.grabExcessVerticalSpace = false; - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - text.setLayoutData(data); - return text; - } - - /* - * Adds an entry to a history, while taking care of duplicate history items - * and excessively long histories. The assumption is made that all histories - * should be of length <code>ConfigurationWizardMainPage.COMBO_HISTORY_LENGTH</code>. - * - * @param history the current history - * @param newEntry the entry to add to the history - * @return the history with the new entry appended - */ - protected String[] addToHistory(String[] history, String newEntry) { - ArrayList l = new ArrayList(Arrays.asList(history)); - addToHistory(l, newEntry); - String[] r = new String[l.size()]; - l.toArray(r); - return r; - } - - /* - * Adds an entry to a history, while taking care of duplicate history items - * and excessively long histories. The assumption is made that all histories - * should be of length <code>ConfigurationWizardMainPage.COMBO_HISTORY_LENGTH</code>. - * - * @param history the current history - * @param newEntry the entry to add to the history - */ - protected void addToHistory(List history, String newEntry) { - history.remove(newEntry); - history.add(0,newEntry); - - // since only one new item was added, we can be over the limit - // by at most one item - if (history.size() > COMBO_HISTORY_LENGTH) - history.remove(COMBO_HISTORY_LENGTH); - } - - /* - * Utility method to create an editable combo box - * - * @param parent the parent of the combo box - * @return the created combo - */ - protected Combo createEditableCombo(Composite parent) { - Combo combo = new Combo(parent, SWT.NULL); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - combo.setLayoutData(data); - return combo; - } - - // Dialog store id constants - private static final String STORE_LOCATION = - "ExamplesFSWizardMainPage.STORE_LOCATION";//$NON-NLS-1$ - - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NULL); - composite.setLayoutData(new GridData(GridData.FILL_BOTH)); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - composite.setLayout(layout); - setControl(composite); - - Label label = new Label(composite, SWT.NULL); - label.setText(Policy.bind("FileSystemMainPage.location")); - label.setLayoutData(new GridData()); - - locationCombo = createEditableCombo(composite); - locationCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - locationCombo.addListener(SWT.Modify, new Listener() { - public void handleEvent(Event e) { - location = ((Combo)e.widget).getText(); - FileSystemMainPage.this.validateFields(); - } - }); - - locationCombo.setFocus(); - - new Label(composite, SWT.NULL); - Button browse = new Button(composite, SWT.NULL); - browse.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); - browse.setText(Policy.bind("FileSystemMainPage.browseDir")); - browse.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - DirectoryDialog d = new DirectoryDialog(getShell()); - String directory = d.open(); - if(directory!=null) { - locationCombo.setText(directory); - } - } - }); - - initializeValues(); - validateFields(); - } - - public String getLocation() { - return location; - } - - public boolean finish(IProgressMonitor monitor) { - saveWidgetValues(); - return true; - } - /** - * Initializes states of the controls. - */ - private void initializeValues() { - IDialogSettings settings = getDialogSettings(); - if (settings != null) { - String[] locations = settings.getArray(STORE_LOCATION); - if (locations != null) { - for (int i = 0; i < locations.length; i++) { - locationCombo.add(locations[i]); - } - locationCombo.select(0); - } - } - } - /** - * Saves the widget values - */ - private void saveWidgetValues() { - // Update history - IDialogSettings settings = getDialogSettings(); - if (settings != null) { - String[] locations = settings.getArray(STORE_LOCATION); - if (locations == null) locations = new String[0]; - locations = addToHistory(locations, locationCombo.getText()); - settings.put(STORE_LOCATION, locations); - } - } - - /* - * Validates the contents of the editable fields and set page completion - * and error messages appropriately. - */ - private void validateFields() { - String location = locationCombo.getText(); - if (location.length() == 0) { - setErrorMessage(null); - setPageComplete(false); - return; - } else { - File file = new File(location); - if(!file.exists() || !file.isDirectory()) { - setErrorMessage(Policy.bind("FileSystemMainPage.notValidLocation")); - setPageComplete(false); - return; - } - } - setErrorMessage(null); - setPageComplete(true); - } -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemPropertiesPage.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemPropertiesPage.java deleted file mode 100644 index 309f98030..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemPropertiesPage.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem.ui; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.ui.dialogs.PropertyPage; -/* - * A property page which displays the file system specific properties - * for the selected resource. - */ -public class FileSystemPropertiesPage extends PropertyPage { - // The resource to show properties for - protected IResource resource; - - /* - * Creates a key-value property pair in the given parent. - * - * @param parent the parent for the labels - * @param left the string for the left label - * @param right the string for the right label - */ - protected void createPair(Composite parent, String left, String right) { - Label label = new Label(parent, SWT.NONE); - label.setText(left); - - label = new Label(parent, SWT.NONE); - label.setText(right); - label.setToolTipText(right); - label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - } - - /* - * Returns the element selected when the properties was run - * @return the selected element - */ - protected IResource getSelectedElement() { - // get the resource that is the source of this property page - IResource resource = null; - IAdaptable element = getElement(); - if (element instanceof IResource) { - resource = (IResource)element; - } else { - Object adapter = element.getAdapter(IResource.class); - if (adapter instanceof IResource) { - resource = (IResource)adapter; - } - } - return resource; - } - - /* - * @see PreferencePage#createContents(Composite) - */ - protected Control createContents(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - layout.marginHeight = layout.marginWidth = 0; - composite.setLayout(layout); - composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - IResource resource = getSelectedElement(); - RepositoryProvider provider = RepositoryProvider.getProvider(resource.getProject()); - return composite; - } -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/GetAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/GetAction.java deleted file mode 100644 index 1c4ce852e..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/GetAction.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem.ui; - -import java.lang.reflect.InvocationTargetException; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.examples.filesystem.FileSystemProvider; -import org.eclipse.team.examples.filesystem.Policy; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -/** - * Action for getting the contents of the selected resources - */ -public class GetAction extends FileSystemAction { - - public void run(IAction action) { - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - Map table = getRepositoryProviderMapping(); - monitor.beginTask(null, table.size() * 1000); - monitor.setTaskName(Policy.bind("GetAction.working")); //$NON-NLS-1$ - for (Iterator iter = table.keySet().iterator(); iter.hasNext();) { - IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); - FileSystemProvider provider = (FileSystemProvider) iter.next(); - List list = (List) table.get(provider); - IResource[] providerResources = (IResource[]) list.toArray(new IResource[list.size()]); - provider.getSimpleAccess().get(providerResources, IResource.DEPTH_INFINITE, subMonitor); - } - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }, Policy.bind("GetAction.problemMessage"), PROGRESS_DIALOG); //$NON-NLS-1$ - } -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/PutAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/PutAction.java deleted file mode 100644 index 004b86517..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/PutAction.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem.ui; - -import java.lang.reflect.InvocationTargetException; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.examples.filesystem.FileSystemProvider; -import org.eclipse.team.examples.filesystem.Policy; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -/** - * Action for checking in the selected resources - */ -public class PutAction extends FileSystemAction { - - /* - * Method declared on IActionDelegate. - */ - public void run(IAction action) { - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - Map table = getRepositoryProviderMapping(); - monitor.beginTask(null, table.size() * 1000); - monitor.setTaskName(Policy.bind("PutAction.working")); //$NON-NLS-1$ - for (Iterator iter = table.keySet().iterator(); iter.hasNext();) { - IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); - FileSystemProvider provider = (FileSystemProvider) iter.next(); - List list = (List) table.get(provider); - IResource[] providerResources = (IResource[]) list.toArray(new IResource[list.size()]); - provider.getSimpleAccess().checkin(providerResources, IResource.DEPTH_INFINITE, subMonitor); - } - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }, Policy.bind("PutAction.problemMessage"), PROGRESS_DIALOG); //$NON-NLS-1$ - } -} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ReplaceAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ReplaceAction.java deleted file mode 100644 index b35b59eef..000000000 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ReplaceAction.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.examples.filesystem.ui; - -import java.lang.reflect.InvocationTargetException; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.examples.filesystem.FileSystemProvider; -import org.eclipse.team.examples.filesystem.FileSystemRemoteResource; -import org.eclipse.team.examples.filesystem.Policy; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -/** - * Action for replacing the contents of the selected resources with whatever is in the repository - */ -public class ReplaceAction extends FileSystemAction { - - public void run(IAction action) { - run(new WorkspaceModifyOperation() { - public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - try { - Map table = getRepositoryProviderMapping(); - monitor.beginTask(null, table.size() * 1000); - monitor.setTaskName(Policy.bind("ReplaceAction.working")); //$NON-NLS-1$ - for (Iterator iter = table.keySet().iterator(); iter.hasNext();) { - IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); - FileSystemProvider provider = (FileSystemProvider) iter.next(); - List list = (List) table.get(provider); - IResource[] providerResources = (IResource[]) list.toArray(new IResource[list.size()]); - //Grab the remote counterparts of 'providerResources': - FileSystemRemoteResource[] remote = new FileSystemRemoteResource[list.size()]; - for (int i = 0; i < remote.length; i++) { - remote[i] = new FileSystemRemoteResource(provider.getRoot().append(providerResources[i].getProjectRelativePath())); - } - //copy the entire tree structure: - IPath dropSpot = null; - for (int i = 0; i < providerResources.length; i++) { - if (providerResources[i].getType() == IResource.FILE) { - IFile localFile = (IFile) providerResources[i]; - dropSpot = localFile.getLocation().removeLastSegments(1); - } else if (providerResources[i].getType() == IResource.FOLDER||providerResources[i].getType() == IResource.PROJECT) { - IContainer localDir = (IContainer) providerResources[i]; - dropSpot = localDir.getLocation().removeLastSegments(1); - } - if (remote[i].isContainer()) - remote[i].copyOver(dropSpot); - else - provider.getSimpleAccess().get(new IResource[] { providerResources[i] }, IResource.DEPTH_ONE, subMonitor); - } - } - } catch (TeamException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }, Policy.bind("ReplaceAction.problemMessage"), PROGRESS_DIALOG); //$NON-NLS-1$ - } -} diff --git a/tests/org.eclipse.team.tests.core/.classpath b/tests/org.eclipse.team.tests.core/.classpath deleted file mode 100644 index ad5e948f0..000000000 --- a/tests/org.eclipse.team.tests.core/.classpath +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src/"/> - <classpathentry kind="src" path="/org.apache.xerces"/> - <classpathentry kind="src" path="/org.eclipse.core.tests.harness"/> - <classpathentry kind="src" path="/org.eclipse.core.resources"/> - <classpathentry kind="src" path="/org.eclipse.team.core"/> - <classpathentry kind="src" path="/org.eclipse.team.ui"/> - <classpathentry kind="src" path="/org.eclipse.compare"/> - <classpathentry kind="src" path="/org.eclipse.ui"/> - <classpathentry kind="src" path="/org.junit"/> - <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/> - <classpathentry kind="src" path="/org.eclipse.core.runtime"/> - <classpathentry kind="src" path="/org.eclipse.core.boot"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/tests/org.eclipse.team.tests.core/.cvsignore b/tests/org.eclipse.team.tests.core/.cvsignore deleted file mode 100644 index ba077a403..000000000 --- a/tests/org.eclipse.team.tests.core/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -bin diff --git a/tests/org.eclipse.team.tests.core/.project b/tests/org.eclipse.team.tests.core/.project deleted file mode 100644 index a332d8bd4..000000000 --- a/tests/org.eclipse.team.tests.core/.project +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.team.tests.core</name> - <comment></comment> - <projects> - <project>org.apache.xerces</project> - <project>org.eclipse.compare</project> - <project>org.eclipse.core.boot</project> - <project>org.eclipse.core.resources</project> - <project>org.eclipse.core.runtime</project> - <project>org.eclipse.core.tests.harness</project> - <project>org.eclipse.team.core</project> - <project>org.eclipse.team.ui</project> - <project>org.eclipse.ui</project> - <project>org.junit</project> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.pde.PluginNature</nature> - </natures> -</projectDescription> diff --git a/tests/org.eclipse.team.tests.core/about.html b/tests/org.eclipse.team.tests.core/about.html deleted file mode 100644 index 9db411aab..000000000 --- a/tests/org.eclipse.team.tests.core/about.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<html> -<head> -<title>About</title> -<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> -</head> -<body lang="EN-US"> -<h2>About This Content</h2> - -<p>20th June, 2002</p> -<h3>License</h3> -<p>Eclipse.org makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the -Common Public License Version 1.0 ("CPL"). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>. -For purposes of the CPL, "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> - -</body> -</html>
\ No newline at end of file diff --git a/tests/org.eclipse.team.tests.core/build-tests.xml b/tests/org.eclipse.team.tests.core/build-tests.xml deleted file mode 100644 index 9a16b11eb..000000000 --- a/tests/org.eclipse.team.tests.core/build-tests.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0"?> -<project name="Build Team Sniff" basedir="." default="init"> - - <property name="root" value="${basedir}/.."/> - <property name="temp" value="${root}/__temp"/> - <property name="plugins" value="${temp}/eclipse/plugins"/> - - <target name="init"> - <tstamp/> - - <delete dir="${temp}"/> - <mkdir dir="${plugins}"/> - - <antcall target="buildPlugin"> - <param name="pluginName" value="org.eclipse.core.tests.harness" /> - <param name="jarName" value="testharness.jar" /> - </antcall> - - <antcall target="buildPlugin"> - <param name="pluginName" value="org.eclipse.team.tests.core" /> - <param name="jarName" value="teamtests.jar" /> - </antcall> - - <zip zipfile="${basedir}/teamSniff${DSTAMP}.zip" - basedir="${temp}" - /> - - <delete dir="${temp}"/> - <eclipse.refreshLocal resource="org.eclipse.team.tests.core"/> - </target> - - <target name="buildPlugin"> - <copy todir="${plugins}/${pluginName}"> - <fileset dir="${root}/${pluginName}"/> - </copy> - <jar jarfile="${plugins}/${pluginName}/${jarName}" - basedir="${plugins}/${pluginName}/bin" - /> - <delete dir="${plugins}/${pluginName}/bin"/> - </target> - -</project>
\ No newline at end of file diff --git a/tests/org.eclipse.team.tests.core/build.properties b/tests/org.eclipse.team.tests.core/build.properties deleted file mode 100644 index 992cef9f9..000000000 --- a/tests/org.eclipse.team.tests.core/build.properties +++ /dev/null @@ -1,12 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -source.teamtests.jar=src/ -bin.includes=about.html,plugin.xml,*.jar,test.xml, ftp.properties, webdav.properties
\ No newline at end of file diff --git a/tests/org.eclipse.team.tests.core/ftp.properties b/tests/org.eclipse.team.tests.core/ftp.properties deleted file mode 100644 index 472424eb4..000000000 --- a/tests/org.eclipse.team.tests.core/ftp.properties +++ /dev/null @@ -1,17 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -target=org.eclipse.team.ftp -test_dir=target -location=ftp://@host@/path -username=@user@ -password=@password@ -connectionTimeout=6000 -passive=true
\ No newline at end of file diff --git a/tests/org.eclipse.team.tests.core/plugin.xml b/tests/org.eclipse.team.tests.core/plugin.xml deleted file mode 100644 index 71cf6c98a..000000000 --- a/tests/org.eclipse.team.tests.core/plugin.xml +++ /dev/null @@ -1,104 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<plugin - id="org.eclipse.team.tests.core" - name="Eclipse Team Core Tests" - version="2.1.0" - provider-name="Eclipse.org" - class=""> - - <runtime> - <library name="teamtests.jar"> - <export name="*"/> - <packages prefixes="org.eclipse.team.tests.core"/> - </library> - </runtime> - <requires> - <import plugin="org.apache.xerces"/> - <import plugin="org.eclipse.core.tests.harness"/> - <import plugin="org.eclipse.core.resources"/> - <import plugin="org.eclipse.core.boot"/> - <import plugin="org.eclipse.team.core"/> - <import plugin="org.eclipse.team.cvs.core"/> - <import plugin="org.eclipse.team.ui"/> - <import plugin="org.eclipse.team.cvs.ui"/> - <import plugin="org.eclipse.compare"/> - <import plugin="org.eclipse.ui"/> - <import plugin="org.junit"/> - </requires> - - - <extension - point="org.eclipse.core.tests.harness.tests"> - <test - id="team.all"> - <run - class="org.eclipse.team.tests.core.RepositoryProviderTests"> - </run> - </test> - </extension> - <extension - point="org.eclipse.core.tests.harness.tests"> - <test - id="target.all"> - <run - class="org.eclipse.team.tests.core.TargetProviderTests"> - </run> - </test> - </extension> - <extension - point="org.eclipse.core.tests.harness.tests"> - <test - id="team.ftp"> - <run - class="org.eclipse.team.tests.ftp.ClientTest"> - </run> - </test> - </extension> - - <!-- *************** Repository Providers **************** --> - <extension - point="org.eclipse.team.core.repository"> - <repository - id="org.eclipse.team.tests.core.bic-provider" - class="org.eclipse.team.tests.core.RepositoryProviderBic"> - </repository> - </extension> - - <extension - point="org.eclipse.team.core.repository"> - <repository - id="org.eclipse.team.tests.core.naish-provider" - class="org.eclipse.team.tests.core.RepositoryProviderNaish"> - </repository> - </extension> - - <!-- *************** Bad provider that is not registered **************** - <extension - point="org.eclipse.team.core.repository"> - <repository - id="org.eclipse.team.tests.core.other" - class="org.eclipse.team.tests.core.RepositoryProviderOtherSport"> - </repository> - </extension> - --> - - <extension - point="org.eclipse.team.core.repository"> - <repository - id="org.eclipse.team.tests.core.linking" - class="org.eclipse.team.tests.core.RepositoryProviderWithLinking"> - </repository> - </extension> - - <!-- *************** Test application **************** --> - <extension - id="testapplication" - point="org.eclipse.core.runtime.applications"> - <application> - <run - class="org.eclipse.team.tests.ftp.TestApplication"> - </run> - </application> - </extension> - -</plugin> diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTargetTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTargetTests.java deleted file mode 100644 index dcdd61a43..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTargetTests.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import junit.framework.Test; -import junit.framework.TestSuite; -import org.eclipse.core.tests.harness.EclipseWorkspaceTest; - -public class AllTargetTests extends EclipseWorkspaceTest { - - /** - * Constructor for AllTargetTests. - */ - public AllTargetTests() { - super(); - } - - /** - * Constructor for AllTargetTests. - * @param name - */ - public AllTargetTests(String name) { - super(name); - } - - public static Test suite() { - TestSuite suite = new TestSuite(); - suite.addTest(TargetProviderTests.suite()); - suite.addTest(RemoteResourceTests.suite()); - suite.addTest(SyncElementTest.suite()); - return new TargetTestSetup(suite); - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java deleted file mode 100644 index 99d1a4718..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import junit.framework.Test; -import junit.framework.TestSuite; -import org.eclipse.core.tests.harness.EclipseWorkspaceTest; - -public class AllTeamTests extends EclipseWorkspaceTest { - - /** - * Constructor for CVSClientTest. - */ - public AllTeamTests() { - super(); - } - - /** - * Constructor for CVSClientTest. - * @param name - */ - public AllTeamTests(String name) { - super(name); - } - - /* - * ORDER IS IMPORTANT: Run compatibility and resource tests before any other!!! - */ - public static Test suite() { - TestSuite suite = new TestSuite(); - suite.addTest(RepositoryProviderTests.suite()); - suite.addTest(StreamTests.suite()); - return suite; - } -} - diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java deleted file mode 100644 index 8a666baee..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import java.io.IOException; -import java.io.InputStream; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.target.TargetProvider; - -/** - * A set of test cases for org.eclipse.team.core.sync.IRemoteResource - */ -public class RemoteResourceTests extends TeamTest { - public RemoteResourceTests() { - super(); - } - public RemoteResourceTests(String name) { - super(name); - } - public static Test suite() { - TestSuite suite = new TestSuite(RemoteResourceTests.class); - return new TargetTestSetup(suite); - } - - protected IProject createAndPut(String projectPrefix, String[] resourceNames) throws CoreException, TeamException { - IProject project = getUniqueTestProject(projectPrefix); - IResource[] resources = buildResources(project, resourceNames, false); - TargetProvider target = createProvider(project); - target.put(resources, null); - return project; - } - - public void testGetName() throws CoreException, TeamException { - IProject project = createAndPut("getname", new String[] { "file1.txt", "folder1/", "folder1/b.txt" }); - TargetProvider target = getProvider(project); - IRemoteResource remote = target.getRemoteResource(); - assertEquals(project.getName(), remote.getName()); - } - public void testIsContainerSuccess() throws CoreException, TeamException { - IProject project = getUniqueTestProject("iscontainer"); - IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - target.put(resources, null); - IRemoteResource remote = target.getRemoteResource(); - assertTrue(remote.isContainer()); - } - public void testIsContainerFail() throws CoreException, TeamException { - IProject project = createAndPut("iscontainer", new String[] { "file1.txt", "folder1/", "folder1/b.txt" }); - TargetProvider target = getProvider(project); - IRemoteResource remote = target.getRemoteResourceFor(project.getFile("file1.txt")); - assertTrue(!remote.isContainer()); - } - public void testGetContents() throws CoreException, TeamException { - IProject project = createAndPut("getname", new String[] { "file1.txt", "folder1/", "folder1/b.txt" }); - TargetProvider target = getProvider(project); - IRemoteResource remote = target.getRemoteResourceFor(project.getFile("file1.txt")); - InputStream jin = remote.getContents(DEFAULT_MONITOR); - try { - while (jin.available() > 0) { - jin.read(); - } - } catch (IOException e) { - System.out.flush(); - e.printStackTrace(System.err); - fail("Couldn't read from the input stream."); - } - } - public void testMembers() throws CoreException, TeamException { - IProject project = createAndPut("getname", new String[] { "file1.txt", "folder1/", "folder1/b.txt" }); - TargetProvider target = getProvider(project); - IRemoteResource remote = target.getRemoteResource(); - IRemoteResource[] altResources = remote.members(DEFAULT_MONITOR); - for (int i = 0; i < altResources.length; i++) { - assertEquals(altResources[i], project.findMember(altResources[i].getName())); - } - } - /** - * @see TestCase#setUp() - */ - protected void setUp() throws Exception { - super.setUp(); - properties=TargetTestSetup.properties; - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java deleted file mode 100644 index 6d5afc53f..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import org.eclipse.core.resources.IFileModificationValidator; -import org.eclipse.core.resources.team.IMoveDeleteHook; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.team.core.RepositoryProvider; - -public class RepositoryProviderBic extends RepositoryProvider { - - final public static String NATURE_ID = "org.eclipse.team.tests.core.bic-provider"; - - private IMoveDeleteHook mdh; - private IFileModificationValidator mv; - - /* - * @see RepositoryProvider#configureProject() - */ - public void configureProject() throws CoreException { - } - - /* - * @see RepositoryProvider#getID() - */ - public String getID() { - return NATURE_ID; - } - /* - * @see IProjectNature#deconfigure() - */ - public void deconfigure() throws CoreException { - } - - /* - * @see RepositoryProvider#getFileModificationValidator() - */ - public IFileModificationValidator getFileModificationValidator() { - return mv; - } - - /* - * @see RepositoryProvider#getMoveDeleteHook() - */ - public IMoveDeleteHook getMoveDeleteHook() { - return mdh; - } - - public void setModificationValidator(IFileModificationValidator mv) { - this.mv = mv; - } - - public void setMoveDeleteHook(IMoveDeleteHook mdh) { - this.mdh = mdh; - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java deleted file mode 100644 index c116ebec6..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import org.eclipse.core.resources.IFileModificationValidator; -import org.eclipse.core.resources.team.IMoveDeleteHook; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.team.core.RepositoryProvider; - -public class RepositoryProviderNaish extends RepositoryProvider { - - final public static String NATURE_ID = "org.eclipse.team.tests.core.naish-provider"; - private IMoveDeleteHook mdh; - private IFileModificationValidator mv; - /* - * @see RepositoryProvider#configureProject() - */ - public void configureProject() throws CoreException { - } - - /* - * @see RepositoryProvider#getID() - */ - public String getID() { - return NATURE_ID; - } - /* - * @see IProjectNature#deconfigure() - */ - public void deconfigure() throws CoreException { - } - - public void setModificationValidator(IFileModificationValidator mv) { - this.mv = mv; - } - - public void setMoveDeleteHook(IMoveDeleteHook mdh) { - this.mdh = mdh; - } - /* - * @see RepositoryProvider#getFileModificationValidator() - */ - public IFileModificationValidator getFileModificationValidator() { - return mv; - } - - /* - * @see RepositoryProvider#getMoveDeleteHook() - */ - public IMoveDeleteHook getMoveDeleteHook() { - return mdh; - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderOtherSport.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderOtherSport.java deleted file mode 100644 index 772fadc12..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderOtherSport.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.team.core.RepositoryProvider; - -public class RepositoryProviderOtherSport extends RepositoryProvider { - - final public static String NATURE_ID = "org.eclipse.team.tests.core.other"; - - /* - * @see RepositoryProvider#configureProject() - */ - public void configureProject() throws CoreException { - } - - /* - * @see RepositoryProvider#getID() - */ - public String getID() { - return NATURE_ID; - } - /* - * @see IProjectNature#deconfigure() - */ - public void deconfigure() throws CoreException { - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java deleted file mode 100644 index baa5a6327..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java +++ /dev/null @@ -1,382 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import java.io.ByteArrayInputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import junit.extensions.TestSetup; -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFileModificationValidator; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceStatus; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.resources.team.IMoveDeleteHook; -import org.eclipse.core.resources.team.IResourceTree; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.core.TeamException; - -public class RepositoryProviderTests extends TeamTest { - public RepositoryProviderTests() { - super(); - } - - public RepositoryProviderTests(String name) { - super(name); - } - - public static Test suite() { - TestSuite suite = new TestSuite(RepositoryProviderTests.class); - return new TestSetup(suite); - //return new testSetup(new RepositoryProviderTests("test")); - } - - public void testProvidersRegistered() throws CoreException, TeamException { - List repoProviderIds = new ArrayList(Arrays.asList(RepositoryProvider.getAllProviderTypeIds())); - assertEquals(true, repoProviderIds.contains(RepositoryProviderBic.NATURE_ID)); - assertEquals(true, repoProviderIds.contains(RepositoryProviderNaish.NATURE_ID)); - assertEquals(false, repoProviderIds.contains(RepositoryProviderOtherSport.NATURE_ID)); - } - - public void testGetProviderGeneric() throws CoreException, TeamException { - IProject project = getUniqueTestProject("testGetProviderGeneric1"); - IProject project2 = getUniqueTestProject("testGetProviderGeneric2"); - - // test that adding a non registered provider doesn't work - boolean good = false; - try { - RepositoryProvider.map(project, RepositoryProviderOtherSport.NATURE_ID); - } catch (TeamException e) { - good = true; - } - assertTrue(good); - - // adding a valid team provider should be fine - RepositoryProvider.map(project, RepositoryProviderNaish.NATURE_ID); - RepositoryProvider.map(project2, RepositoryProviderNaish.NATURE_ID); - RepositoryProvider provider1 = RepositoryProvider.getProvider(project); - RepositoryProvider provider2 = RepositoryProvider.getProvider(project2); - assertTrue(provider1 != null && provider1.getID().equals(RepositoryProviderNaish.NATURE_ID)); - assertTrue(provider2 != null && provider2.getID().equals(RepositoryProviderNaish.NATURE_ID)); - assertTrue(provider1.getProject().equals(project) && provider2.getProject().equals(project2)); - - // remapping a provider is allowed - RepositoryProvider.map(project, RepositoryProviderBic.NATURE_ID); - provider1 = RepositoryProvider.getProvider(project); - assertTrue(provider1 != null && provider1.getID().equals(RepositoryProviderBic.NATURE_ID)); - - // closed or non-existant projects cannot be associated with a provider - IProject closedProject = getUniqueTestProject("testGetProviderGenericClosed"); - IProject nonExistantProject = ResourcesPlugin.getWorkspace().getRoot().getProject("nonExistant"); - closedProject.close(null); - assertTrue(RepositoryProvider.getProvider(closedProject) == null); - assertTrue(RepositoryProvider.getProvider(nonExistantProject) == null); - - // removing the nature removes the provider association - RepositoryProvider.unmap(project); - RepositoryProvider.unmap(project2); - assertTrue(RepositoryProvider.getProvider(project)==null); - assertTrue(RepositoryProvider.getProvider(project2)==null); - } - - public void testGetProviderById() throws CoreException, TeamException { - IProject project1 = getUniqueTestProject("testGetProviderById_1"); - IProject project2 = getUniqueTestProject("testGetProviderById_2"); - - // adding a valid team provider should be fine - RepositoryProvider.map(project1, RepositoryProviderBic.NATURE_ID); - RepositoryProvider.map(project2, RepositoryProviderNaish.NATURE_ID); - assertTrue(RepositoryProvider.getProvider(project1, RepositoryProviderBic.NATURE_ID)!=null); - assertTrue(RepositoryProvider.getProvider(project2, RepositoryProviderNaish.NATURE_ID)!=null); - - // closed or non-existant projects cannot be associated with a provider - IProject closedProject = getUniqueTestProject("testGetProviderGenericClosed"); - IProject nonExistantProject = ResourcesPlugin.getWorkspace().getRoot().getProject("nonExistant"); - closedProject.close(null); - assertTrue(RepositoryProvider.getProvider(closedProject, "id") == null); - assertTrue(RepositoryProvider.getProvider(nonExistantProject, "id") == null); - - // removing the nature removes the provider association - RepositoryProvider.unmap(project1); - RepositoryProvider.unmap(project2); - assertTrue(RepositoryProvider.getProvider(project1, RepositoryProviderBic.NATURE_ID)==null); - assertTrue(RepositoryProvider.getProvider(project2, RepositoryProviderNaish.NATURE_ID)==null); - } - - public void testFileModificationValidator() throws CoreException, TeamException { - IProject project = getUniqueTestProject("testFileModificationValidator"); - - // adding a valid team provider should be fine - RepositoryProvider.map(project, RepositoryProviderBic.NATURE_ID); - RepositoryProviderBic bicProvider = (RepositoryProviderBic)RepositoryProvider.getProvider(project, RepositoryProviderBic.NATURE_ID); - assertTrue(bicProvider!=null); - - // test that validator gets called by team core dispatching - final boolean[] called = new boolean[] {false}; - bicProvider.setModificationValidator(new IFileModificationValidator() { - // can't test validate edit here because it is only called from editors - public IStatus validateEdit(IFile[] files, Object context) { - return null; - } - public IStatus validateSave(IFile file) { - called[0] = true; - return getTeamTestStatus(IStatus.OK); - } - }); - IFile file = project.getFile("test.txt"); - file.create(new ByteArrayInputStream("test".getBytes()), true, null); - file.setContents(new ByteArrayInputStream("test2".getBytes()), true, false, null); - assertTrue(called[0] == true); - - // test that validator can veto a setContents - called[0] = false; - bicProvider.setModificationValidator(new IFileModificationValidator() { - // can't test validate edit here because it is only called from editors - public IStatus validateEdit(IFile[] files, Object context) { - return null; - } - public IStatus validateSave(IFile file) { - called[0] = true; - return getTeamTestStatus(IStatus.ERROR); - } - }); - try { - file.setContents(new ByteArrayInputStream("test3".getBytes()), true, false, null); - fail("validate hook should veto this setContents"); - } catch(CoreException e) { - assertTrue(called[0] == true); - } - - // test that default validator allows the modification - bicProvider.setModificationValidator(null); - file.setContents(new ByteArrayInputStream("test4".getBytes()), true, false, null); - } - - public void testMoveDeleteHook() throws CoreException, TeamException { - final IProject project = getUniqueTestProject("testMoveDeleteHook"); - - // adding a valid team provider should be fine - RepositoryProvider.map(project, RepositoryProviderBic.NATURE_ID); - RepositoryProviderBic bicProvider = (RepositoryProviderBic)RepositoryProvider.getProvider(project, RepositoryProviderBic.NATURE_ID); - assertTrue(bicProvider!=null); - - // only testing that dispatching works, resources plugin is testing the rest of the API - final boolean[] called = new boolean[] {false, false, false, false, false, false}; - IMoveDeleteHook hook = new IMoveDeleteHook() { - public boolean deleteFile(IResourceTree tree, IFile file, int updateFlags, IProgressMonitor monitor) { - called[0] = true; - return false; - } - public boolean deleteFolder(IResourceTree tree, IFolder folder, int updateFlags, IProgressMonitor monitor) { - called[1] = true; - return false; - } - public boolean deleteProject(IResourceTree tree, IProject project, int updateFlags, IProgressMonitor monitor) { - called[2] = true; - return false; - } - public boolean moveFile(IResourceTree tree, IFile source, IFile destination, int updateFlags, IProgressMonitor monitor) { - called[3] = true; - return false; - } - public boolean moveFolder(IResourceTree tree, IFolder source, IFolder destination, int updateFlags, IProgressMonitor monitor) { - called[4] = true; - return false; - } - public boolean moveProject(IResourceTree tree, IProject source, IProjectDescription description, int updateFlags, IProgressMonitor monitor) { - called[5] = true; - return false; - } - }; - bicProvider.setMoveDeleteHook(hook); - - IResource[] resources = buildResources(project, new String[] {"deleteFile.txt", "moveFile.txt", "deletedFolder/", "moveFolder/"}); - ensureExistsInWorkspace(resources, true); - resources[0].delete(false, null); - resources[1].move(resources[1].getFullPath().removeLastSegments(1).append("movedFile_NEW"), false, null); - resources[2].delete(false, null); - resources[3].move(resources[3].getFullPath().removeLastSegments(1).append("movedFolder"), false, null); - // moving using the description allows the moved project to have natures ids or origination - IProjectDescription desc = project.getDescription(); - desc.setName("movedProject"); - project.move(desc, false, null); - IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject("movedProject"); - bicProvider = (RepositoryProviderBic)RepositoryProvider.getProvider(newProject); - bicProvider.setMoveDeleteHook(hook); - newProject.delete(true, null); - for (int i = 0; i < called.length; i++) { - assertTrue(called[i]); - } - } - - public void testMoveDeleteHookBetweenProjects() throws CoreException, TeamException { - final IProject projectA = getUniqueTestProject("testMoveDeleteHookBetweenProjects_A"); - final IProject projectB = getUniqueTestProject("testMoveDeleteHookBetweenProjects_B"); - final IProject projectC = getUniqueTestProject("testMoveDeleteHookBetweenProjects_C"); - - // adding a valid team provider should be fine - RepositoryProvider.map(projectA, RepositoryProviderBic.NATURE_ID); - final RepositoryProviderBic bicProvider = (RepositoryProviderBic)RepositoryProvider.getProvider(projectA, RepositoryProviderBic.NATURE_ID); - RepositoryProvider.map(projectB, RepositoryProviderNaish.NATURE_ID); - final RepositoryProviderNaish naishProvider = (RepositoryProviderNaish)RepositoryProvider.getProvider(projectB, RepositoryProviderNaish.NATURE_ID); - assertTrue(bicProvider!=null && naishProvider!=null); - - // only testing that dispatching works, resources plugin is testing the rest of the API - final boolean[] calledProjectA = new boolean[] {false, false}; - bicProvider.setMoveDeleteHook(new IMoveDeleteHook() { - public boolean deleteFile(IResourceTree tree, IFile file, int updateFlags, IProgressMonitor monitor) { - return false; - } - public boolean deleteFolder(IResourceTree tree, IFolder folder, int updateFlags, IProgressMonitor monitor) { - return false; - } - public boolean deleteProject(IResourceTree tree, IProject project, int updateFlags, IProgressMonitor monitor) { - return false; - } - public boolean moveFile(IResourceTree tree, IFile source, IFile destination, int updateFlags, IProgressMonitor monitor) { - assertTrue(bicProvider.getProject().equals(source.getProject())); - calledProjectA[0] = true; - return false; - } - public boolean moveFolder(IResourceTree tree, IFolder source, IFolder destination, int updateFlags, IProgressMonitor monitor) { - assertTrue(bicProvider.getProject().equals(source.getProject())); - calledProjectA[1] = true; - return false; - } - public boolean moveProject(IResourceTree tree, IProject source, IProjectDescription description, int updateFlags, IProgressMonitor monitor) { - return false; - } - }); - - final boolean[] calledProjectB = new boolean[] {false, false}; - naishProvider.setMoveDeleteHook(new IMoveDeleteHook() { - public boolean deleteFile(IResourceTree tree, IFile file, int updateFlags, IProgressMonitor monitor) { - return false; - } - public boolean deleteFolder(IResourceTree tree, IFolder folder, int updateFlags, IProgressMonitor monitor) { - return false; - } - public boolean deleteProject(IResourceTree tree, IProject project, int updateFlags, IProgressMonitor monitor) { - return false; - } - public boolean moveFile(IResourceTree tree, IFile source, IFile destination, int updateFlags, IProgressMonitor monitor) { - assertTrue(bicProvider.getProject().equals(destination.getProject())); - calledProjectB[0] = true; - return false; - } - public boolean moveFolder(IResourceTree tree, IFolder source, IFolder destination, int updateFlags, IProgressMonitor monitor) { - assertTrue(bicProvider.getProject().equals(destination.getProject())); - calledProjectB[1] = true; - return false; - } - public boolean moveProject(IResourceTree tree, IProject source, IProjectDescription description, int updateFlags, IProgressMonitor monitor) { - return false; - } - }); - - // test that moving files/folders between two projects with providers calls the destination - IResource[] resources = buildResources(projectA, new String[] {"moveFile.txt", "moveFolder/"}); - ensureExistsInWorkspace(resources, true); - resources[0].move(projectB.getFullPath().append("moveFile_new.txt"), false, null); - resources[1].move(projectB.getFullPath().append("movedFolder"), false, null); - for (int i = 0; i < calledProjectA.length; i++) { - assertTrue(calledProjectA[i] && calledProjectB[i]==false); - } - - // test that moving files/folders from a project with a provider to a project without a provider calls the - // hooks for the source - calledProjectA[0] = false; calledProjectA[1] = false; - calledProjectB[0] = false; calledProjectB[1] = false; - resources = buildResources(projectA, new String[] {"anotherMovedFiled.txt", "anotherMovedFolder/"}); - ensureExistsInWorkspace(resources, true); - resources[0].move(projectC.getFullPath().append("moveFileOther_new.txt"), false, null); - resources[1].move(projectC.getFullPath().append("movedFolderOther"), false, null); - for (int i = 0; i < calledProjectA.length; i++) { - assertTrue(calledProjectA[i] && calledProjectB[i]==false); - } - } - - public void testMapSuccess() throws CoreException, TeamException { - IProject project = getUniqueTestProject("testLinkSuccess"); - buildResources(project, new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" }, true); - IFolder folder = project.getFolder("link"); - folder.createLink(getRandomLocation(), IResource.ALLOW_MISSING_LOCAL, null); - RepositoryProviderWithLinking.setCanHandleLinking(true); - RepositoryProvider.map(project, RepositoryProviderWithLinking.TYPE_ID); - } - - public void testLinkSuccess() throws CoreException, TeamException { - IProject project = getUniqueTestProject("testLinkSuccess"); - buildResources(project, new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" }, true); - RepositoryProviderWithLinking.setCanHandleLinking(true); - RepositoryProvider.map(project, RepositoryProviderWithLinking.TYPE_ID); - IFolder folder = project.getFolder("link"); - folder.createLink(getRandomLocation(), IResource.ALLOW_MISSING_LOCAL, null); - } - - public void testMapFailure() throws CoreException, TeamException { - IProject project = getUniqueTestProject("testLinkSuccess"); - buildResources(project, new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" }, true); - IFolder folder = project.getFolder("link"); - folder.createLink(getRandomLocation(), IResource.ALLOW_MISSING_LOCAL, null); - try { - RepositoryProviderWithLinking.setCanHandleLinking(false); - RepositoryProvider.map(project, RepositoryProviderWithLinking.TYPE_ID); - } catch (TeamException e) { - if (e.getStatus().getCode() != IResourceStatus.LINKING_NOT_ALLOWED) { - throw e; - } - return; - } - fail("Link should be disallowed"); - } - - public void testLinkFailure() throws CoreException, TeamException { - IProject project = getUniqueTestProject("testLinkSuccess"); - buildResources(project, new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" }, true); - RepositoryProviderWithLinking.setCanHandleLinking(false); - RepositoryProvider.map(project, RepositoryProviderWithLinking.TYPE_ID); - IFolder folder = project.getFolder("link"); - try { - folder.createLink(getRandomLocation(), IResource.ALLOW_MISSING_LOCAL, null); - } catch (CoreException e) { - if (e.getStatus().getCode() != IResourceStatus.LINKING_NOT_ALLOWED) { - throw e; - } - return; - } - fail("Link should be disallowed"); - } - - public void testIsShared() throws CoreException, TeamException { - IProject project1 = getUniqueTestProject("testGetProviderById_1"); - RepositoryProvider.map(project1, RepositoryProviderBic.NATURE_ID); - assertTrue(RepositoryProvider.isShared(project1)); - project1.close(null); - assertTrue(!RepositoryProvider.isShared(project1)); - project1.open(null); - assertTrue(RepositoryProvider.isShared(project1)); - RepositoryProvider.unmap(project1); - assertTrue(!RepositoryProvider.isShared(project1)); - } - -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTypeBic.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTypeBic.java deleted file mode 100644 index 21c238e78..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTypeBic.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import java.io.File; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.team.core.ProjectSetCapability; -import org.eclipse.team.core.RepositoryProviderType; -import org.eclipse.team.core.TeamException; - -public class RepositoryProviderTypeBic extends RepositoryProviderType { - File createdFile; - /** - * @see org.eclipse.team.core.RepositoryProviderType#getProjectSetCapability() - */ - public ProjectSetCapability getProjectSetCapability() { - return new ProjectSetCapability() { - public IProject[] addToWorkspace( - String[] referenceStrings, - String filename, - IPath root, - Object context, - IProgressMonitor monitor) - throws TeamException { - return null; - } - - public void projectSetCreated( - File file, - IProgressMonitor monitor) { - - createdFile = file; - } - }; - } - - /** - * @return File - */ - public File getCreatedFile() { - return createdFile; - } - - /** - * Sets the createdFile. - * @param createdFile The createdFile to set - */ - public void setCreatedFile(File createdFile) { - this.createdFile = createdFile; - } - -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderWithLinking.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderWithLinking.java deleted file mode 100644 index fc5f34b08..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderWithLinking.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.team.core.RepositoryProvider; - -/** - * This class is used to text resource linking - */ -public class RepositoryProviderWithLinking extends RepositoryProvider { - - final public static String TYPE_ID = "org.eclipse.team.tests.core.linking"; - - private static boolean canHandleLinking = false; - - /** - * @see org.eclipse.team.core.RepositoryProvider#configureProject() - */ - public void configureProject() throws CoreException { - } - /** - * @see org.eclipse.team.core.RepositoryProvider#getID() - */ - public String getID() { - return TYPE_ID; - } - /** - * @see org.eclipse.core.resources.IProjectNature#deconfigure() - */ - public void deconfigure() throws CoreException { - } - - /** - * Sets the canHandleLinking. - * @param canHandleLinking The canHandleLinking to set - */ - public static void setCanHandleLinking(boolean canHandleLinking) { - RepositoryProviderWithLinking.canHandleLinking = canHandleLinking; - } - - /** - * @see org.eclipse.team.core.RepositoryProvider#canHandleLinkedResources() - */ - public boolean canHandleLinkedResources() { - return canHandleLinking; - } - -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/StreamTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/StreamTests.java deleted file mode 100644 index b7fcc06bd..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/StreamTests.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; -import org.eclipse.team.internal.core.streams.CRLFtoLFInputStream; -import org.eclipse.team.internal.core.streams.LFtoCRLFInputStream; - -public class StreamTests extends TestCase { - private static final byte[] EMPTY_SEQ = new byte[] { }; - private static final byte[] LF_SEQ = new byte[] { '\n' }; - private static final byte[] CRLF_SEQ = new byte[] { '\r', '\n' }; - - public StreamTests(String name) { - super(name); - } - - public static Test suite() { - return new TestSuite(StreamTests.class); - } - - public void testCRLFtoLFInputStream() throws IOException { - testCRLFtoLFTranslation("", ""); - testCRLFtoLFTranslation("a", "a"); - testCRLFtoLFTranslation("abc", "abc"); - testCRLFtoLFTranslation("\n", "\n"); - testCRLFtoLFTranslation("\r", "\r"); - testCRLFtoLFTranslation("\r\n", "\n"); - testCRLFtoLFTranslation("x\r\r\n\rx", "x\r\n\rx"); - testCRLFtoLFTranslation("The \r\n quick brown \n fox \r\n\n\r\r\n jumped \n\n over \r\n the \n lazy dog.\r\n", - "The \n quick brown \n fox \n\n\r\n jumped \n\n over \n the \n lazy dog.\n"); - } - - private void testCRLFtoLFTranslation(String pre, String post) throws IOException { - ByteArrayInputStream bin = new ByteArrayInputStream(pre.getBytes()); - InputStream in = new CRLFtoLFInputStream(bin); - InputStream inExpected = new ByteArrayInputStream(post.getBytes()); - assertStreamEquals(inExpected, in); - } - - public void testLFtoCRLFInputStream() throws IOException { - testLFtoCRLFTranslation("", ""); - testLFtoCRLFTranslation("a", "a"); - testLFtoCRLFTranslation("abc", "abc"); - testLFtoCRLFTranslation("\n", "\r\n"); - testLFtoCRLFTranslation("\r", "\r"); - testLFtoCRLFTranslation("\r\n", "\r\r\n"); - testLFtoCRLFTranslation("x\r\r\n\rx", "x\r\r\r\n\rx"); - testLFtoCRLFTranslation("The \r\n quick brown \n fox \r\n\n\r\r\n jumped \n\n over \r\n the \n lazy dog.\r\n", - "The \r\r\n quick brown \r\n fox \r\r\n\r\n\r\r\r\n jumped \r\n\r\n over \r\r\n the \r\n lazy dog.\r\r\n"); - } - - private void testLFtoCRLFTranslation(String pre, String post) throws IOException { - ByteArrayInputStream bin = new ByteArrayInputStream(pre.getBytes()); - InputStream in = new LFtoCRLFInputStream(bin); - InputStream inExpected = new ByteArrayInputStream(post.getBytes()); - assertStreamEquals(inExpected, in); - } - - private void assertStreamEquals(InputStream in1, InputStream in2) throws IOException { - try { - for (;;) { - int byte1 = in1.read(); - int byte2 = in2.read(); - assertEquals("Streams not equal", byte1, byte2); - if (byte1 == -1) break; - } - } finally { - in1.close(); - in2.close(); - } - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java deleted file mode 100644 index 756159d7a..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java +++ /dev/null @@ -1,707 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import java.io.ByteArrayInputStream; -import java.io.IOException; - -import junit.framework.AssertionFailedError; -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.ILocalSyncElement; -import org.eclipse.team.core.sync.IRemoteSyncElement; -import org.eclipse.team.core.sync.RemoteSyncElement; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.core.target.UrlUtil; - -public class SyncElementTest extends TeamTest { - /* - * Constructor for SyncElementTest. - */ - public SyncElementTest() { - super(); - } - - /* - * Constructor for SyncElementTest. - * @param name - */ - public SyncElementTest(String name) { - super(name); - } - - public static Test suite() { - TestSuite suite = new TestSuite(SyncElementTest.class); - return new TargetTestSetup(suite); - //return new CVSTestSetup(new SyncElementTest("testAdditionConflicts")); - } - /* - * Get the child in the sync tree - */ - protected ILocalSyncElement getChild(ILocalSyncElement tree, IPath path) throws TeamException { - if (path.segmentCount() == 0) - return tree; - ILocalSyncElement[] children = tree.members(DEFAULT_MONITOR); - for (int i = 0; i < children.length; i++) { - if (children[i].getName().equals(path.segment(0))) - return getChild(children[i], path.removeFirstSegments(1)); - } - assertTrue("Child " + path.toString() + " does not exist", false); - return null; - } - - /* - * Assert that the specified resources in the tree have the specified sync kind - * Ignore conflict types if they are not specified in the assert statement - */ - public void assertSyncEquals(String message, ILocalSyncElement tree, String[] resources, int[] syncKinds, int granularity) - throws TeamException { - assertTrue(resources.length == syncKinds.length); - for (int i = 0; i < resources.length; i++) { - int conflictTypeMask = 0x0F; // ignore manual and auto merge sync types for now. - ILocalSyncElement child = getChild(tree, new Path(resources[i])); - int kind = child.getSyncKind(granularity, DEFAULT_MONITOR) & conflictTypeMask; - int kindOther = syncKinds[i] & conflictTypeMask; - assertTrue( - message - + ": improper sync state for " - + resources[i] - + " expected " - + RemoteSyncElement.kindToString(kindOther) - + " but was " - + RemoteSyncElement.kindToString(kind), - kind == kindOther); - } - } - - public void assertSyncEquals(String message, ILocalSyncElement tree, String[] resources, int[] syncKinds) throws TeamException { - assertSyncEquals(message, tree, resources, syncKinds, ILocalSyncElement.GRANULARITY_TIMESTAMP); - } - - /* - * Assert that the named resources have no local resource or sync info - */ - public void assertDeleted(String message, IRemoteSyncElement tree, String[] resources) throws CoreException, TeamException { - for (int i = 0; i < resources.length; i++) { - try { - getChild(tree, new Path(resources[i])); - } catch (AssertionFailedError e) { - break; - } - assertTrue(message + ": resource " + resources[i] + " still exists in some form", false); - } - } - - IRemoteSyncElement getRemoteSyncTree(IProject project, IProgressMonitor monitor) throws TeamException { - return getProvider(project).getRemoteSyncElement(project); - } - protected IProject checkoutCopy(IProject project, String postfix) throws CoreException,TeamException { - TargetProvider provider = getProvider(project); - IProject result = getUniqueTestProject(project.getName()+postfix); - TargetManager.map(result, provider.getSite(), UrlUtil.getTrailingPath(provider.getURL(), provider.getSite().getURL())); - TargetProvider target = TargetManager.getProvider(result); - target.get(new IResource[] { result }, null); - return result; - } - protected void getResourcesFromTarget(IProject project, String[] resourceNames)throws TeamException,CoreException { - TargetProvider provider=getProvider(project); - IResource[] resources=getResources(project,resourceNames); - provider.get(resources,null); - } - protected void putResourcesOntoTarget(IProject project, String[] resourceNames)throws TeamException,CoreException { - TargetProvider provider=getProvider(project); - IResource[] resources=getResources(project,resourceNames); - provider.put(resources,null); - } - /** - * Add the resources to an existing container and optionally upload them to the remote server - */ - public IResource[] addResources(IProject container, String[] hierarchy, boolean checkin) throws CoreException, TeamException { - IResource[] newResources = buildResources(container, hierarchy, false); - if (checkin) getProvider(container).put(newResources, DEFAULT_MONITOR); - return newResources; - } - /** - * Delete the resources from an existing container and optionally add the changes to the remote server - */ - public IResource[] deleteResources(IProject container, String[] hierarchy, boolean checkin) throws CoreException, TeamException { - IResource[] resources = getResources(container, hierarchy); - for (int i = 0; i < resources.length; i++) { - resources[0].delete(true, null); - } - if (checkin) getProvider(container).put(resources, DEFAULT_MONITOR); - return resources; - } - /* - * Perform a simple test that checks for the different types of incoming changes - */ - public void testIncomingChanges() throws TeamException, CoreException, IOException { - // Create a test project - IProject project = createAndPut("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt" }); - - // Checkout and modify a copy - IProject copy = checkoutCopy(project, "-copy"); - IFile file = copy.getFile("folder1/a.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(new ByteArrayInputStream("This will be different".getBytes()), false, false, null); - addResources(copy, new String[] { "folder2/folder3/add.txt" }, false); - deleteResources(copy, new String[] { "folder1/b.txt" }, false); - sleep(1500); // Wait so that timestamp of modified file differs from original - putResourcesOntoTarget(copy,new String[] { "folder1/a.txt","folder2/folder3/add.txt","folder1/b.txt" }); - - // Get the sync tree for the project - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testIncomingChanges", - tree, - new String[] { - "file1.txt", - "folder1/", - "folder1/a.txt", - "folder1/b.txt", - "folder2/", - "folder2/folder3/", - "folder2/folder3/add.txt" }, - new int[] { - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.INCOMING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.INCOMING | IRemoteSyncElement.DELETION, - IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION, - IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION, - IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION }); - - // Verify that we are in sync (except for "folder1/b.txt", which was deleted) - getResourcesFromTarget(project, - new String[] { - "file1.txt", - "folder1/", - "folder1/a.txt", - "folder1/b.txt", - "folder2/", - "folder2/folder3/", - "folder2/folder3/add.txt" }); - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testIncomingChanges", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt" }, - new int[] { - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC }); - - // Ensure "folder1/b.txt" was deleted - assertDeleted("testIncomingChanges", tree, new String[] { "folder1/b.txt" }); - - // Verify that the copy equals the original - assertEquals(project, copy); - } - - /* - * Perform a simple test that checks for the different types of outgoing changes - */ - public void testOutgoingChanges() throws TeamException, CoreException { - // Create a test project (which commits it as well) - IProject project = createAndPut("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt" }); - - // Make some modifications - IFile file = project.getFile("folder1/a.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(getRandomContents(), false, false, null); - addResources(project, new String[] { "folder2/folder3/add.txt" }, false); - deleteResources(project, new String[] { "folder1/b.txt" }, false); - - // Get the sync tree for the project - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testOutgoingChanges", - tree, - new String[] { - "file1.txt", - "folder1/", - "folder1/a.txt", - "folder1/b.txt", - "folder2/", - "folder2/folder3/", - "folder2/folder3/add.txt" }, - new int[] { - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION }); - - // Commit the changes - putResourcesOntoTarget(project, new String[] { "folder1/a.txt", "folder1/b.txt", "folder2/folder3/add.txt" }); - - // Ensure we're in sync - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testOutgoingChanges", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt" }, - new int[] { - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC }); - - // Ensure deleted resource "folder1/b.txt" no longer exists - assertDeleted("testOutgoingChanges", tree, new String[] { "folder1/b.txt" }); - } - - /* - * Test simple file conflicts - */ - public void testFileConflict() throws TeamException, CoreException, IOException { - // Create a test project (which commits it as well) - IProject project = createAndPut("testFileConflict", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt" }); - - // Checkout a copy and make some modifications - IProject copy = checkoutCopy(project, "-copy"); - IFile file = copy.getFile("file1.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - appendText(file, "prefix\n", true); - file = copy.getFile("folder1/a.txt"); - file.setContents(new ByteArrayInputStream("Use a custom string to avoid intermitant errors!".getBytes()), false, false, null); - getProvider(copy).put(new IResource[] { copy }, DEFAULT_MONITOR); - - // Make the same modifications to the original (We need to test both M and C!!!) - file = project.getFile("file1.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - appendText(file, "\npostfix", false); // This will test merges (M) - file = project.getFile("folder1/a.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(getRandomContents(), false, false, null); // This will test conflicts (C) - - // Get the sync tree for the project - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testFileConflict", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt" }, - new int[] { - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE }); - - // Catch up to the file1.txt conflict using UPDATE with ignoreLocalChanges - getResourcesFromTarget(project, new String[] { "file1.txt" }); - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testFileConflict", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt" }, - new int[] { - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE }); - - // Release the folder1/a.txt conflict uploading - getProvider(project).put(new IResource[] { project.getFile("folder1/a.txt")}, DEFAULT_MONITOR); - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testFileConflict", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt" }, - new int[] { IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC }); - } - - /* - * Test conflicts involving additions - */ - public void testAdditionConflicts() throws TeamException, CoreException { - // CASE 1: The user adds (using CVS add) a remotely added file - // (a) catchup is simply get? - // (b) release must do a merge - // CASE 2: The user adds (but not using cvs add) a remotely added file - // (a) catchup is simply get? - // (b) release must do a merge - // CASE 3: The user adds a remotely added then deleted file - // catchup is not applicable - // release is normal - - // Create a test project (which commits it as well) and add an uncommited resource - IProject project = createAndPut("testAdditionConflicts", new String[] { "file.txt" }); - addResources(project, new String[] { "add1a.txt", "add1b.txt" }, false); - addResources(project, new String[] { "add3.txt" }, false); - buildResources(project, new String[] { "add2a.txt", "add2b.txt" }, false); //useless code!??? - - // Checkout a copy, add the same resource and commit - IProject copy = checkoutCopy(project, "-copy"); - addResources(copy, new String[] { "add1a.txt", "add1b.txt", "add2a.txt", "add2b.txt", "add3.txt" }, true); - deleteResources(copy, new String[] { "add3.txt" }, true); - - // Get the sync tree for the project - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testAdditionConflicts", - tree, - new String[] { "file.txt", "add1a.txt", "add1b.txt", "add2a.txt", "add2b.txt", "add3.txt" }, - new int[] { - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION }); - - getProvider(project).put( - new IResource[] { project.getFile("add1b.txt"), project.getFile("add2b.txt"), project.getFile("add3.txt")}, - DEFAULT_MONITOR); - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testAdditionConflicts", - tree, - new String[] { "file.txt", "add1b.txt", "add2b.txt", "add3.txt" }, - new int[] { IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC }); - - IFile file = project.getFile("add1a.txt"); - file.delete(false, DEFAULT_MONITOR); - file = project.getFile("add2a.txt"); - file.delete(false, DEFAULT_MONITOR); - getResourcesFromTarget(project, new String[] { "add1a.txt","add2a.txt" });//This replaces the chunk commented out below: - /*getProvider(project).update( - new IResource[] { project.getFile("add1a.txt"), project.getFile("add2a.txt")}, - new Command.LocalOption[] { Command.DO_NOT_RECURSE }, - null, - true, //createBackups - DEFAULT_MONITOR - );*/ - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testAdditionConflicts", - tree, - new String[] { "add1a.txt", "add2a.txt" }, - new int[] { IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC }); - } - - /* - * Test conflicts involving deletions - */ - public void testDeletionConflicts() throws TeamException, CoreException { - - // CASE 1: The user deletes a remotely modified file - // (a) catchup must do an update - // (b) release must do a merge - // CASE 2: The user deletes (and removes) a remotely modified file - // (a) catchup must do an unmanage and update - // (b) release must do a merge - // CASE 3: The user modified a remotely deleted file - // (a) catchup must do an unmanage and local delete - // (b) release must do a merge - // CASE 4: The user deletes a remotely deleted file - // (a) catchup can update (or unmanage?) - // (b) release must unmanage - // CASE 5: The user deletes (and removes) a remotely deleted file - // (a) catchup can update (or unmanage?) - // (b) release must unmanage - - // Perform the test case for case A first - - // Create a test project (which commits it as well) and delete the resource without committing - IProject project = - createAndPut( - "testDeletionConflictsA", - new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt" }); - IFile file = project.getFile("delete1.txt"); - file.delete(false, DEFAULT_MONITOR); - deleteResources(project, new String[] { "delete2.txt" }, false); - file = project.getFile("delete3.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(new ByteArrayInputStream("unique text for delete3.txt".getBytes()), false, false, null); - file = project.getFile("delete4.txt"); - file.delete(false, DEFAULT_MONITOR); - deleteResources(project, new String[] { "delete5.txt" }, false); - - // Checkout a copy and commit the deletion - IProject copy = checkoutCopy(project, "-copy"); - file = copy.getFile("delete1.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(new ByteArrayInputStream("unique text for delete1.txt".getBytes()), false, false, null); - file = copy.getFile("delete2.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(new ByteArrayInputStream("unique text for delete2.txt".getBytes()), false, false, null); - deleteResources(copy, new String[] { "delete3.txt", "delete4.txt", "delete5.txt" }, false); - getProvider(copy).put(new IResource[] { copy }, DEFAULT_MONITOR); - - // Get the sync tree for the project - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testDeletionConflictsA", - tree, - new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt" }, - new int[] { - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE | IRemoteSyncElement.PSEUDO_CONFLICT, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE | IRemoteSyncElement.PSEUDO_CONFLICT }); - - // Catch up to remote changes. - - project.getFile("delete3.txt").delete(false, DEFAULT_MONITOR); - - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testDeletionConflictsA", - tree, - new String[] { "delete1.txt", "delete2.txt" }, - new int[] { - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE | IRemoteSyncElement.PSEUDO_CONFLICT, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE | IRemoteSyncElement.PSEUDO_CONFLICT }); - assertDeleted("testDeletionConflictsA", tree, new String[] { "delete3.txt", "delete4.txt", "delete5.txt" }); - - // Now redo the test case for case B - - // Create a test project (which commits it as well) and delete the resource without committing - project = - createAndPut( - "testDeletionConflictsB", - new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt" }); - file = project.getFile("delete1.txt"); - file.delete(false, DEFAULT_MONITOR); - deleteResources(project, new String[] { "delete2.txt" }, false); - file = project.getFile("delete3.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(getRandomContents(), false, false, null); - file = project.getFile("delete4.txt"); - file.delete(false, DEFAULT_MONITOR); - deleteResources(project, new String[] { "delete5.txt" }, false); - - // Checkout a copy and commit the deletion - copy = checkoutCopy(project, "-copy"); - file = copy.getFile("delete1.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(getRandomContents(), false, false, null); - file = copy.getFile("delete2.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - file.setContents(getRandomContents(), false, false, null); - deleteResources(copy, new String[] { "delete3.txt", "delete4.txt", "delete5.txt" }, false); - getProvider(copy).put(new IResource[] { copy }, DEFAULT_MONITOR); - - // Get the sync tree for the project - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testDeletionConflictsB", - tree, - new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt" }, - new int[] { - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC }); - - // Release the resources - - putResourcesOntoTarget(project, new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt" }); - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals("testDeletionConflictsB", tree, new String[] { "delete3.txt" }, new int[] { IRemoteSyncElement.IN_SYNC }); - assertDeleted("testDeletionConflictsB", tree, new String[] { "delete1.txt", "delete2.txt", "delete4.txt", "delete5.txt" }); - } - - /* - * Test that a deleted file can still be deleted through the team provider - */ - public void testOutgoingDeletion() throws TeamException, CoreException { - - // Create a test project (which commits it as well) - IProject project = createAndPut("testOutgoingDeletion", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt" }); - - // Delete a file - IFile file = project.getFile("folder1/b.txt"); - file.delete(true, DEFAULT_MONITOR); // WARNING: As of 2002/03/05, this is equivalent to a cvs remove - - // Get the sync tree for the project - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testOutgoingDeletion", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt" }, - new int[] { - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION }); - - // Commit the deletion - getProvider(file.getProject()).put(new IResource[] { file }, DEFAULT_MONITOR); - - // Get the sync tree again for the project and ensure others aren't effected - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testOutgoingDeletion", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt" }, - new int[] { IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC }); - - // Assert that deletion no longer appears in remote tree - assertDeleted("testOutgoingDeletion", tree, new String[] { "folder1/b.txt" }); - } - - /* - * Test catching up to an incoming addition - */ - public void testIncomingAddition() throws TeamException, CoreException { - // Create a test project - IProject project = createAndPut("testIncomingAddition", new String[] { "file1.txt", "folder1/", "folder1/a.txt" }); - - // Checkout and modify a copy - IProject copy = checkoutCopy(project, "-copy"); - addResources(copy, new String[] { "folder1/add.txt" }, true); - - // Get the sync tree for the project - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testIncomingAddition", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/add.txt" }, - new int[] { - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION }); - - // Get the resource from the tree - ILocalSyncElement element = getChild(tree, new Path("folder1/add.txt")); - - // Catch up to the addition by updating - getResourcesFromTarget(project, new String[] { "folder1/add.txt" }); - - // Get the sync tree again for the project and ensure the added resource is in sync - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testIncomingAddition", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/add.txt" }, - new int[] { IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC }); - } - - /* - * Test changes using a granularity of contents - */ - public void testGranularityContents() throws TeamException, CoreException, IOException { - // Create a test project (which commits it as well) - IProject project = - createAndPut("testGranularityContents", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt" }); - - // Checkout a copy and make some modifications - IProject copy = checkoutCopy(project, "-copy"); - IFile file = copy.getFile("file1.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - appendText(file, "a", true); - file = copy.getFile("folder1/a.txt"); - file.setContents(getRandomContents(), false, false, null); - putResourcesOntoTarget(copy, new String[] { "file1.txt","folder1/a.txt" }); - - // Make the same modifications to the original - file = project.getFile("file1.txt"); - sleep(1500); // Wait so that timestamp of modified file differs from original - appendText(file, "a", false); - file = project.getFile("folder1/a.txt"); - file.setContents(new ByteArrayInputStream("unique text".getBytes()), false, false, null); - - // Get the sync tree for the project - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testGranularityContents", - tree, - new String[] { "file1.txt", "folder1/", "folder1/a.txt" }, - new int[] { - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE | IRemoteSyncElement.PSEUDO_CONFLICT, - IRemoteSyncElement.IN_SYNC, - IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE }, - IRemoteSyncElement.GRANULARITY_CONTENTS); - } - - public void testRenameProject() throws TeamException, CoreException, IOException { - String[] resourceNames = new String[] { "changed.txt", "folder1/", "folder1/a.txt" }; - int[] inSync = new int[] { IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC }; - IProject project = createAndPut("testRenameProject", new String[] { "changed.txt", "folder1/", "folder1/a.txt" }); - - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals("sync should be in sync", tree, resourceNames, inSync); - IProjectDescription desc = project.getDescription(); - String newName = project.getName() + "_renamed"; - desc.setName(newName); - project.move(desc, false, null); - project = ResourcesPlugin.getWorkspace().getRoot().getProject(newName); - assertTrue(project.exists()); - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals("sync should be in sync", tree, resourceNames, inSync); - } - - public void testFolderDeletion() throws TeamException, CoreException { - - IProject project = - createAndPut( - "testFolderDeletion", - new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/file.txt" }); - - // Delete a folder and ensure that the file is managed but doesn't exist - project.getFolder("folder1").delete(false, false, null); - - // The folders and files should show up as outgoing deletions - IRemoteSyncElement tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testFolderDeletion sync check", - tree, - new String[] { "folder1", "folder1/a.txt", "folder1/folder2", "folder1/folder2/file.txt" }, - new int[] { - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION }); - - // commit folder1/a.txt - putResourcesOntoTarget(project, new String[] { "folder1/a.txt" }); - - // Resync and verify that above file is gone and others remain the same - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertSyncEquals( - "testFolderDeletion sync check", - tree, - new String[] { "folder1", "folder1/folder2", "folder1/folder2/file.txt" }, - new int[] { - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION, - IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION }); - assertDeleted("testFolderDeletion", tree, new String[] { "folder1/a.txt" }); - - // Commit folder1/folder2/file.txt - putResourcesOntoTarget(project, new String[] { "folder1/", "folder1/folder2/", "folder1/folder2/file.txt" }); - - // Resync and verify that all are deleted - tree = getRemoteSyncTree(project, DEFAULT_MONITOR); - assertDeleted("testFolderDeletion", tree, new String[] { "folder1", "folder1/folder2", "folder1/folder2/file.txt" }); - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java deleted file mode 100644 index a70a8342d..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java +++ /dev/null @@ -1,237 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import java.net.MalformedURLException; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Path; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; -import org.eclipse.team.internal.core.target.UrlUtil; - -/** - * A set of test cases for org.eclipse.team.core.target.TargetProvider - */ -public class TargetProviderTests extends TeamTest { - - - public TargetProviderTests() { - super(); - } - public TargetProviderTests(String name) { - super(name); - } - public static Test suite() { - TestSuite suite = new TestSuite(TargetProviderTests.class); - return new TargetTestSetup(suite); - //return new TargetTestSetup(new TargetProviderTests("testPutAndGet")); - } - /** - * Tests the link between the target & the site for consistency. - * @throws CoreException - * @throws TeamException - */ - public void testProjectMapping() throws CoreException, TeamException { - IProject project = getUniqueTestProject("projectmapping"); - TargetProvider target = createProvider(project); - assertTrue(getSite().equals(target.getSite())); - TargetManager.unmap(project); - assertNull(TargetManager.getProvider(project)); - } - /** - * Tests the getURL() method on TargetProvider. - * @throws CoreException - * @throws TeamException - */ - public void testUrlRetrieval() throws CoreException, TeamException, MalformedURLException { - IProject project = getNamedTestProject("urlretrieval"); - TargetManager.map(project, getSite(), new Path(properties.getProperty("test_dir"))); - TargetProvider target = TargetManager.getProvider(project); - String goodurl = UrlUtil.concat(properties.getProperty("location"), new Path(properties.getProperty("test_dir"))).toString(); - assertEquals(goodurl, target.getURL().toString()); - } - /** - * Verifies that the get() and put() methods on the TargetProvider works as expected. - * @throws CoreException - * @throws TeamException - */ - public void testPutAndGet() throws CoreException, TeamException { - // test put - IProject project = getUniqueTestProject("get"); - IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - target.put(resources, DEFAULT_MONITOR); - assertLocalEqualsRemote(project); - // test get on a new project - project.delete(true, true, DEFAULT_MONITOR); - project.create(DEFAULT_MONITOR); - project.open(DEFAULT_MONITOR); - target = createProvider(project); - target.get(new IResource[] { project }, DEFAULT_MONITOR); - assertLocalEqualsRemote(project); - } - /** - * Verifies that canGet() and canPut() returns accurate values. - * @throws CoreException - * @throws TeamException - */ - public void testCanGetAndCanPut() throws CoreException, TeamException { - IProject project = getUniqueTestProject("canget"); - IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - for (int i = 0; i < resources.length; i++) { - assertTrue(target.canPut(resources[i])); - } - target.put(resources, DEFAULT_MONITOR); - project.delete(true, true, DEFAULT_MONITOR); - project.create(DEFAULT_MONITOR); - project.open(DEFAULT_MONITOR); - target = createProvider(project); - for (int i = 0; i < resources.length; i++) { - assertTrue(target.canGet(resources[i])); - } - target.get(new IResource[] { project }, null); - } - /** - * Tests bahavior of isOutOfDate() for correctness - * @throws CoreException - * @throws TeamException - */ - public void testIsOutOfDate() throws CoreException, TeamException { - IProject project = getUniqueTestProject("outdated"); - IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - target.put(resources, null); - sleep(1501); - IProject dupeProject = getUniqueTestProject("outdated"); - IResource[] freshResources = buildResources(dupeProject, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetManager.map(dupeProject, getSite(), new Path(properties.getProperty("test_dir")).append(project.getName())); - TargetProvider dupeTarget = TargetManager.getProvider(dupeProject); - dupeTarget.put(freshResources, null); - for (int i = 0; i < resources.length; i++) { - if (resources[i].getType() == IResource.FILE) - assertTrue(target.isOutOfDate(resources[i], DEFAULT_PROGRESS_MONITOR)); - } - } - /** - * Tests bahavior of isDirty() for correctness - * @throws CoreException - * @throws TeamException - */ - public void testIsDirty() throws CoreException, TeamException { - IProject project = getUniqueTestProject("dirty"); - IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - target.put(resources, null); - sleep(1501); - resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - for (int i = 0; i < resources.length; i++) { - if (resources[i].getType()==IResource.FILE) assertTrue(resources[i].getName(),target.isDirty(resources[i])); - } - } - public void testOverwrite() throws CoreException, TeamException { - IProject project = getUniqueTestProject("overwrite"); - IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - target.put(resources, null); - //Create resources with the same names but different content & upload them in the same spot: - resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - target.put(resources, null); - - IProject dupeProject = getUniqueTestProject("overwrite"); - TargetManager.map(dupeProject, getSite(), new Path(properties.getProperty("test_dir")).append(project.getName())); - IResource[] freshResources = buildEmptyResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider dupeTarget = TargetManager.getProvider(dupeProject); - dupeTarget.get(new IResource[] { dupeProject }, null); - for (int i = 0; i < resources.length; i++) { - assertEquals(resources[i],freshResources[i]); - } - } - public void testIsDirtyWhenDeleted() throws CoreException, TeamException { - IProject project = getUniqueTestProject("dirty"); - IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - target.put(resources, null); - for (int i = 0; i < resources.length; i++) { - resources[i].delete(true, null); - } - sleep(1501); - resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - for (int i = 0; i < resources.length; i++) { - if (resources[i].getType()==IResource.FILE) assertTrue(resources[i].getName(),target.isDirty(resources[i])); - } - } - public void testIsOutOfDateWhenDeleted() throws CoreException, TeamException { - IProject project = getUniqueTestProject("outdated"); - IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - target.put(resources, null); - for (int i = 0; i < resources.length; i++) { - resources[i].delete(true, null); - } - sleep(1501); - IProject dupeProject = getUniqueTestProject("outdated"); - IResource[] freshResources = buildResources(dupeProject, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetManager.map(dupeProject, getSite(), new Path(properties.getProperty("test_dir")).append(project.getName())); - TargetProvider dupeTarget = TargetManager.getProvider(dupeProject); - dupeTarget.put(freshResources, null); - for (int i = 0; i < resources.length; i++) { - if (resources[i].getType() == IResource.FILE) - assertTrue(target.isOutOfDate(resources[i], DEFAULT_PROGRESS_MONITOR)); - } - } - public void testPutWithPhantoms() throws CoreException, TeamException { - IProject project = getUniqueTestProject("put"); - IResource[] resources = buildEmptyResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false); - TargetProvider target = createProvider(project); - target.put(resources, null); - for (int i = 0; i < resources.length; i++) { - resources[i].delete(true, null); - } - try { - target.put(resources, null); - for (int i = 0; i < resources.length; i++) { - assertTrue(!target.getRemoteResourceFor(resources[i]).exists(null)); - } - } catch (TeamException e) {} catch (RuntimeException e) { - fail("Putting files that don't exist locally should delete them remotely"); - } - } - public void testGetWithPhantoms() throws CoreException, TeamException { - IProject project = getUniqueTestProject("get"); - String[] testFileNames=new String[] { "file1.txt", "folder1/", "folder1/b.txt" }; - IResource[] resources = buildResources(project, testFileNames, false); - TargetProvider target = createProvider(project); - try { - target.get(new IResource[] { project }, null); - IResource[] phantoms=getResources(project,testFileNames); - for (int i = 0; i < phantoms.length; i++) { - assertTrue(!project.getFile(testFileNames[i]).exists()); - } - } catch (TeamException e) { - fail("Getting files that don't exist remotely should delete them locally"); - } - } - /** - * @see TestCase#setUp() - */ - protected void setUp() throws Exception { - super.setUp(); - properties=TargetTestSetup.properties; - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetTestSetup.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetTestSetup.java deleted file mode 100644 index b18dd00cc..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetTestSetup.java +++ /dev/null @@ -1,108 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Properties; - -import junit.extensions.TestSetup; -import junit.framework.Test; - -import org.eclipse.core.runtime.Path; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.core.target.ISiteFactory; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; - -/** - * A set of test cases for org.eclipse.team.core.sync.IRemoteResource - */ -public class TargetTestSetup extends TestSetup { - - public static Properties properties; - static { - loadProperties(); - } - - public static void loadProperties() { - properties = new Properties(); - String propertiesFile = System.getProperty("eclipse.target.properties"); - if (propertiesFile == null) - return; - File file = new File(propertiesFile); - if (file.isDirectory()) - file = new File(file, "target.properties"); - try { - BufferedReader reader = new BufferedReader(new FileReader(file)); - try { - for (String line;(line = reader.readLine()) != null;) { - int sep = line.indexOf("="); - String property = line.substring(0, sep).trim(); - String value = line.substring(sep + 1).trim(); - properties.setProperty(property, value); - } - } finally { - reader.close(); - } - } catch (Exception e) { - System.err.println("Could not read repository properties file: " + file.getAbsolutePath()); - } - } - - public TargetTestSetup(Test test) { - super(test); - } - /** - * Retrieves the Site object that the TargetProvider is contained in. - * @return Site - */ - Site getSite() { - try { - URL url = new URL(properties.getProperty("location")); - return TargetManager.getSite(properties.getProperty("target"), url); - } catch (MalformedURLException e) { - return null; - } - } - /** - * This method runs before starting the entire test suite. - * @see TestCase#setUp() - */ - protected void setUp() throws Exception { - super.setUp(); - Site location; - ISiteFactory factory = TargetManager.getSiteFactory(properties.getProperty("target")); - assertNotNull(factory); - Site[] locations = TargetManager.getSites(); - - if (locations.length == 0) { - Site l = factory.newSite(properties); - TargetManager.addSite(l); - } - location = getSite(); - - //clean up the directory: - IRemoteTargetResource remote=location.getRemoteResource().getFolder(properties.getProperty("test_dir")); - IRemoteResource[] children=remote.members(null); - for (int i = 0; i < children.length; i++) { - ((IRemoteTargetResource)children[i]).delete(null); - } - - TargetProvider target = location.newProvider(new Path(properties.getProperty("test_dir"))); - assertNotNull(target); - } -} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java deleted file mode 100644 index 5bf347208..000000000 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java +++ /dev/null @@ -1,302 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.tests.core; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Properties; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.tests.harness.EclipseWorkspaceTest; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.sync.IRemoteResource; -import org.eclipse.team.internal.core.target.IRemoteTargetResource; -import org.eclipse.team.internal.core.target.Site; -import org.eclipse.team.internal.core.target.TargetManager; -import org.eclipse.team.internal.core.target.TargetProvider; - -public class TeamTest extends EclipseWorkspaceTest { - protected static IProgressMonitor DEFAULT_MONITOR = new NullProgressMonitor(); - protected static final IProgressMonitor DEFAULT_PROGRESS_MONITOR = new NullProgressMonitor(); - - Properties properties; - - public TeamTest() { - super(); - } - public TeamTest(String name) { - super(name); - } - /** - * @see TestCase#setUp() - */ - protected void setUp() throws Exception { - super.setUp(); - properties = TargetTestSetup.properties; - } - protected IProject getNamedTestProject(String name) throws CoreException { - IProject target = getWorkspace().getRoot().getProject(name); - if (!target.exists()) { - target.create(null); - target.open(null); - } - assertExistsInFileSystem(target); - return target; - } - - protected IProject getUniqueTestProject(String prefix) throws CoreException { - // manage and share with the default stream create by this class - return getNamedTestProject(prefix + "-" + Long.toString(System.currentTimeMillis())); - } - - protected IStatus getTeamTestStatus(int severity) { - return new Status(severity, "org.eclipse.team.tests.core", 0, "team status", null); - } - /** - * Retrieves the Site object that the TargetProvider is contained in. - * @return Site - */ - Site getSite() { - try { - URL url = new URL(properties.getProperty("location")); - return TargetManager.getSite(properties.getProperty("target"), url); - } catch (MalformedURLException e) { - return null; - } - } - /** - * Creates filesystem 'resources' with the given names and fills them with random text. - * @param container An object that can hold the newly created resources. - * @param hierarchy A list of files & folder names to use as resources - * @param includeContainer A flag that controls whether the container is included in the list of resources. - * @return IResource[] An array of resources filled with variable amounts of random text - * @throws CoreException - */ - public IResource[] buildResources(IContainer container, String[] hierarchy, boolean includeContainer) throws CoreException { - List resources = new ArrayList(hierarchy.length + 1); - if (includeContainer) - resources.add(container); - resources.addAll(Arrays.asList(buildResources(container, hierarchy))); - IResource[] result = (IResource[]) resources.toArray(new IResource[resources.size()]); - ensureExistsInWorkspace(result, true); - for (int i = 0; i < result.length; i++) { - if (result[i].getType() == IResource.FILE) // 3786 bytes is the average size of Eclipse Java files! - ((IFile) result[i]).setContents(getRandomContents(100), true, false, null); - } - return result; - } - public IResource[] buildEmptyResources(IContainer container, String[] hierarchy, boolean includeContainer) throws CoreException { - List resources = new ArrayList(hierarchy.length + 1); - resources.addAll(Arrays.asList(buildResources(container, hierarchy))); - if (includeContainer) - resources.add(container); - IResource[] result = (IResource[]) resources.toArray(new IResource[resources.size()]); - ensureExistsInWorkspace(result, true); - return result; - } - /** - * Creates an InputStream filled with random text in excess of a specified minimum. - * @param sizeAtLeast The minimum number of chars to fill the input stream with. - * @return InputStream The input stream containing random text. - */ - protected static InputStream getRandomContents(int sizeAtLeast) { - StringBuffer randomStuff = new StringBuffer(sizeAtLeast + 100); - while (randomStuff.length() < sizeAtLeast) { - randomStuff.append(getRandomSnippet()); - } - return new ByteArrayInputStream(randomStuff.toString().getBytes()); - } - /** - * Produces a random chunk of text from a finite collection of pre-written phrases. - * @return String Some random words. - */ - public static String getRandomSnippet() { - switch ((int) Math.round(Math.random() * 10)) { - case 0 : - return "este e' o meu conteudo (portuguese)"; - case 1 : - return "Dann brauchen wir aber auch einen deutschen Satz!"; - case 2 : - return "I'll be back"; - case 3 : - return "don't worry, be happy"; - case 4 : - return "there is no imagination for more sentences"; - case 5 : - return "customize yours"; - case 6 : - return "foo"; - case 7 : - return "bar"; - case 8 : - return "foobar"; - case 9 : - return "case 9"; - default : - return "these are my contents"; - } - } - public TargetProvider createProvider(IProject project) throws TeamException { - // Ensure the remote folder exists - IRemoteTargetResource remote = getSite().getRemoteResource().getFolder( - new Path(properties.getProperty("test_dir")).append(project.getName()).toString()); - if (! remote.exists(null)) { - remote.mkdirs(null); - } - TargetManager.map(project, getSite(), new Path(properties.getProperty("test_dir")).append(project.getName())); - TargetProvider target = getProvider(project); - return target; - } - - public TargetProvider getProvider(IProject project) throws TeamException { - return TargetManager.getProvider(project); - } - - public void sleep(int ms) { - try { - Thread.sleep(ms); - } catch (InterruptedException e) { - System.err.println("Testing was rudely interrupted."); - } - } - void assertLocalEqualsRemote(IProject project) throws CoreException, TeamException { - IProject newProject = getNamedTestProject("equals"); - TargetProvider target = TargetManager.getProvider(project); - IResource[] localResources = project.members(); - for (int i = 0; i < localResources.length; i++) { - assertEquals(target.getRemoteResourceFor(localResources[i]), localResources[i]); - } - } - // Assert that the two containers have equal contents - protected void assertEquals(IRemoteResource container1, IResource container2) throws CoreException, TeamException { - if (container2.getType() == IResource.FILE) { - // Ignore .project file - if (container2.getName().equals(".project")) - return; - assertTrue(compareContent(container1.getContents(DEFAULT_MONITOR), ((IFile) container2).getContents())); - } else { - IRemoteResource[] remoteResources = container1.members(DEFAULT_MONITOR); - IResource[] localResources = ((IFolder) container2).members(); - for (int i = 0; i < localResources.length; i++) { - assertEquals(remoteResources[i], localResources[i]); - } - } - } - protected IProject createAndPut(String projectPrefix, String[] resourceNames) throws CoreException, TeamException { - IProject project = getUniqueTestProject(projectPrefix); - IResource[] resources = buildResources(project, resourceNames, false); - TargetProvider target = createProvider(project); - target.put(resources, DEFAULT_MONITOR); - return project; - } - - public void appendText(IResource resource, String text, boolean prepend) throws CoreException, IOException { - IFile file = (IFile) resource; - InputStream in = file.getContents(); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try { - if (prepend) { - bos.write(text.getBytes()); - } - int i; - while ((i = in.read()) != -1) { - bos.write(i); - } - if (!prepend) { - bos.write(text.getBytes()); - } - } finally { - in.close(); - } - file.setContents(new ByteArrayInputStream(bos.toByteArray()), false, false, DEFAULT_MONITOR); - } - /* - * Get the resources for the given resource names - */ - public IResource[] getResources(IContainer container, String[] hierarchy) throws CoreException { - IResource[] resources = new IResource[hierarchy.length]; - for (int i=0;i<resources.length;i++) { - resources[i] = container.findMember(hierarchy[i]); - if (resources[i] == null) { - resources[i] = buildResources(container, new String[] {hierarchy[i]})[0]; - } - } - return resources; - } - - // Assert that the two containers have equal contents - protected void assertEquals(IContainer container1, IContainer container2) throws CoreException { - assertEquals(container1.getName(), container2.getName()); - List members1 = new ArrayList(); - members1.addAll(Arrays.asList(container1.members())); - - List members2 = new ArrayList(); - members2.addAll(Arrays.asList(container2.members())); - - assertTrue(members1.size() == members2.size()); - for (int i=0;i<members1.size();i++) { - IResource member1 = (IResource)members1.get(i); - IResource member2 = container2.findMember(member1.getName()); - assertNotNull(member2); - assertEquals(member1, member2); - } - } - - // Assert that the two files have equal contents - protected void assertEquals(IFile file1, IFile file2) throws CoreException { - assertEquals(file1.getName(), file2.getName()); - assertTrue(compareContent(file1.getContents(), file2.getContents())); - } - - // Assert that the two projects have equal contents ignoreing the project name - // and the .vcm_meta file - protected void assertEquals(IProject container1, IProject container2) throws CoreException { - List members1 = new ArrayList(); - members1.addAll(Arrays.asList(container1.members())); - members1.remove(container1.findMember(".project")); - - List members2 = new ArrayList(); - members2.addAll(Arrays.asList(container2.members())); - members2.remove(container2.findMember(".project")); - - assertTrue("Number of children differs for " + container1.getFullPath(), members1.size() == members2.size()); - for (int i=0;i<members1.size();i++) { - IResource member1 = (IResource)members1.get(i); - IResource member2 = container2.findMember(member1.getName()); - assertNotNull(member2); - assertEquals(member1, member2); - } - } - protected void assertEquals(IResource resource1, IResource resource2) throws CoreException { - assertEquals(resource1.getType(), resource2.getType()); - if (resource1.getType() == IResource.FILE) - assertEquals((IFile)resource1, (IFile)resource2); - else - assertEquals((IContainer)resource1, (IContainer)resource2); - } -} diff --git a/tests/org.eclipse.team.tests.core/test.xml b/tests/org.eclipse.team.tests.core/test.xml deleted file mode 100644 index bc792fd2a..000000000 --- a/tests/org.eclipse.team.tests.core/test.xml +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0"?> - -<project name="Team Automated Tests" default="run" basedir="."> - - <!-- The property ${eclipse-home} should be passed into this script --> - - <!-- sets the properties eclipse-home, and library-file --> - <property name="eclipse-home" value="${basedir}/../../"/> - <property name="library-file" value="${eclipse-home}/plugins/org.eclipse.test/library.xml"/> - <property name="org.eclipse.team.tests.core" value="org.eclipse.team.tests.core"/> - <property name="team-home" value="${eclipse-home}/plugins/${org.eclipse.team.tests.core}"/> - - <!-- This target holds all initialization code that needs to be done for --> - <!-- all tests that are to be run. Initialization for individual tests --> - <!-- should be done within the body of the suite target. --> - <target name="init"> - <tstamp/> - </target> - - <!-- This target defines the tests that need to be run. --> - <target name="suite"> - <property name="location" value="${eclipse-home}/team_test_workspace"/> - <delete dir="${location}" quiet="true"/> - - <!-- Session Test ** Team Core ** --> - <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}"> - <property name="data-dir" value="${location}"/> - <property name="plugin-name" value="org.eclipse.team.tests.core"/> - <property name="classname" value="org.eclipse.team.tests.core.AllTeamTests"/> - </ant> - - </target> - - <!-- This target defines the FTP tests that need to be run. --> - <target name="ftpsuite"> - <property name="location" value="${eclipse-home}/team_test_workspace"/> - <delete dir="${location}" quiet="true"/> - - <!-- Session Test ** FTP ** --> - <property name="classname" value="org.eclipse.team.tests.core.TargetProviderTests"/> - <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}"> - <property name="data-dir" value="${location}"/> - <property name="plugin-name" value="org.eclipse.team.tests.core"/> - <property name="classname" value="org.eclipse.team.tests.core.TargetProviderTests"/> - <property name="vmargs" value="-Declipse.target.properties=${team-home}/ftp.properties"/> - </ant> - <move file="${eclipse-home}/${classname}.xml" tofile="${eclipse-home}/${classname}-ftp.xml"/> - </target> - - <!-- This target defines the WebDAV tests that need to be run. --> - <target name="webdavsuite"> - <property name="location" value="${eclipse-home}/team_test_workspace"/> - <delete dir="${location}" quiet="true"/> - - <!-- Session Test ** WebDAV ** --> - <property name="classname" value="org.eclipse.team.tests.core.TargetProviderTests"/> - <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}"> - <property name="data-dir" value="${location}"/> - <property name="plugin-name" value="org.eclipse.team.tests.core"/> - <property name="classname" value="${classname}"/> - <property name="vmargs" value="-Declipse.target.properties=${team-home}/webdav.properties"/> - </ant> - <move file="${eclipse-home}/${classname}.xml" tofile="${eclipse-home}/${classname}-webdav.xml"/> - </target> - - <!-- This target holds code to cleanup the testing environment after the tests --> - <!-- have been run. You can use this to delete temporary files that are created. --> - <target name="cleanup"> - </target> - - <!-- This target runs the test suite. Any actions that need to happen after all --> - <!-- the tests have been run should go here. --> - <target name="run" depends="init,suite,cleanup"> - <ant target="collect" antfile="${library-file}" dir="${eclipse-home}"> - <property name="includes" value="org*.xml"/> - <property name="output-file" value="org.eclipse.team.tests.core.xml"/> - </ant> - </target> - -</project> diff --git a/tests/org.eclipse.team.tests.core/webdav.properties b/tests/org.eclipse.team.tests.core/webdav.properties deleted file mode 100644 index a81f09182..000000000 --- a/tests/org.eclipse.team.tests.core/webdav.properties +++ /dev/null @@ -1,17 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -target=org.eclipse.team.webdav -test_dir=target -location=http://@host@/path -httpClient.username=@user@ -httpClient.password=@password@ -httpClient.proxyURL= -httpClient.connectionTimeout=6000
\ No newline at end of file |