Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 126799 Details for
Bug 265030
[Patch] Create patch for any 2 IResources
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Patch_v1
patch_v1.txt (text/plain), 47.24 KB, created by
Krzysztof Pog這dzi雟ki
on 2009-02-25 19:32:39 EST
(
hide
)
Description:
Patch_v1
Filename:
MIME Type:
Creator:
Krzysztof Pog這dzi雟ki
Created:
2009-02-25 19:32:39 EST
Size:
47.24 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.compare >Index: compare/org/eclipse/compare/internal/GenerateDiffFileWizard.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Attic/GenerateDiffFileWizard.java,v >retrieving revision 1.1.2.2 >diff -u -r1.1.2.2 GenerateDiffFileWizard.java >--- compare/org/eclipse/compare/internal/GenerateDiffFileWizard.java 4 Feb 2009 09:54:51 -0000 1.1.2.2 >+++ compare/org/eclipse/compare/internal/GenerateDiffFileWizard.java 26 Feb 2009 00:21:38 -0000 >@@ -15,13 +15,27 @@ > > import java.io.File; > import java.io.IOException; >+import java.io.InputStream; > import java.net.MalformedURLException; > import java.net.URL; > import java.util.ArrayList; >+import java.util.HashMap; > import java.util.Iterator; > import java.util.List; >+import java.util.Map; >+import java.util.Set; > >+import org.eclipse.compare.CompareConfiguration; >+import org.eclipse.compare.CompareEditorInput; >+import org.eclipse.compare.ResourceNode; >+import org.eclipse.compare.contentmergeviewer.ITokenComparator; >+import org.eclipse.compare.contentmergeviewer.TokenComparator; >+import org.eclipse.compare.internal.ResourceCompareInput.FilteredBufferedResourceNode; > import org.eclipse.compare.internal.merge.DocumentMerger; >+import org.eclipse.compare.internal.merge.DocumentMerger.IDocumentMergerInput; >+import org.eclipse.compare.structuremergeviewer.DiffNode; >+import org.eclipse.compare.structuremergeviewer.Differencer; >+import org.eclipse.compare.structuremergeviewer.ICompareInput; > import org.eclipse.core.resources.IContainer; > import org.eclipse.core.resources.IFile; > import org.eclipse.core.resources.IProject; >@@ -35,11 +49,18 @@ > import org.eclipse.jface.dialogs.Dialog; > import org.eclipse.jface.dialogs.IDialogConstants; > import org.eclipse.jface.dialogs.IDialogSettings; >+import org.eclipse.jface.dialogs.IPageChangingListener; > import org.eclipse.jface.dialogs.MessageDialog; >+import org.eclipse.jface.dialogs.PageChangingEvent; > import org.eclipse.jface.dialogs.TitleAreaDialog; > import org.eclipse.jface.resource.ImageDescriptor; >+import org.eclipse.jface.text.Document; > import org.eclipse.jface.text.IDocument; >+import org.eclipse.jface.text.Position; >+import org.eclipse.jface.viewers.CheckStateChangedEvent; >+import org.eclipse.jface.viewers.CheckboxTreeViewer; > import org.eclipse.jface.viewers.DoubleClickEvent; >+import org.eclipse.jface.viewers.ICheckStateListener; > import org.eclipse.jface.viewers.IDoubleClickListener; > import org.eclipse.jface.viewers.ISelection; > import org.eclipse.jface.viewers.ISelectionChangedListener; >@@ -69,6 +90,9 @@ > import org.eclipse.swt.widgets.Listener; > import org.eclipse.swt.widgets.Shell; > import org.eclipse.swt.widgets.Text; >+import org.eclipse.swt.widgets.TreeItem; >+import org.eclipse.ui.IWorkbenchPart; >+import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer; > import org.eclipse.ui.model.BaseWorkbenchContentProvider; > import org.eclipse.ui.model.WorkbenchLabelProvider; > import org.eclipse.ui.views.navigator.ResourceComparator; >@@ -88,8 +112,42 @@ > final GenerateDiffFileWizard wizard = new GenerateDiffFileWizard(merger, rightToLeft); > wizard.setWindowTitle(title); > WizardDialog dialog = new WizardDialog(shell, wizard); >+ >+ dialog.addPageChangingListener(new IPageChangingListener() { >+ >+ public void handlePageChanging(PageChangingEvent event) { >+ if(event.getTargetPage() instanceof LocationPage) { >+ LocationPage page = (LocationPage) event.getTargetPage(); >+ page.updateChangesControl(); >+ } >+ } >+ >+ }); >+ >+ dialog.setMinimumPageSize(INITIAL_WIDTH, INITIAL_HEIGHT); >+ dialog.open(); >+ } >+ public static void run(IResource[] input, Shell shell) { >+ final String title = CompareMessages.GenerateLocalDiff_title; >+ final GenerateDiffFileWizard wizard = new GenerateDiffFileWizard(input); >+ wizard.setWindowTitle(title); >+ WizardDialog dialog = new WizardDialog(shell, wizard); >+ >+ dialog.addPageChangingListener(new IPageChangingListener() { >+ >+ public void handlePageChanging(PageChangingEvent event) { >+ if(event.getTargetPage() instanceof LocationPage) { >+ LocationPage page = (LocationPage) event.getTargetPage(); >+ page.updateChangesControl(); >+ } >+ } >+ >+ }); >+ > dialog.setMinimumPageSize(INITIAL_WIDTH, INITIAL_HEIGHT); >+ dialog.setBlockOnOpen(false); > dialog.open(); >+ > } > > protected class DirectionSelectionPage extends WizardPage { >@@ -209,11 +267,14 @@ > protected IPath[] foldersToCreate; > protected int selectedLocation; > >+ private ContainerCheckedTreeViewer viewer; >+ private LocalChangesContentProvider provider; > /** > * The default values store used to initialize the selections. > */ > private final DefaultValuesStore store; >- >+ private Button chgSelectAll; >+ private Button chgDeselectAll; > > class LocationPageContentProvider extends BaseWorkbenchContentProvider { > //Never show closed projects >@@ -448,6 +509,22 @@ > this.store= store; > } > >+ public void updateChangesControl() { >+ Differencer dif = new Differencer(); >+ if(directionSelectionPage.isRightToLeft()) >+ startNode = (DiffNode) dif.findDifferences(false, null, null, null, >+ new FilteredBufferedResourceNode(rightResource), >+ new FilteredBufferedResourceNode(leftResource)); >+ else if(!directionSelectionPage.isRightToLeft()) >+ startNode = (DiffNode) dif.findDifferences(false, null, null, null, >+ new FilteredBufferedResourceNode(leftResource), >+ new FilteredBufferedResourceNode(rightResource)); >+ provider.setNode(startNode); >+ viewer.refresh(); >+ initCheckedItems(); >+ associatedResources = getSelectedAssociatedFiles(); >+ } >+ > /** > * Allow the user to finish if a valid file has been entered. > */ >@@ -464,6 +541,11 @@ > break; > } > >+ if ((associatedResources = getSelectedAssociatedFiles()).size() == 0) { >+ pageValid = false; >+ setErrorMessage(CompareMessages.GenerateDiffFileWizard_noChangesSelected); >+ } >+ > /** > * Avoid draw flicker by clearing error message > * if all is valid. >@@ -623,7 +705,9 @@ > public void createControl(Composite parent) { > > final Composite composite= new Composite(parent, SWT.NULL); >- composite.setLayout(new GridLayout()); >+ GridLayout lay = new GridLayout(); >+ lay.verticalSpacing = 15; >+ composite.setLayout(lay); > setControl(composite); > initializeDialogUnits(composite); > >@@ -632,9 +716,24 @@ > > //Create a location group > setupLocationControls(composite); >- >+ > initializeDefaultValues(); >- >+ >+ Label changesLabel = new Label(composite, SWT.HORIZONTAL); >+ changesLabel.setText("Changes"); >+ >+ viewer = new ContainerCheckedTreeViewer(composite, SWT.CHECK | SWT.H_SCROLL >+ | SWT.V_SCROLL | SWT.BORDER | SWT.HORIZONTAL); >+ >+ viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); >+ provider = new LocalChangesContentProvider(startNode); >+ viewer.setContentProvider(provider); >+ viewer.setLabelProvider(new LocalChangesLabelProvider()); >+ viewer.setInput(leftResource.getWorkspace().getRoot()); >+ initCheckedItems(); >+ >+ createSelectionButtons(composite); >+ > Dialog.applyDialogFont(parent); > > validatePage(); >@@ -642,7 +741,35 @@ > updateEnablements(); > setupListeners(); > } >- >+ >+ private void createSelectionButtons(Composite composite) { >+ final Composite buttonGroup = new Composite(composite,SWT.NONE); >+ GridLayout layout = new GridLayout(); >+ layout.numColumns = 2; >+ layout.marginWidth = 0; >+ layout.marginHeight = 0; >+ layout.horizontalSpacing = 0; >+ layout.verticalSpacing = 0; >+ buttonGroup.setLayout(layout); >+ GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END >+ | GridData.VERTICAL_ALIGN_CENTER); >+ buttonGroup.setLayoutData(data); >+ >+ chgSelectAll = createSelectionButton(CompareMessages.GenerateDiffFileWizard_SelectAll, buttonGroup); >+ chgDeselectAll = createSelectionButton(CompareMessages.GenerateDiffFileWizard_DeselectAll, buttonGroup); >+ } >+ >+ private Button createSelectionButton(String buttonName, Composite buttonGroup) { >+ Button button = new Button(buttonGroup,SWT.PUSH); >+ button.setText(buttonName); >+ GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); >+ int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); >+ Point minSize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); >+ data.widthHint = Math.max(widthHint, minSize.x); >+ button.setLayoutData(data); >+ return button; >+ } >+ > /** > * Setup the controls for the location. > */ >@@ -813,9 +940,57 @@ > validatePage(); > } > }); >+ >+ chgSelectAll.addSelectionListener(new SelectionAdapter() { >+ public void widgetSelected(SelectionEvent e) { >+ initCheckedItems(); >+ //Only bother changing isPageComplete state if the current state >+ //is not enabled >+ if (!isPageComplete()) >+ setPageComplete(validatePage()); >+ } >+ }); >+ >+ chgDeselectAll.addSelectionListener(new SelectionAdapter() { >+ public void widgetSelected(SelectionEvent e) { >+ viewer.setCheckedElements(new Object[0]); >+ //Only bother changing isPageComplete state if the current state >+ //is enabled >+ if (isPageComplete()) >+ setPageComplete(validatePage()); >+ } >+ }); >+ >+ viewer.addCheckStateListener(new ICheckStateListener() { >+ public void checkStateChanged(CheckStateChangedEvent event) { >+ setPageComplete(validatePage()); >+ } >+ }); > > } >+ >+ protected void initCheckedItems() { >+ TreeItem[] items=((CheckboxTreeViewer)viewer).getTree().getItems(); >+ for (int i = 0; i < items.length; i++) { >+ ((CheckboxTreeViewer)viewer).setChecked(items[i].getData(), true); >+ } >+ } > >+ protected Map getSelectedAssociatedFiles() { >+ Object[] elements = viewer.getCheckedElements(); >+ Map result = new HashMap(); >+ for (int i = 0; i < elements.length; i++) { >+ if(!(elements[i] instanceof IProject)) { >+ DiffNode node = (DiffNode) elements[i]; >+ IResource lr = Utilities.getResource(node.getLeft()); >+ IResource rr = Utilities.getResource(node.getRight()); >+ if(lr instanceof IFile || rr instanceof IFile) >+ result.put(lr, rr); >+ } >+ } >+ return result; >+ } >+ > /** > * Enable and disable controls based on the selected radio button. > */ >@@ -1197,7 +1372,6 @@ > > private final DefaultValuesStore defaultValuesStore; > >- private DocumentMerger merger; > private IDocument leftDoc; > private IDocument rightDoc; > private String leftPath; >@@ -1209,21 +1383,67 @@ > private Text unified_customRelativeText; > private Button unified_customRelativeOption; > >+ private IResource rightResource; >+ private IResource leftResource; >+ >+ private Map associatedResources; >+ > public GenerateDiffFileWizard() { > super(); > setWindowTitle(CompareMessages.GenerateLocalDiff_title); > initializeDefaultPageImageDescriptor(); > defaultValuesStore = new DefaultValuesStore(); >+ associatedResources = new HashMap(); > } > >+ private DiffNode startNode; >+ >+ public GenerateDiffFileWizard(IResource[] input) { >+ this(); >+ >+ this.leftDoc = new Document(); >+ this.rightDoc = new Document(); >+ >+ leftResource = input[0]; >+ rightResource = input[1]; >+ >+ leftPath = leftResource.getFullPath().toString(); >+ rightPath = rightResource.getFullPath().toString(); >+ >+ Differencer dif = new Differencer(); >+ startNode = (DiffNode) dif.findDifferences(false, null, null, null, >+ new FilteredBufferedResourceNode(leftResource), >+ new FilteredBufferedResourceNode(rightResource)); >+ >+ } >+ > public GenerateDiffFileWizard(DocumentMerger merger, boolean rightToLeft) { > this(); >- this.merger = merger; > this.leftDoc = merger.getDocument(MergeViewerContentProvider.LEFT_CONTRIBUTOR); > this.rightDoc = merger.getDocument(MergeViewerContentProvider.RIGHT_CONTRIBUTOR); > this.leftPath = merger.getCompareConfiguration().getLeftLabel(leftDoc); > this.rightPath = merger.getCompareConfiguration().getRightLabel(rightDoc); > this.rightToLeft = rightToLeft; >+ IWorkbenchPart workbenchPart = merger.getCompareConfiguration().getContainer().getWorkbenchPart(); >+ >+ if(workbenchPart instanceof CompareEditor) { >+ >+ CompareEditor editor = (CompareEditor)workbenchPart; >+ >+ CompareEditorInput input = (CompareEditorInput)editor.getEditorInput(); >+ input.getCompareResult(); >+ if(input.getCompareResult() instanceof ICompareInput) { >+ ICompareInput node = (ICompareInput)input.getCompareResult(); >+ >+ leftResource = ((ResourceNode)node.getLeft()).getResource(); >+ rightResource = ((ResourceNode)node.getRight()).getResource(); >+ Differencer dif = new Differencer(); >+ startNode = (DiffNode) dif.findDifferences(false, null, null, null, >+ new FilteredBufferedResourceNode(leftResource), >+ new FilteredBufferedResourceNode(rightResource)); >+ } >+ >+ } > } > > public void addPages() { >@@ -1325,7 +1545,7 @@ > public boolean needsProgressMonitor() { > return true; > } >- >+ > /** > * Completes processing of the wizard. If this method returns <code> > * true</code>, the wizard will close; otherwise, it will stay active. >@@ -1340,24 +1560,24 @@ > } > > //Validation of patch root >- if(optionsPage.getRootSelection() == OptionsPage.ROOT_CUSTOM) { >- String path = optionsPage.getPath(); >- IFile file2; >- try { >- file2 = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path)); >- } catch(IllegalArgumentException e) { >- final String title = CompareMessages.GenerateLocalDiff_3; >- final String msg = CompareMessages.GenerateLocalDiff_4; >- final MessageDialog dialog = new MessageDialog(getShell(), title, >- null, msg, MessageDialog.ERROR, >- new String[] { IDialogConstants.OK_LABEL }, 0); >- dialog.open(); >- return false; >- } >- if(!validateFile2(file2)) { >- return false; >- } >- } >+// if(optionsPage.getRootSelection() == OptionsPage.ROOT_CUSTOM) { >+// String path = optionsPage.getPath(); >+// IFile file2; >+// try { >+// file2 = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path)); >+// } catch(IllegalArgumentException e) { >+// final String title = CompareMessages.GenerateLocalDiff_3; >+// final String msg = CompareMessages.GenerateLocalDiff_4; >+// final MessageDialog dialog = new MessageDialog(getShell(), title, >+// null, msg, MessageDialog.ERROR, >+// new String[] { IDialogConstants.OK_LABEL }, 0); >+// dialog.open(); >+// return false; >+// } >+// if(!validateFile2(file2)) { >+// return false; >+// } >+// } > > // Create the patch > generateDiffFile(file); >@@ -1424,10 +1644,9 @@ > } else { > oldPath = this.rightPath; > } >- >- UnifiedDiffFormatter formatter = new UnifiedDiffFormatter(merger, >- leftDoc, rightDoc, oldPath, toPath, directionSelectionPage >- .isRightToLeft()); >+ >+ //TODO extend formatter to use list of mergers. >+ UnifiedDiffFormatter formatter = new UnifiedDiffFormatter(createFormatterInput()); > try { > if (file == null) { > formatter.generateDiff(); >@@ -1438,6 +1657,124 @@ > throw new RuntimeException(e); > } > } >+ >+ private Object[][] createFormatterInput() { >+ Set keys = associatedResources.keySet(); >+ Object[][] result = new Object[keys.size()][3]; >+ DocumentMerger merg = null; >+ int i = 0; >+ for (Iterator iterator = keys.iterator(); iterator.hasNext();) { >+ IFile sourceRes = (IFile) iterator.next(); >+ IFile targetRes = (IFile) associatedResources.get(sourceRes); >+ merg = createDocumentMerger(sourceRes, targetRes); >+ result[i][0] = merg; >+ result[i][1] = sourceRes; >+ result[i][2] = targetRes; >+ i++; >+ } >+ return result; >+ } >+ >+ private DocumentMerger createDocumentMerger(IFile leftFile, IFile rightFile){ >+ IDocument leftDoc = convertFileToDocument(leftFile); >+ IDocument rightDoc = convertFileToDocument(rightFile); >+ if (leftDoc == null) { >+ leftDoc = new Document(); >+ } >+ if (rightDoc == null) { >+ rightDoc = new Document(); >+ } >+ DocumentMerger docMerger; >+ docMerger = new DocumentMerger(new LocalDiffMergerInput(leftDoc, rightDoc)); >+ try { >+ docMerger.doDiff(); >+ } catch (Exception e) { >+ throw new RuntimeException(e); >+ } >+ return docMerger; >+ } >+ >+ private IDocument convertFileToDocument(IFile file) { >+ if(file == null) >+ return null; >+ StringBuffer str = new StringBuffer(); >+ int c; >+ try{ >+ InputStream inputStream = file.getContents(); >+ while ((c = inputStream.read())!=-1){ >+ str.append((char)c); >+ } >+ inputStream.close(); >+ return new Document(str.toString()); >+ }catch(Exception ex){ >+ CompareUIPlugin.log(ex); >+ } >+ >+ return null; >+ } >+ >+ class LocalDiffMergerInput implements IDocumentMergerInput { >+ >+ private IDocument leftDoc; >+ private IDocument rightDoc; >+ >+ public LocalDiffMergerInput(IDocument leftDoc, IDocument rightDoc) { >+ this.leftDoc = leftDoc ; >+ this.rightDoc= rightDoc; >+ } >+ >+ public ITokenComparator createTokenComparator(String line) { >+ return new TokenComparator(line); >+ } >+ public CompareConfiguration getCompareConfiguration() { >+ return new CompareConfiguration(); >+ } >+ public IDocument getDocument(char contributor) { >+ switch (contributor) { >+ case MergeViewerContentProvider.LEFT_CONTRIBUTOR: >+ return leftDoc; >+ case MergeViewerContentProvider.RIGHT_CONTRIBUTOR: >+ return rightDoc; >+ case MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR: >+ return null; >+ } >+ return null; >+ } >+ public int getHunkStart() { >+ return 0; >+ } >+ public Position getRegion(char contributor) { >+ switch (contributor) { >+ case MergeViewerContentProvider.LEFT_CONTRIBUTOR: >+ return new Position(0, leftDoc.getLength()); >+ case MergeViewerContentProvider.RIGHT_CONTRIBUTOR: >+ return new Position(0, rightDoc.getLength()); >+ case MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR: >+ return new Position(0, 0); >+ } >+ return null; >+ } >+ public boolean isHunkOnLeft() { >+ return false; >+ } >+ public boolean isIgnoreAncestor() { >+ return true; >+ } >+ public boolean isPatchHunk() { >+ return false; >+ } >+ >+ public boolean isShowPseudoConflicts() { >+ return false; >+ } >+ public boolean isThreeWay() { >+ return false; >+ } >+ public boolean isPatchHunkOk() { >+ return false; >+ } >+ >+ } > > public boolean validateFile(File file) { > >@@ -1644,4 +1981,6 @@ > } > } > >+ >+ > } >Index: compare/org/eclipse/compare/internal/CompareMessages.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java,v >retrieving revision 1.20.2.2 >diff -u -r1.20.2.2 CompareMessages.java >--- compare/org/eclipse/compare/internal/CompareMessages.java 26 Jan 2009 14:13:04 -0000 1.20.2.2 >+++ compare/org/eclipse/compare/internal/CompareMessages.java 26 Feb 2009 00:21:36 -0000 >@@ -177,6 +177,9 @@ > public static String GenerateLocalDiff_4; > public static String GenerateLocalDiff_5; > public static String GenerateLocalDiff_6; >+ public static String GenerateDiffFileWizard_SelectAll; >+ public static String GenerateDiffFileWizard_DeselectAll; >+ public static String GenerateDiffFileWizard_noChangesSelected; > > static { > NLS.initializeMessages(BUNDLE_NAME, CompareMessages.class); >Index: compare/org/eclipse/compare/internal/Utilities.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java,v >retrieving revision 1.69 >diff -u -r1.69 Utilities.java >--- compare/org/eclipse/compare/internal/Utilities.java 15 Jul 2008 14:45:29 -0000 1.69 >+++ compare/org/eclipse/compare/internal/Utilities.java 26 Feb 2009 00:21:40 -0000 >@@ -781,4 +781,13 @@ > }); > } > } >+ >+ public static IResource getResource(ITypedElement element) { >+ if (element instanceof BufferedResourceNode) { >+ BufferedResourceNode bn= (BufferedResourceNode) element; >+ return bn.getResource(); >+ } >+ return null; >+ >+ } > } >Index: compare/org/eclipse/compare/internal/CompareMessages.properties >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties,v >retrieving revision 1.31.2.3 >diff -u -r1.31.2.3 CompareMessages.properties >--- compare/org/eclipse/compare/internal/CompareMessages.properties 4 Feb 2009 09:54:51 -0000 1.31.2.3 >+++ compare/org/eclipse/compare/internal/CompareMessages.properties 26 Feb 2009 00:21:36 -0000 >@@ -145,6 +145,7 @@ > CompareWithOtherResourceDialog_workspaceMainButton=Browse... > CompareWithOtherResourceDialog_workspaceRadioButton=Workspace > >+CreatePatchActionTitle=Create Patch... > WorkspacePatchDialogTitle=Set a Patch Location > WorkspacePatchDialogDescription=Select a folder in the workspace and enter a name for the patch. > Save_To_Clipboard_2=&Clipboard >@@ -188,7 +189,7 @@ > GenerateDiffFileWizard_13=Use only &file path: > GenerateDiffFileWizard_Left=&Left: > GenerateDiffFileWizard_Right=&Right: >-CreatePatchActionTitle=Create Patch... >+CreatePatchActionTitle=Create Patch > WorkspacePatchDialogTitle=Set a Patch Location > WorkspacePatchDialogDescription=Select a folder in the workspace and enter a name for the patch. > Save_To_Clipboard_2=&Clipboard >@@ -231,4 +232,7 @@ > GenerateDiffFileWizard_ProjectClosed=The specified path points to a closed project. > GenerateDiffFileWizard_13=Use only &file path: > GenerateDiffFileWizard_Left=&Left: >-GenerateDiffFileWizard_Right=&Right: >\ No newline at end of file >+GenerateDiffFileWizard_Right=&Right: >+GenerateDiffFileWizard_SelectAll=Select &All >+GenerateDiffFileWizard_DeselectAll=&Deselect All >+GenerateDiffFileWizard_noChangesSelected=No changes selected. >\ No newline at end of file >Index: compare/org/eclipse/compare/internal/ICompareUIConstants.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareUIConstants.java,v >retrieving revision 1.13.6.1 >diff -u -r1.13.6.1 ICompareUIConstants.java >--- compare/org/eclipse/compare/internal/ICompareUIConstants.java 26 Jan 2009 10:55:49 -0000 1.13.6.1 >+++ compare/org/eclipse/compare/internal/ICompareUIConstants.java 26 Feb 2009 00:21:38 -0000 >@@ -40,7 +40,7 @@ > public static final String PROP_TITLE_IMAGE = PREFIX + "TitleImage"; //$NON-NLS-1$ > public static final String PROP_SELECTED_EDITION = PREFIX + "SelectedEdition"; //$NON-NLS-1$ > >- public static final int COMPARE_IMAGE_WIDTH= 22; >+ public static final int COMPARE_IMAGE_WIDTH= 17; > > public static final String PREF_NAVIGATION_END_ACTION= PREFIX + "NavigationEndAction"; //$NON-NLS-1$ > public static final String PREF_NAVIGATION_END_ACTION_LOCAL= PREFIX + "NavigationEndActionLocal"; //$NON-NLS-1$ >Index: compare/org/eclipse/compare/internal/UnifiedDiffFormatter.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Attic/UnifiedDiffFormatter.java,v >retrieving revision 1.1.2.2 >diff -u -r1.1.2.2 UnifiedDiffFormatter.java >--- compare/org/eclipse/compare/internal/UnifiedDiffFormatter.java 26 Jan 2009 14:13:04 -0000 1.1.2.2 >+++ compare/org/eclipse/compare/internal/UnifiedDiffFormatter.java 26 Feb 2009 00:21:39 -0000 >@@ -17,6 +17,7 @@ > import java.io.File; > import java.io.FileOutputStream; > import java.io.IOException; >+import java.io.InputStream; > import java.io.PrintStream; > import java.util.ArrayList; > import java.util.Arrays; >@@ -26,7 +27,9 @@ > import org.eclipse.compare.internal.merge.DocumentMerger; > import org.eclipse.compare.internal.merge.DocumentMerger.Diff; > import org.eclipse.compare.rangedifferencer.RangeDifference; >+import org.eclipse.core.resources.IFile; > import org.eclipse.jface.text.BadLocationException; >+import org.eclipse.jface.text.Document; > import org.eclipse.jface.text.IDocument; > import org.eclipse.swt.dnd.Clipboard; > import org.eclipse.swt.dnd.TextTransfer; >@@ -52,22 +55,10 @@ > public static final String RANGE_INFORMATION_PREFIX = "@@ -"; //$NON-NLS-1$ > public static final String RANGE_INFORMATION_AFFIX = " @@"; //$NON-NLS-1$ > >- private DocumentMerger merger; >- private IDocument leftDoc; >- private IDocument rightDoc; >- private String oldPath; >- private String newPath; >- private boolean rightToLeft; >- >- public UnifiedDiffFormatter(DocumentMerger merger, IDocument leftDoc, >- IDocument rightDoc, String oldPath, String newPath, >- boolean rightToLeft) { >- this.merger = merger; >- this.leftDoc = leftDoc; >- this.rightDoc = rightDoc; >- this.oldPath = oldPath; >- this.newPath = newPath; >- this.rightToLeft = rightToLeft; >+ private Object[][] input; >+ >+ public UnifiedDiffFormatter(Object[][] input) { >+ this.input = input; > } > > /** >@@ -148,95 +139,135 @@ > * @param strictUnixFormat determinates if the format should be fully compatible with the Unix one. > */ > private void generateDiff(PrintStream output, boolean strictUnixFormat) { >- ArrayList allDiffs = merger.getAllDiffs(); >- // If the first block isn't the only one, or first block is different >- if (allDiffs.size() > 1 || isPartDifferent(allDiffs, 0)) { >- output.println(INDEX_MARKER + oldPath); >- output.println(DELIMITER); >- Date oldDate = Calendar.getInstance().getTime(); >- Date newDate = Calendar.getInstance().getTime(); >- String oldDateFormat = DateFormat.getDateTimeInstance().format(oldDate); >- String newDateFormat = DateFormat.getDateTimeInstance().format(newDate); >- output.println(OLD_FILE_PREFIX + oldPath + '\t' >- + oldDateFormat + " -0000"); //$NON-NLS-1$ >- output.println(NEW_FILE_PREFIX + newPath + '\t' >- + newDateFormat + " -0000"); //$NON-NLS-1$ >- >- boolean firstHunk = true; >- Hunk currentHunk = null; >- >- int currentLineNumberOld = 0; >- int currentLineNumberNew = 0; >- >- for (int partNumber = 0; partNumber < allDiffs.size(); partNumber++) { >- >- ArrayList oldPart = getPart(partNumber, LEFT_CONTRIBUTOR); >- ArrayList newPart = getPart(partNumber, RIGHT_CONTRIBUTOR); >- >- if (isPartDifferent(allDiffs, partNumber)) { >- // This part has some changes >- if (firstHunk) { >- // Hunk will start with changed block >- currentHunk = new Hunk(0, 0, strictUnixFormat); >- firstHunk = false; >- } >- if (partNumber == (allDiffs.size() - 1)) { >- // If it is the last part >- currentHunk.addPartRangeToOld(oldPart, 0, oldPart >- .size(), true); >- currentHunk.addPartRangeToNew(newPart, 0, newPart >- .size(), true); >- } else { >- currentHunk.addPartRangeToOld(oldPart, 0, oldPart >- .size(), false); >- currentHunk.addPartRangeToNew(newPart, 0, newPart >- .size(), false); >- } >- } else { >- if (firstHunk) { >- // Hunk will start with context >- currentHunk = new Hunk((oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, >- (oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, strictUnixFormat); >- firstHunk = false; >- currentHunk.addPartRangeToBoth(oldPart, >- (oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, oldPart.size(), false); >- } else { >+ for (int fileNr = 0; fileNr < input.length; fileNr++) { >+ DocumentMerger merger = (DocumentMerger) input[fileNr][0]; >+ IDocument leftDoc = convertFileToDocument((IFile)input[fileNr][1]); >+ IDocument rightDoc = convertFileToDocument((IFile)input[fileNr][2]); >+ String oldPath; >+ String newPath; >+ if (leftDoc == null) { >+ leftDoc = new Document(); >+ newPath = ((IFile)input[fileNr][2]).getFullPath().toString(); >+ oldPath = ((IFile)input[fileNr][2]).getFullPath().toString(); >+ } >+ else if (rightDoc == null) { >+ rightDoc = new Document(); >+ newPath = ((IFile)input[fileNr][1]).getFullPath().toString(); >+ oldPath = ((IFile)input[fileNr][1]).getFullPath().toString(); >+ } >+ else { >+ oldPath = ((IFile)input[fileNr][1]).getFullPath().toString(); >+ newPath = ((IFile)input[fileNr][2]).getFullPath().toString(); >+ } >+ >+ ArrayList allDiffs = merger.getAllDiffs(); >+ // If the first block isn't the only one, or first block is different >+ if (allDiffs.size() > 1 || isPartDifferent(allDiffs, 0)) { >+ output.println(INDEX_MARKER + oldPath); >+ output.println(DELIMITER); >+ Date oldDate = Calendar.getInstance().getTime(); >+ Date newDate = Calendar.getInstance().getTime(); >+ String oldDateFormat = DateFormat.getDateTimeInstance().format(oldDate); >+ String newDateFormat = DateFormat.getDateTimeInstance().format(newDate); >+ output.println(OLD_FILE_PREFIX + oldPath + '\t' >+ + oldDateFormat + " -0000"); //$NON-NLS-1$ >+ output.println(NEW_FILE_PREFIX + newPath + '\t' >+ + newDateFormat + " -0000"); //$NON-NLS-1$ >+ >+ boolean firstHunk = true; >+ Hunk currentHunk = null; >+ >+ int currentLineNumberOld = 0; >+ int currentLineNumberNew = 0; >+ >+ for (int partNumber = 0; partNumber < allDiffs.size(); partNumber++) { >+ >+ ArrayList oldPart = getPart(partNumber, LEFT_CONTRIBUTOR, merger, leftDoc, rightDoc); >+ ArrayList newPart = getPart(partNumber, RIGHT_CONTRIBUTOR, merger, leftDoc, rightDoc); >+ >+ if (isPartDifferent(allDiffs, partNumber)) { >+ // This part has some changes >+ if (firstHunk) { >+ // Hunk will start with changed block >+ currentHunk = new Hunk(0, 0, strictUnixFormat); >+ firstHunk = false; >+ } > if (partNumber == (allDiffs.size() - 1)) { > // If it is the last part >- currentHunk.addPartRangeToBoth(oldPart, 0, NUMBER_OF_CONTEXT_LINES, true); >+ currentHunk.addPartRangeToOld(oldPart, 0, oldPart >+ .size(), true); >+ currentHunk.addPartRangeToNew(newPart, 0, newPart >+ .size(), true); >+ } else { >+ currentHunk.addPartRangeToOld(oldPart, 0, oldPart >+ .size(), false); >+ currentHunk.addPartRangeToNew(newPart, 0, newPart >+ .size(), false); >+ } >+ } else { >+ if (firstHunk) { >+ // Hunk will start with context >+ currentHunk = new Hunk((oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, >+ (oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, strictUnixFormat); >+ firstHunk = false; >+ currentHunk.addPartRangeToBoth(oldPart, >+ (oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, oldPart.size(), false); > } else { >- if (oldPart.size() - 1 < 2*NUMBER_OF_CONTEXT_LINES) { >- // Context too short to start new hunk >- currentHunk.addPartRangeToBoth(oldPart, 0, >- oldPart.size(), false); >+ if (partNumber == (allDiffs.size() - 1)) { >+ // If it is the last part >+ currentHunk.addPartRangeToBoth(oldPart, 0, NUMBER_OF_CONTEXT_LINES, true); > } else { >- // Context long enough to start new hunk >- currentHunk.addPartRangeToBoth(oldPart, 0, NUMBER_OF_CONTEXT_LINES, >- false); >- currentHunk.printTo(output); >- currentHunk = new Hunk(currentLineNumberOld >- + (oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, >- currentLineNumberNew + (oldPart.size() - 1) >- - NUMBER_OF_CONTEXT_LINES, strictUnixFormat); >- currentHunk.addPartRangeToBoth(oldPart, >- (oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, >- oldPart.size(), false); >+ if (oldPart.size() - 1 < 2*NUMBER_OF_CONTEXT_LINES) { >+ // Context too short to start new hunk >+ currentHunk.addPartRangeToBoth(oldPart, 0, >+ oldPart.size(), false); >+ } else { >+ // Context long enough to start new hunk >+ currentHunk.addPartRangeToBoth(oldPart, 0, NUMBER_OF_CONTEXT_LINES, >+ false); >+ currentHunk.printTo(output); >+ currentHunk = new Hunk(currentLineNumberOld >+ + (oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, >+ currentLineNumberNew + (oldPart.size() - 1) >+ - NUMBER_OF_CONTEXT_LINES, strictUnixFormat); >+ currentHunk.addPartRangeToBoth(oldPart, >+ (oldPart.size() - 1) - NUMBER_OF_CONTEXT_LINES, >+ oldPart.size(), false); >+ } > } > } > } >+ currentLineNumberOld += oldPart.size(); >+ currentLineNumberNew += newPart.size(); > } >- currentLineNumberOld += oldPart.size(); >- currentLineNumberNew += newPart.size(); >- } >- // Print the last hunk >- currentHunk.printTo(output); >+ // Print the last hunk >+ currentHunk.printTo(output); >+ } > } > } > >- private ArrayList getPart(int nr, char side) { >+ private IDocument convertFileToDocument(IFile file) { >+ if(file == null) >+ return null; >+ StringBuffer str = new StringBuffer(); >+ int c; >+ try{ >+ InputStream inputStream = file.getContents(); >+ while ((c = inputStream.read())!=-1){ >+ str.append((char)c); >+ } >+ inputStream.close(); >+ return new Document(str.toString()); >+ }catch(Exception ex){ >+ CompareUIPlugin.log(ex); >+ } >+ >+ return null; >+ } >+ >+ private ArrayList getPart(int nr, char side, DocumentMerger merger, IDocument leftDoc, IDocument rightDoc) { > try { >- String s = extract(nr, side).replaceAll("\r\n", "\n"); //$NON-NLS-1$ //$NON-NLS-2$ >- s.replaceAll("\r", "\n"); //$NON-NLS-1$ //$NON-NLS-2$ >+ String s = extract(nr, side, merger, leftDoc, rightDoc).replaceAll("\r", ""); //$NON-NLS-1$ //$NON-NLS-2$ > ArrayList diffLines = new ArrayList(Arrays > .asList(s.split("\n", -1))); //$NON-NLS-1$ > return diffLines; >@@ -246,10 +277,9 @@ > return null; > } > >- private String extract(int nr, char side) throws BadLocationException { >+ private String extract(int nr, char side, DocumentMerger merger, IDocument leftDoc, IDocument rightDoc) throws BadLocationException { > Diff diff = ((Diff) merger.getAllDiffs().get(nr)); >- if (side == LEFT_CONTRIBUTOR && !rightToLeft >- || side == RIGHT_CONTRIBUTOR && rightToLeft) { >+ if (side == LEFT_CONTRIBUTOR) { > return leftDoc.get(diff.getPosition(LEFT_CONTRIBUTOR).offset, diff > .getPosition(LEFT_CONTRIBUTOR).length); > } >Index: compare/org/eclipse/compare/internal/ResourceCompareInput.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java,v >retrieving revision 1.40 >diff -u -r1.40 ResourceCompareInput.java >--- compare/org/eclipse/compare/internal/ResourceCompareInput.java 16 Sep 2008 14:03:31 -0000 1.40 >+++ compare/org/eclipse/compare/internal/ResourceCompareInput.java 26 Feb 2009 00:21:39 -0000 >@@ -129,6 +129,11 @@ > ResourceCompareInput(CompareConfiguration config) { > super(config); > } >+ >+ public Object createDiff(){ >+ Differencer dif = new Differencer(); >+ return dif.findDifferences(false, null, null, null, fLeft, fRight); >+ } > > public Viewer createDiffViewer(Composite parent) { > fDiffViewer= new DiffTreeViewer(parent, getCompareConfiguration()) { >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml,v >retrieving revision 1.68 >diff -u -r1.68 plugin.xml >--- plugin.xml 25 Aug 2008 12:35:11 -0000 1.68 >+++ plugin.xml 26 Feb 2009 00:21:35 -0000 >@@ -192,6 +192,9 @@ > id="compareWithMenu"> > <separator > name="compareWithGroup"> >+ </separator> >+ <separator >+ name="localPatchGroup"> > </separator> > </menu> > </objectContribution> >@@ -280,6 +283,26 @@ > id="addFromHistoryAction"> > </action> > </objectContribution> >+ <objectContribution >+ adaptable="true" >+ id="org.eclipse.compare.GenerateDiffAction" >+ objectClass="org.eclipse.core.resources.IResource"> >+ <action >+ label="%CreateLocalPatch.label" >+ tooltip="%CreateLocalPatch.tooltip" >+ class="org.eclipse.compare.internal.GenerateDiffAction" >+ enablesFor="2" >+ id="generateDiff" >+ menubarPath="compareWithMenu/localPatchGroup"> >+ </action> >+ <menu >+ id="creatLocalPatch" >+ label="%CreateLocalPatch.label"> >+ <separator >+ name="org.eclipse.compare.generateDiffSeparator"> >+ </separator> >+ </menu> >+ </objectContribution> > </extension> > > <extension >Index: plugin.properties >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties,v >retrieving revision 1.93 >diff -u -r1.93 plugin.properties >--- plugin.properties 19 Aug 2008 14:45:06 -0000 1.93 >+++ plugin.properties 26 Feb 2009 00:21:35 -0000 >@@ -91,6 +91,9 @@ > CompareWithHistoryAction.label= &Local History... > CompareWithHistoryAction.tooltip= Compare the Selected Resource with Local History > >+CreateLocalPatch.label= &Create Patch... >+CreateLocalPatch.tooltip= Create Patch from the Selected Resource >+ > ReplaceWithMenu.label= Rep&lace With > > ReplaceFromHistoryAction.label= &Local History... >Index: compare/org/eclipse/compare/internal/LocalChangesLabelProvider.java >=================================================================== >RCS file: compare/org/eclipse/compare/internal/LocalChangesLabelProvider.java >diff -N compare/org/eclipse/compare/internal/LocalChangesLabelProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ compare/org/eclipse/compare/internal/LocalChangesLabelProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,104 @@ >+package org.eclipse.compare.internal; >+ >+import org.eclipse.compare.CompareConfiguration; >+import org.eclipse.compare.ITypedElement; >+import org.eclipse.compare.structuremergeviewer.DiffNode; >+import org.eclipse.compare.structuremergeviewer.Differencer; >+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.jface.viewers.ILabelProvider; >+import org.eclipse.jface.viewers.ILabelProviderListener; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.ui.ISharedImages; >+import org.eclipse.ui.PlatformUI; >+ >+public class LocalChangesLabelProvider implements ILabelProvider { >+ >+ public static String LEFT = "LEFT"; >+ public static String RIGHT = "RIGHT"; >+ private CompareConfiguration config; >+ >+ public LocalChangesLabelProvider() { >+ config = new CompareConfiguration(); >+ } >+ >+ public Image getImage(Object element) { >+ if(element instanceof IProject) >+ return PlatformUI.getWorkbench().getSharedImages().getImage( >+ org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT); >+ >+ IResource resource = getResource((DiffNode)element); >+ >+ if(resource instanceof IFile) { >+ int kind = ((DiffNode)element).getKind(); >+ return config.getImage(PlatformUI.getWorkbench().getSharedImages().getImage( >+ ISharedImages.IMG_OBJ_FILE), Differencer.RIGHT +kind); >+ >+ } else if(resource instanceof IFolder) { >+ int kind = ((DiffNode)element).getKind(); >+ return config.getImage(PlatformUI.getWorkbench().getSharedImages().getImage( >+ ISharedImages.IMG_OBJ_FOLDER), Differencer.RIGHT +kind); >+ >+ } else if(resource instanceof IProject) { >+ return PlatformUI.getWorkbench().getSharedImages().getImage( >+ org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT); >+ >+ } else { >+ return PlatformUI.getWorkbench().getSharedImages().getImage( >+ ISharedImages.IMG_OBJ_ELEMENT); >+ } >+ >+ } >+ >+ public String getText(Object element) { >+ if(element instanceof IProject) >+ return ((IProject)element).getName(); >+ >+ IResource resource = getResource((DiffNode)element); >+ >+ if(resource instanceof IFile) >+ return resource.getName(); >+ else if(resource instanceof IFolder) >+ return resource.getProjectRelativePath().toString(); >+ else if(resource instanceof IProject) >+ return resource.getName(); >+ else >+ return resource.getName(); >+ } >+ >+ public void addListener(ILabelProviderListener listener) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void dispose() { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public boolean isLabelProperty(Object element, String property) { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+ public void removeListener(ILabelProviderListener listener) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ private IResource getResource(DiffNode node) { >+ ITypedElement te = node.getLeft(); >+ if(te == null) >+ te = node.getRight(); >+ >+ if (te instanceof BufferedResourceNode) { >+ BufferedResourceNode bn = (BufferedResourceNode) te; >+ IResource resource = bn.getResource(); >+ return resource; >+ } >+ return null; >+ } >+ >+} >Index: compare/org/eclipse/compare/internal/LocalChangesContentProvider.java >=================================================================== >RCS file: compare/org/eclipse/compare/internal/LocalChangesContentProvider.java >diff -N compare/org/eclipse/compare/internal/LocalChangesContentProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ compare/org/eclipse/compare/internal/LocalChangesContentProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,83 @@ >+package org.eclipse.compare.internal; >+ >+import java.util.ArrayList; >+ >+import org.eclipse.compare.ITypedElement; >+import org.eclipse.compare.structuremergeviewer.DiffNode; >+import org.eclipse.compare.structuremergeviewer.Differencer; >+import org.eclipse.compare.structuremergeviewer.IDiffElement; >+import org.eclipse.core.resources.IProject; >+import org.eclipse.core.resources.IResource; >+import org.eclipse.jface.viewers.ITreeContentProvider; >+import org.eclipse.jface.viewers.Viewer; >+ >+public class LocalChangesContentProvider implements ITreeContentProvider { >+ >+ private DiffNode node; >+ >+ public static String LEFT = "LEFT"; >+ public static String RIGHT = "RIGHT"; >+ >+ public LocalChangesContentProvider(DiffNode node) { >+ super(); >+ this.node = node; >+ } >+ >+ public Object[] getElements(Object inputElement) { >+ IResource r = getResource(node.getLeft()); >+ return new Object[] {r.getProject()}; >+ } >+ >+ public void dispose() { >+ // >+ } >+ >+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { >+ // >+ } >+ >+ public Object[] getChildren(Object parentElement) { >+ if(parentElement instanceof IProject) { >+ return new Object[] {node}; >+ } >+ >+ IDiffElement[] elems = ((DiffNode)parentElement).getChildren(); >+ ArrayList result = new ArrayList(); >+ for (int i = 0; i < elems.length; i++) { >+ DiffNode diffNode = (DiffNode)elems[i]; >+ if(diffNode.getKind() != Differencer.NO_CHANGE) { >+ result.add(elems[i]); >+ } >+ } >+ return result.toArray(); >+ } >+ >+ public Object getParent(Object element) { >+ return ((DiffNode)element).getParent(); >+ } >+ >+ public boolean hasChildren(Object element) { >+ if(element instanceof IProject) { >+ return true; >+ } >+ return ((DiffNode)element).hasChildren(); >+ } >+ >+ >+ private IResource getResource(ITypedElement element) { >+ if (element instanceof BufferedResourceNode) { >+ BufferedResourceNode bn= (BufferedResourceNode) element; >+ return bn.getResource(); >+ } >+ return null; >+ } >+ >+ public void setNode(DiffNode node) { >+ this.node = node; >+ } >+ >+ public DiffNode getNode() { >+ return node; >+ } >+ >+} >Index: compare/org/eclipse/compare/internal/GenerateDiffAction.java >=================================================================== >RCS file: compare/org/eclipse/compare/internal/GenerateDiffAction.java >diff -N compare/org/eclipse/compare/internal/GenerateDiffAction.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ compare/org/eclipse/compare/internal/GenerateDiffAction.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,61 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Krzysztof Poglodzinski (intuicje@gmail.com) - initial API and implementation >+ * Mariusz Tanski (mariusztanski@gmail.com) - initial API and implementation >+ * Kacper Zdanowicz (kacper.zdanowicz@gmail.com) - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.compare.internal; >+ >+ >+import org.eclipse.compare.CompareConfiguration; >+import org.eclipse.core.resources.IResource; >+import org.eclipse.jface.action.IAction; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.swt.widgets.Shell; >+import org.eclipse.ui.IObjectActionDelegate; >+import org.eclipse.ui.IWorkbenchPage; >+import org.eclipse.ui.IWorkbenchPart; >+ >+ >+/* >+ * The "Generate diff" action >+ */ >+public class GenerateDiffAction extends BaseCompareAction implements IObjectActionDelegate { >+ >+ protected ResourceCompareInput fInput; >+ protected IWorkbenchPage fWorkbenchPage; >+ protected boolean showSelectAncestorDialog = true; >+ >+ public void run(ISelection selection) { >+ >+ IResource[] ir = Utilities.getResources(selection); >+ Shell shell = fWorkbenchPage.getWorkbenchWindow().getShell(); >+ boolean ok = fInput.setSelection(selection,shell, showSelectAncestorDialog); >+ if (!ok) return; >+ >+ GenerateDiffFileWizard.run(ir, shell); >+ >+ >+ } >+ >+ protected boolean isEnabled(ISelection selection) { >+ if (fInput == null) { >+ CompareConfiguration cc= new CompareConfiguration(); >+ cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, new Boolean(false)); >+ fInput= new ResourceCompareInput(cc); >+ } >+ return fInput.isEnabled(selection); >+ } >+ >+ public void setActivePart(IAction action, IWorkbenchPart targetPart) { >+ fWorkbenchPage= targetPart.getSite().getPage(); >+ } >+ >+} >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 265030
:
126799
|
128110
|
128117