### 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 20 Feb 2009 10:35:08 -0000 @@ -21,7 +21,12 @@ import java.util.Iterator; import java.util.List; +import org.eclipse.compare.CompareEditorInput; +import org.eclipse.compare.ITypedElement; +import org.eclipse.compare.ResourceNode; import org.eclipse.compare.internal.merge.DocumentMerger; +import org.eclipse.compare.structuremergeviewer.DiffNode; +import org.eclipse.compare.structuremergeviewer.ICompareInput; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -39,6 +44,7 @@ import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; @@ -69,6 +75,7 @@ import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.model.BaseWorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.views.navigator.ResourceComparator; @@ -91,6 +98,16 @@ dialog.setMinimumPageSize(INITIAL_WIDTH, INITIAL_HEIGHT); dialog.open(); } + public static void run(DiffNode diff, Shell shell) { + final String title = CompareMessages.GenerateLocalDiff_title; + final GenerateDiffFileWizard wizard = new GenerateDiffFileWizard(diff); + wizard.setWindowTitle(title); + WizardDialog dialog = new WizardDialog(shell, wizard); + dialog.setMinimumPageSize(INITIAL_WIDTH, INITIAL_HEIGHT); + dialog.setBlockOnOpen(false); + dialog.open(); + + } protected class DirectionSelectionPage extends WizardPage { @@ -213,6 +230,7 @@ * The default values store used to initialize the selections. */ private final DefaultValuesStore store; +// private LocalPatchParticipant fParticipant; class LocationPageContentProvider extends BaseWorkbenchContentProvider { @@ -623,7 +641,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 +652,29 @@ //Create a location group setupLocationControls(composite); - + initializeDefaultValues(); - + + + if(startNode != null) { + if(directionSelectionPage.isRightToLeft()) { + CheckboxTreeViewer viewer = new CheckboxTreeViewer(composite, SWT.CHECK | SWT.H_SCROLL + | SWT.V_SCROLL | SWT.BORDER | SWT.HORIZONTAL); + + viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); + viewer.setContentProvider(new LocalChangesContentProvider(leftResource)); + viewer.setLabelProvider(new LocalChangesLabelProvider()); + viewer.setInput(leftResource.getWorkspace().getRoot()); + } else { + CheckboxTreeViewer viewer = new CheckboxTreeViewer(composite, SWT.CHECK | SWT.H_SCROLL + | SWT.V_SCROLL | SWT.BORDER | SWT.HORIZONTAL); + viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); + viewer.setContentProvider(new LocalChangesContentProvider(rightResource)); + viewer.setLabelProvider(new LocalChangesLabelProvider()); + viewer.setInput(leftResource.getWorkspace().getRoot()); + } + } + Dialog.applyDialogFont(parent); validatePage(); @@ -642,7 +682,8 @@ updateEnablements(); setupListeners(); } - + + /** * Setup the controls for the location. */ @@ -1209,6 +1250,9 @@ private Text unified_customRelativeText; private Button unified_customRelativeOption; + private IResource rightResource; + private IResource leftResource; + public GenerateDiffFileWizard() { super(); setWindowTitle(CompareMessages.GenerateLocalDiff_title); @@ -1216,6 +1260,28 @@ defaultValuesStore = new DefaultValuesStore(); } + private DiffNode startNode; + + public GenerateDiffFileWizard(DiffNode diff) { + this(); + startNode = diff; + ITypedElement left= diff.getLeft(); + if (left instanceof BufferedResourceNode) { + BufferedResourceNode bn= (BufferedResourceNode) left; + IResource resource= bn.getResource(); + leftResource = resource; + leftPath = resource.getFullPath().toString(); + } + ITypedElement right= diff.getRight(); + if (right instanceof BufferedResourceNode) { + BufferedResourceNode bn= (BufferedResourceNode) right; + IResource resource= bn.getResource(); + rightResource = resource; + rightPath = resource.getFullPath().toString(); + } + + } + public GenerateDiffFileWizard(DocumentMerger merger, boolean rightToLeft) { this(); this.merger = merger; @@ -1224,6 +1290,24 @@ 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(); +// ResourceNode leftResNode = (ResourceNode)node.getLeft(); +// ResourceNode rightResNode = (ResourceNode)node.getRight(); + + leftResource = ((ResourceNode)node.getLeft()).getResource(); + rightResource = ((ResourceNode)node.getRight()).getResource(); + } + + } } public void addPages() { @@ -1644,4 +1728,6 @@ } } + + } 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 20 Feb 2009 10:35:08 -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 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 20 Feb 2009 10:35:08 -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: .settings/org.eclipse.jdt.core.prefs =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/.settings/org.eclipse.jdt.core.prefs,v retrieving revision 1.8 diff -u -r1.8 org.eclipse.jdt.core.prefs --- .settings/org.eclipse.jdt.core.prefs 15 Nov 2006 14:23:46 -0000 1.8 +++ .settings/org.eclipse.jdt.core.prefs 20 Feb 2009 10:35:00 -0000 @@ -1,10 +1,11 @@ -#Wed Nov 15 09:22:56 EST 2006 +#Tue Feb 17 23:31:01 CET 2009 eclipse.preferences.version=1 org.eclipse.jdt.core.builder.cleanOutputFolder=clean org.eclipse.jdt.core.builder.duplicateResourceTask=warning org.eclipse.jdt.core.builder.invalidClasspath=abort +org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch -org.eclipse.jdt.core.circularClasspath=error +org.eclipse.jdt.core.circularClasspath=warning org.eclipse.jdt.core.classpath.exclusionPatterns=enabled org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled Index: .classpath =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/.classpath,v retrieving revision 1.21 diff -u -r1.21 .classpath --- .classpath 12 Jul 2006 20:34:53 -0000 1.21 +++ .classpath 20 Feb 2009 10:34:59 -0000 @@ -1,6 +1,6 @@ - + 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 20 Feb 2009 10:35:00 -0000 @@ -192,6 +192,9 @@ id="compareWithMenu"> + + @@ -280,6 +283,26 @@ id="addFromHistoryAction"> + + + + + + + + 0; + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return false; + } + +} 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,143 @@ +/******************************************************************************* + * 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 java.io.InputStream; +//import java.util.ArrayList; + +import org.eclipse.compare.CompareConfiguration; +import org.eclipse.compare.contentmergeviewer.ITokenComparator; +import org.eclipse.compare.contentmergeviewer.TokenComparator; +import org.eclipse.compare.internal.merge.DocumentMerger.IDocumentMergerInput; +import org.eclipse.compare.structuremergeviewer.DiffNode; +import org.eclipse.core.resources.IResource; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.Position; +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; + + Object rootDiffNode = fInput.createDiff(); + DiffNode diff; + if (rootDiffNode instanceof DiffNode){ + diff = (DiffNode) rootDiffNode; + GenerateDiffFileWizard.run(diff, 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(); + } + + + 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() { + // ITypedElement left = ((ICompareInput)getInput()).getRight(); + // return left != null && Utilities.getAdapter(left, IHunk.class) != null; + return false; + } + public boolean isIgnoreAncestor() { + // return TextMergeViewer.this.isIgnoreAncestor(); + return true; + } + public boolean isPatchHunk() { + // return TextMergeViewer.this.isPatchHunk(); + return false; + } + + public boolean isShowPseudoConflicts() { + // return fShowPseudoConflicts; + return false; + } + public boolean isThreeWay() { + // return TextMergeViewer.this.isThreeWay(); + return false; + } + public boolean isPatchHunkOk() { + // return TextMergeViewer.this.isPatchHunkOk(); + return false; + } + + } +} + Index: .settings/org.eclipse.jdt.launching.prefs =================================================================== RCS file: .settings/org.eclipse.jdt.launching.prefs diff -N .settings/org.eclipse.jdt.launching.prefs --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .settings/org.eclipse.jdt.launching.prefs 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,3 @@ +#Mon Feb 09 18:54:36 CET 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning