Lines 15-27
Link Here
|
15 |
|
15 |
|
16 |
import java.io.File; |
16 |
import java.io.File; |
17 |
import java.io.IOException; |
17 |
import java.io.IOException; |
|
|
18 |
import java.io.InputStream; |
18 |
import java.net.MalformedURLException; |
19 |
import java.net.MalformedURLException; |
19 |
import java.net.URL; |
20 |
import java.net.URL; |
20 |
import java.util.ArrayList; |
21 |
import java.util.ArrayList; |
|
|
22 |
import java.util.HashMap; |
21 |
import java.util.Iterator; |
23 |
import java.util.Iterator; |
22 |
import java.util.List; |
24 |
import java.util.List; |
|
|
25 |
import java.util.Map; |
26 |
import java.util.Set; |
23 |
|
27 |
|
|
|
28 |
import org.eclipse.compare.CompareConfiguration; |
29 |
import org.eclipse.compare.CompareEditorInput; |
30 |
import org.eclipse.compare.ResourceNode; |
31 |
import org.eclipse.compare.contentmergeviewer.ITokenComparator; |
32 |
import org.eclipse.compare.contentmergeviewer.TokenComparator; |
33 |
import org.eclipse.compare.internal.ResourceCompareInput.FilteredBufferedResourceNode; |
24 |
import org.eclipse.compare.internal.merge.DocumentMerger; |
34 |
import org.eclipse.compare.internal.merge.DocumentMerger; |
|
|
35 |
import org.eclipse.compare.internal.merge.DocumentMerger.IDocumentMergerInput; |
36 |
import org.eclipse.compare.structuremergeviewer.DiffNode; |
37 |
import org.eclipse.compare.structuremergeviewer.Differencer; |
38 |
import org.eclipse.compare.structuremergeviewer.ICompareInput; |
25 |
import org.eclipse.core.resources.IContainer; |
39 |
import org.eclipse.core.resources.IContainer; |
26 |
import org.eclipse.core.resources.IFile; |
40 |
import org.eclipse.core.resources.IFile; |
27 |
import org.eclipse.core.resources.IProject; |
41 |
import org.eclipse.core.resources.IProject; |
Lines 35-45
Link Here
|
35 |
import org.eclipse.jface.dialogs.Dialog; |
49 |
import org.eclipse.jface.dialogs.Dialog; |
36 |
import org.eclipse.jface.dialogs.IDialogConstants; |
50 |
import org.eclipse.jface.dialogs.IDialogConstants; |
37 |
import org.eclipse.jface.dialogs.IDialogSettings; |
51 |
import org.eclipse.jface.dialogs.IDialogSettings; |
|
|
52 |
import org.eclipse.jface.dialogs.IPageChangingListener; |
38 |
import org.eclipse.jface.dialogs.MessageDialog; |
53 |
import org.eclipse.jface.dialogs.MessageDialog; |
|
|
54 |
import org.eclipse.jface.dialogs.PageChangingEvent; |
39 |
import org.eclipse.jface.dialogs.TitleAreaDialog; |
55 |
import org.eclipse.jface.dialogs.TitleAreaDialog; |
40 |
import org.eclipse.jface.resource.ImageDescriptor; |
56 |
import org.eclipse.jface.resource.ImageDescriptor; |
|
|
57 |
import org.eclipse.jface.text.Document; |
41 |
import org.eclipse.jface.text.IDocument; |
58 |
import org.eclipse.jface.text.IDocument; |
|
|
59 |
import org.eclipse.jface.text.Position; |
60 |
import org.eclipse.jface.viewers.CheckStateChangedEvent; |
61 |
import org.eclipse.jface.viewers.CheckboxTreeViewer; |
42 |
import org.eclipse.jface.viewers.DoubleClickEvent; |
62 |
import org.eclipse.jface.viewers.DoubleClickEvent; |
|
|
63 |
import org.eclipse.jface.viewers.ICheckStateListener; |
43 |
import org.eclipse.jface.viewers.IDoubleClickListener; |
64 |
import org.eclipse.jface.viewers.IDoubleClickListener; |
44 |
import org.eclipse.jface.viewers.ISelection; |
65 |
import org.eclipse.jface.viewers.ISelection; |
45 |
import org.eclipse.jface.viewers.ISelectionChangedListener; |
66 |
import org.eclipse.jface.viewers.ISelectionChangedListener; |
Lines 69-74
Link Here
|
69 |
import org.eclipse.swt.widgets.Listener; |
90 |
import org.eclipse.swt.widgets.Listener; |
70 |
import org.eclipse.swt.widgets.Shell; |
91 |
import org.eclipse.swt.widgets.Shell; |
71 |
import org.eclipse.swt.widgets.Text; |
92 |
import org.eclipse.swt.widgets.Text; |
|
|
93 |
import org.eclipse.swt.widgets.TreeItem; |
94 |
import org.eclipse.ui.IWorkbenchPart; |
95 |
import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer; |
72 |
import org.eclipse.ui.model.BaseWorkbenchContentProvider; |
96 |
import org.eclipse.ui.model.BaseWorkbenchContentProvider; |
73 |
import org.eclipse.ui.model.WorkbenchLabelProvider; |
97 |
import org.eclipse.ui.model.WorkbenchLabelProvider; |
74 |
import org.eclipse.ui.views.navigator.ResourceComparator; |
98 |
import org.eclipse.ui.views.navigator.ResourceComparator; |
Lines 88-95
Link Here
|
88 |
final GenerateDiffFileWizard wizard = new GenerateDiffFileWizard(merger, rightToLeft); |
112 |
final GenerateDiffFileWizard wizard = new GenerateDiffFileWizard(merger, rightToLeft); |
89 |
wizard.setWindowTitle(title); |
113 |
wizard.setWindowTitle(title); |
90 |
WizardDialog dialog = new WizardDialog(shell, wizard); |
114 |
WizardDialog dialog = new WizardDialog(shell, wizard); |
|
|
115 |
|
116 |
dialog.addPageChangingListener(new IPageChangingListener() { |
117 |
|
118 |
public void handlePageChanging(PageChangingEvent event) { |
119 |
if(event.getTargetPage() instanceof LocationPage) { |
120 |
LocationPage page = (LocationPage) event.getTargetPage(); |
121 |
page.updateChangesControl(); |
122 |
} |
123 |
} |
124 |
|
125 |
}); |
126 |
|
127 |
dialog.setMinimumPageSize(INITIAL_WIDTH, INITIAL_HEIGHT); |
128 |
dialog.open(); |
129 |
} |
130 |
public static void run(IResource[] input, Shell shell) { |
131 |
final String title = CompareMessages.GenerateLocalDiff_title; |
132 |
final GenerateDiffFileWizard wizard = new GenerateDiffFileWizard(input); |
133 |
wizard.setWindowTitle(title); |
134 |
WizardDialog dialog = new WizardDialog(shell, wizard); |
135 |
|
136 |
dialog.addPageChangingListener(new IPageChangingListener() { |
137 |
|
138 |
public void handlePageChanging(PageChangingEvent event) { |
139 |
if(event.getTargetPage() instanceof LocationPage) { |
140 |
LocationPage page = (LocationPage) event.getTargetPage(); |
141 |
page.updateChangesControl(); |
142 |
} |
143 |
} |
144 |
|
145 |
}); |
146 |
|
91 |
dialog.setMinimumPageSize(INITIAL_WIDTH, INITIAL_HEIGHT); |
147 |
dialog.setMinimumPageSize(INITIAL_WIDTH, INITIAL_HEIGHT); |
|
|
148 |
dialog.setBlockOnOpen(false); |
92 |
dialog.open(); |
149 |
dialog.open(); |
|
|
150 |
|
93 |
} |
151 |
} |
94 |
|
152 |
|
95 |
protected class DirectionSelectionPage extends WizardPage { |
153 |
protected class DirectionSelectionPage extends WizardPage { |
Lines 209-219
Link Here
|
209 |
protected IPath[] foldersToCreate; |
267 |
protected IPath[] foldersToCreate; |
210 |
protected int selectedLocation; |
268 |
protected int selectedLocation; |
211 |
|
269 |
|
|
|
270 |
private ContainerCheckedTreeViewer viewer; |
271 |
private LocalChangesContentProvider provider; |
212 |
/** |
272 |
/** |
213 |
* The default values store used to initialize the selections. |
273 |
* The default values store used to initialize the selections. |
214 |
*/ |
274 |
*/ |
215 |
private final DefaultValuesStore store; |
275 |
private final DefaultValuesStore store; |
216 |
|
276 |
private Button chgSelectAll; |
|
|
277 |
private Button chgDeselectAll; |
217 |
|
278 |
|
218 |
class LocationPageContentProvider extends BaseWorkbenchContentProvider { |
279 |
class LocationPageContentProvider extends BaseWorkbenchContentProvider { |
219 |
//Never show closed projects |
280 |
//Never show closed projects |
Lines 448-453
Link Here
|
448 |
this.store= store; |
509 |
this.store= store; |
449 |
} |
510 |
} |
450 |
|
511 |
|
|
|
512 |
public void updateChangesControl() { |
513 |
Differencer dif = new Differencer(); |
514 |
if(directionSelectionPage.isRightToLeft()) |
515 |
startNode = (DiffNode) dif.findDifferences(false, null, null, null, |
516 |
new FilteredBufferedResourceNode(rightResource), |
517 |
new FilteredBufferedResourceNode(leftResource)); |
518 |
else if(!directionSelectionPage.isRightToLeft()) |
519 |
startNode = (DiffNode) dif.findDifferences(false, null, null, null, |
520 |
new FilteredBufferedResourceNode(leftResource), |
521 |
new FilteredBufferedResourceNode(rightResource)); |
522 |
provider.setNode(startNode); |
523 |
viewer.refresh(); |
524 |
initCheckedItems(); |
525 |
associatedResources = getSelectedAssociatedFiles(); |
526 |
} |
527 |
|
451 |
/** |
528 |
/** |
452 |
* Allow the user to finish if a valid file has been entered. |
529 |
* Allow the user to finish if a valid file has been entered. |
453 |
*/ |
530 |
*/ |
Lines 464-469
Link Here
|
464 |
break; |
541 |
break; |
465 |
} |
542 |
} |
466 |
|
543 |
|
|
|
544 |
if ((associatedResources = getSelectedAssociatedFiles()).size() == 0) { |
545 |
pageValid = false; |
546 |
setErrorMessage(CompareMessages.GenerateDiffFileWizard_noChangesSelected); |
547 |
} |
548 |
|
467 |
/** |
549 |
/** |
468 |
* Avoid draw flicker by clearing error message |
550 |
* Avoid draw flicker by clearing error message |
469 |
* if all is valid. |
551 |
* if all is valid. |
Lines 623-629
Link Here
|
623 |
public void createControl(Composite parent) { |
705 |
public void createControl(Composite parent) { |
624 |
|
706 |
|
625 |
final Composite composite= new Composite(parent, SWT.NULL); |
707 |
final Composite composite= new Composite(parent, SWT.NULL); |
626 |
composite.setLayout(new GridLayout()); |
708 |
GridLayout lay = new GridLayout(); |
|
|
709 |
lay.verticalSpacing = 15; |
710 |
composite.setLayout(lay); |
627 |
setControl(composite); |
711 |
setControl(composite); |
628 |
initializeDialogUnits(composite); |
712 |
initializeDialogUnits(composite); |
629 |
|
713 |
|
Lines 632-640
Link Here
|
632 |
|
716 |
|
633 |
//Create a location group |
717 |
//Create a location group |
634 |
setupLocationControls(composite); |
718 |
setupLocationControls(composite); |
635 |
|
719 |
|
636 |
initializeDefaultValues(); |
720 |
initializeDefaultValues(); |
637 |
|
721 |
|
|
|
722 |
Label changesLabel = new Label(composite, SWT.HORIZONTAL); |
723 |
changesLabel.setText("Changes"); |
724 |
|
725 |
viewer = new ContainerCheckedTreeViewer(composite, SWT.CHECK | SWT.H_SCROLL |
726 |
| SWT.V_SCROLL | SWT.BORDER | SWT.HORIZONTAL); |
727 |
|
728 |
viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); |
729 |
provider = new LocalChangesContentProvider(startNode); |
730 |
viewer.setContentProvider(provider); |
731 |
viewer.setLabelProvider(new LocalChangesLabelProvider()); |
732 |
viewer.setInput(leftResource.getWorkspace().getRoot()); |
733 |
initCheckedItems(); |
734 |
|
735 |
createSelectionButtons(composite); |
736 |
|
638 |
Dialog.applyDialogFont(parent); |
737 |
Dialog.applyDialogFont(parent); |
639 |
|
738 |
|
640 |
validatePage(); |
739 |
validatePage(); |
Lines 642-648
Link Here
|
642 |
updateEnablements(); |
741 |
updateEnablements(); |
643 |
setupListeners(); |
742 |
setupListeners(); |
644 |
} |
743 |
} |
645 |
|
744 |
|
|
|
745 |
private void createSelectionButtons(Composite composite) { |
746 |
final Composite buttonGroup = new Composite(composite,SWT.NONE); |
747 |
GridLayout layout = new GridLayout(); |
748 |
layout.numColumns = 2; |
749 |
layout.marginWidth = 0; |
750 |
layout.marginHeight = 0; |
751 |
layout.horizontalSpacing = 0; |
752 |
layout.verticalSpacing = 0; |
753 |
buttonGroup.setLayout(layout); |
754 |
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END |
755 |
| GridData.VERTICAL_ALIGN_CENTER); |
756 |
buttonGroup.setLayoutData(data); |
757 |
|
758 |
chgSelectAll = createSelectionButton(CompareMessages.GenerateDiffFileWizard_SelectAll, buttonGroup); |
759 |
chgDeselectAll = createSelectionButton(CompareMessages.GenerateDiffFileWizard_DeselectAll, buttonGroup); |
760 |
} |
761 |
|
762 |
private Button createSelectionButton(String buttonName, Composite buttonGroup) { |
763 |
Button button = new Button(buttonGroup,SWT.PUSH); |
764 |
button.setText(buttonName); |
765 |
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
766 |
int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); |
767 |
Point minSize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); |
768 |
data.widthHint = Math.max(widthHint, minSize.x); |
769 |
button.setLayoutData(data); |
770 |
return button; |
771 |
} |
772 |
|
646 |
/** |
773 |
/** |
647 |
* Setup the controls for the location. |
774 |
* Setup the controls for the location. |
648 |
*/ |
775 |
*/ |
Lines 813-821
Link Here
|
813 |
validatePage(); |
940 |
validatePage(); |
814 |
} |
941 |
} |
815 |
}); |
942 |
}); |
|
|
943 |
|
944 |
chgSelectAll.addSelectionListener(new SelectionAdapter() { |
945 |
public void widgetSelected(SelectionEvent e) { |
946 |
initCheckedItems(); |
947 |
//Only bother changing isPageComplete state if the current state |
948 |
//is not enabled |
949 |
if (!isPageComplete()) |
950 |
setPageComplete(validatePage()); |
951 |
} |
952 |
}); |
953 |
|
954 |
chgDeselectAll.addSelectionListener(new SelectionAdapter() { |
955 |
public void widgetSelected(SelectionEvent e) { |
956 |
viewer.setCheckedElements(new Object[0]); |
957 |
//Only bother changing isPageComplete state if the current state |
958 |
//is enabled |
959 |
if (isPageComplete()) |
960 |
setPageComplete(validatePage()); |
961 |
} |
962 |
}); |
963 |
|
964 |
viewer.addCheckStateListener(new ICheckStateListener() { |
965 |
public void checkStateChanged(CheckStateChangedEvent event) { |
966 |
setPageComplete(validatePage()); |
967 |
} |
968 |
}); |
816 |
|
969 |
|
817 |
} |
970 |
} |
|
|
971 |
|
972 |
protected void initCheckedItems() { |
973 |
TreeItem[] items=((CheckboxTreeViewer)viewer).getTree().getItems(); |
974 |
for (int i = 0; i < items.length; i++) { |
975 |
((CheckboxTreeViewer)viewer).setChecked(items[i].getData(), true); |
976 |
} |
977 |
} |
818 |
|
978 |
|
|
|
979 |
protected Map getSelectedAssociatedFiles() { |
980 |
Object[] elements = viewer.getCheckedElements(); |
981 |
Map result = new HashMap(); |
982 |
for (int i = 0; i < elements.length; i++) { |
983 |
if(!(elements[i] instanceof IProject)) { |
984 |
DiffNode node = (DiffNode) elements[i]; |
985 |
IResource lr = Utilities.getResource(node.getLeft()); |
986 |
IResource rr = Utilities.getResource(node.getRight()); |
987 |
if(lr instanceof IFile || rr instanceof IFile) |
988 |
result.put(lr, rr); |
989 |
} |
990 |
} |
991 |
return result; |
992 |
} |
993 |
|
819 |
/** |
994 |
/** |
820 |
* Enable and disable controls based on the selected radio button. |
995 |
* Enable and disable controls based on the selected radio button. |
821 |
*/ |
996 |
*/ |
Lines 1197-1203
Link Here
|
1197 |
|
1372 |
|
1198 |
private final DefaultValuesStore defaultValuesStore; |
1373 |
private final DefaultValuesStore defaultValuesStore; |
1199 |
|
1374 |
|
1200 |
private DocumentMerger merger; |
|
|
1201 |
private IDocument leftDoc; |
1375 |
private IDocument leftDoc; |
1202 |
private IDocument rightDoc; |
1376 |
private IDocument rightDoc; |
1203 |
private String leftPath; |
1377 |
private String leftPath; |
Lines 1209-1229
Link Here
|
1209 |
private Text unified_customRelativeText; |
1383 |
private Text unified_customRelativeText; |
1210 |
private Button unified_customRelativeOption; |
1384 |
private Button unified_customRelativeOption; |
1211 |
|
1385 |
|
|
|
1386 |
private IResource rightResource; |
1387 |
private IResource leftResource; |
1388 |
|
1389 |
private Map associatedResources; |
1390 |
|
1212 |
public GenerateDiffFileWizard() { |
1391 |
public GenerateDiffFileWizard() { |
1213 |
super(); |
1392 |
super(); |
1214 |
setWindowTitle(CompareMessages.GenerateLocalDiff_title); |
1393 |
setWindowTitle(CompareMessages.GenerateLocalDiff_title); |
1215 |
initializeDefaultPageImageDescriptor(); |
1394 |
initializeDefaultPageImageDescriptor(); |
1216 |
defaultValuesStore = new DefaultValuesStore(); |
1395 |
defaultValuesStore = new DefaultValuesStore(); |
|
|
1396 |
associatedResources = new HashMap(); |
1217 |
} |
1397 |
} |
1218 |
|
1398 |
|
|
|
1399 |
private DiffNode startNode; |
1400 |
|
1401 |
public GenerateDiffFileWizard(IResource[] input) { |
1402 |
this(); |
1403 |
|
1404 |
this.leftDoc = new Document(); |
1405 |
this.rightDoc = new Document(); |
1406 |
|
1407 |
leftResource = input[0]; |
1408 |
rightResource = input[1]; |
1409 |
|
1410 |
leftPath = leftResource.getFullPath().toString(); |
1411 |
rightPath = rightResource.getFullPath().toString(); |
1412 |
|
1413 |
Differencer dif = new Differencer(); |
1414 |
startNode = (DiffNode) dif.findDifferences(false, null, null, null, |
1415 |
new FilteredBufferedResourceNode(leftResource), |
1416 |
new FilteredBufferedResourceNode(rightResource)); |
1417 |
|
1418 |
} |
1419 |
|
1219 |
public GenerateDiffFileWizard(DocumentMerger merger, boolean rightToLeft) { |
1420 |
public GenerateDiffFileWizard(DocumentMerger merger, boolean rightToLeft) { |
1220 |
this(); |
1421 |
this(); |
1221 |
this.merger = merger; |
|
|
1222 |
this.leftDoc = merger.getDocument(MergeViewerContentProvider.LEFT_CONTRIBUTOR); |
1422 |
this.leftDoc = merger.getDocument(MergeViewerContentProvider.LEFT_CONTRIBUTOR); |
1223 |
this.rightDoc = merger.getDocument(MergeViewerContentProvider.RIGHT_CONTRIBUTOR); |
1423 |
this.rightDoc = merger.getDocument(MergeViewerContentProvider.RIGHT_CONTRIBUTOR); |
1224 |
this.leftPath = merger.getCompareConfiguration().getLeftLabel(leftDoc); |
1424 |
this.leftPath = merger.getCompareConfiguration().getLeftLabel(leftDoc); |
1225 |
this.rightPath = merger.getCompareConfiguration().getRightLabel(rightDoc); |
1425 |
this.rightPath = merger.getCompareConfiguration().getRightLabel(rightDoc); |
1226 |
this.rightToLeft = rightToLeft; |
1426 |
this.rightToLeft = rightToLeft; |
|
|
1427 |
IWorkbenchPart workbenchPart = merger.getCompareConfiguration().getContainer().getWorkbenchPart(); |
1428 |
|
1429 |
if(workbenchPart instanceof CompareEditor) { |
1430 |
|
1431 |
CompareEditor editor = (CompareEditor)workbenchPart; |
1432 |
|
1433 |
CompareEditorInput input = (CompareEditorInput)editor.getEditorInput(); |
1434 |
input.getCompareResult(); |
1435 |
if(input.getCompareResult() instanceof ICompareInput) { |
1436 |
ICompareInput node = (ICompareInput)input.getCompareResult(); |
1437 |
|
1438 |
leftResource = ((ResourceNode)node.getLeft()).getResource(); |
1439 |
rightResource = ((ResourceNode)node.getRight()).getResource(); |
1440 |
Differencer dif = new Differencer(); |
1441 |
startNode = (DiffNode) dif.findDifferences(false, null, null, null, |
1442 |
new FilteredBufferedResourceNode(leftResource), |
1443 |
new FilteredBufferedResourceNode(rightResource)); |
1444 |
} |
1445 |
|
1446 |
} |
1227 |
} |
1447 |
} |
1228 |
|
1448 |
|
1229 |
public void addPages() { |
1449 |
public void addPages() { |
Lines 1325-1331
Link Here
|
1325 |
public boolean needsProgressMonitor() { |
1545 |
public boolean needsProgressMonitor() { |
1326 |
return true; |
1546 |
return true; |
1327 |
} |
1547 |
} |
1328 |
|
1548 |
|
1329 |
/** |
1549 |
/** |
1330 |
* Completes processing of the wizard. If this method returns <code> |
1550 |
* Completes processing of the wizard. If this method returns <code> |
1331 |
* true</code>, the wizard will close; otherwise, it will stay active. |
1551 |
* true</code>, the wizard will close; otherwise, it will stay active. |
Lines 1340-1363
Link Here
|
1340 |
} |
1560 |
} |
1341 |
|
1561 |
|
1342 |
//Validation of patch root |
1562 |
//Validation of patch root |
1343 |
if(optionsPage.getRootSelection() == OptionsPage.ROOT_CUSTOM) { |
1563 |
// if(optionsPage.getRootSelection() == OptionsPage.ROOT_CUSTOM) { |
1344 |
String path = optionsPage.getPath(); |
1564 |
// String path = optionsPage.getPath(); |
1345 |
IFile file2; |
1565 |
// IFile file2; |
1346 |
try { |
1566 |
// try { |
1347 |
file2 = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path)); |
1567 |
// file2 = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path)); |
1348 |
} catch(IllegalArgumentException e) { |
1568 |
// } catch(IllegalArgumentException e) { |
1349 |
final String title = CompareMessages.GenerateLocalDiff_3; |
1569 |
// final String title = CompareMessages.GenerateLocalDiff_3; |
1350 |
final String msg = CompareMessages.GenerateLocalDiff_4; |
1570 |
// final String msg = CompareMessages.GenerateLocalDiff_4; |
1351 |
final MessageDialog dialog = new MessageDialog(getShell(), title, |
1571 |
// final MessageDialog dialog = new MessageDialog(getShell(), title, |
1352 |
null, msg, MessageDialog.ERROR, |
1572 |
// null, msg, MessageDialog.ERROR, |
1353 |
new String[] { IDialogConstants.OK_LABEL }, 0); |
1573 |
// new String[] { IDialogConstants.OK_LABEL }, 0); |
1354 |
dialog.open(); |
1574 |
// dialog.open(); |
1355 |
return false; |
1575 |
// return false; |
1356 |
} |
1576 |
// } |
1357 |
if(!validateFile2(file2)) { |
1577 |
// if(!validateFile2(file2)) { |
1358 |
return false; |
1578 |
// return false; |
1359 |
} |
1579 |
// } |
1360 |
} |
1580 |
// } |
1361 |
|
1581 |
|
1362 |
// Create the patch |
1582 |
// Create the patch |
1363 |
generateDiffFile(file); |
1583 |
generateDiffFile(file); |
Lines 1424-1433
Link Here
|
1424 |
} else { |
1644 |
} else { |
1425 |
oldPath = this.rightPath; |
1645 |
oldPath = this.rightPath; |
1426 |
} |
1646 |
} |
1427 |
|
1647 |
|
1428 |
UnifiedDiffFormatter formatter = new UnifiedDiffFormatter(merger, |
1648 |
//TODO extend formatter to use list of mergers. |
1429 |
leftDoc, rightDoc, oldPath, toPath, directionSelectionPage |
1649 |
UnifiedDiffFormatter formatter = new UnifiedDiffFormatter(createFormatterInput()); |
1430 |
.isRightToLeft()); |
|
|
1431 |
try { |
1650 |
try { |
1432 |
if (file == null) { |
1651 |
if (file == null) { |
1433 |
formatter.generateDiff(); |
1652 |
formatter.generateDiff(); |
Lines 1438-1443
Link Here
|
1438 |
throw new RuntimeException(e); |
1657 |
throw new RuntimeException(e); |
1439 |
} |
1658 |
} |
1440 |
} |
1659 |
} |
|
|
1660 |
|
1661 |
private Object[][] createFormatterInput() { |
1662 |
Set keys = associatedResources.keySet(); |
1663 |
Object[][] result = new Object[keys.size()][3]; |
1664 |
DocumentMerger merg = null; |
1665 |
int i = 0; |
1666 |
for (Iterator iterator = keys.iterator(); iterator.hasNext();) { |
1667 |
IFile sourceRes = (IFile) iterator.next(); |
1668 |
IFile targetRes = (IFile) associatedResources.get(sourceRes); |
1669 |
merg = createDocumentMerger(sourceRes, targetRes); |
1670 |
result[i][0] = merg; |
1671 |
result[i][1] = sourceRes; |
1672 |
result[i][2] = targetRes; |
1673 |
i++; |
1674 |
} |
1675 |
return result; |
1676 |
} |
1677 |
|
1678 |
private DocumentMerger createDocumentMerger(IFile leftFile, IFile rightFile){ |
1679 |
IDocument leftDoc = convertFileToDocument(leftFile); |
1680 |
IDocument rightDoc = convertFileToDocument(rightFile); |
1681 |
if (leftDoc == null) { |
1682 |
leftDoc = new Document(); |
1683 |
} |
1684 |
if (rightDoc == null) { |
1685 |
rightDoc = new Document(); |
1686 |
} |
1687 |
DocumentMerger docMerger; |
1688 |
docMerger = new DocumentMerger(new LocalDiffMergerInput(leftDoc, rightDoc)); |
1689 |
try { |
1690 |
docMerger.doDiff(); |
1691 |
} catch (Exception e) { |
1692 |
throw new RuntimeException(e); |
1693 |
} |
1694 |
return docMerger; |
1695 |
} |
1696 |
|
1697 |
private IDocument convertFileToDocument(IFile file) { |
1698 |
if(file == null) |
1699 |
return null; |
1700 |
StringBuffer str = new StringBuffer(); |
1701 |
int c; |
1702 |
try{ |
1703 |
InputStream inputStream = file.getContents(); |
1704 |
while ((c = inputStream.read())!=-1){ |
1705 |
str.append((char)c); |
1706 |
} |
1707 |
inputStream.close(); |
1708 |
return new Document(str.toString()); |
1709 |
}catch(Exception ex){ |
1710 |
CompareUIPlugin.log(ex); |
1711 |
} |
1712 |
|
1713 |
return null; |
1714 |
} |
1715 |
|
1716 |
class LocalDiffMergerInput implements IDocumentMergerInput { |
1717 |
|
1718 |
private IDocument leftDoc; |
1719 |
private IDocument rightDoc; |
1720 |
|
1721 |
public LocalDiffMergerInput(IDocument leftDoc, IDocument rightDoc) { |
1722 |
this.leftDoc = leftDoc ; |
1723 |
this.rightDoc= rightDoc; |
1724 |
} |
1725 |
|
1726 |
public ITokenComparator createTokenComparator(String line) { |
1727 |
return new TokenComparator(line); |
1728 |
} |
1729 |
public CompareConfiguration getCompareConfiguration() { |
1730 |
return new CompareConfiguration(); |
1731 |
} |
1732 |
public IDocument getDocument(char contributor) { |
1733 |
switch (contributor) { |
1734 |
case MergeViewerContentProvider.LEFT_CONTRIBUTOR: |
1735 |
return leftDoc; |
1736 |
case MergeViewerContentProvider.RIGHT_CONTRIBUTOR: |
1737 |
return rightDoc; |
1738 |
case MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR: |
1739 |
return null; |
1740 |
} |
1741 |
return null; |
1742 |
} |
1743 |
public int getHunkStart() { |
1744 |
return 0; |
1745 |
} |
1746 |
public Position getRegion(char contributor) { |
1747 |
switch (contributor) { |
1748 |
case MergeViewerContentProvider.LEFT_CONTRIBUTOR: |
1749 |
return new Position(0, leftDoc.getLength()); |
1750 |
case MergeViewerContentProvider.RIGHT_CONTRIBUTOR: |
1751 |
return new Position(0, rightDoc.getLength()); |
1752 |
case MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR: |
1753 |
return new Position(0, 0); |
1754 |
} |
1755 |
return null; |
1756 |
} |
1757 |
public boolean isHunkOnLeft() { |
1758 |
return false; |
1759 |
} |
1760 |
public boolean isIgnoreAncestor() { |
1761 |
return true; |
1762 |
} |
1763 |
public boolean isPatchHunk() { |
1764 |
return false; |
1765 |
} |
1766 |
|
1767 |
public boolean isShowPseudoConflicts() { |
1768 |
return false; |
1769 |
} |
1770 |
public boolean isThreeWay() { |
1771 |
return false; |
1772 |
} |
1773 |
public boolean isPatchHunkOk() { |
1774 |
return false; |
1775 |
} |
1776 |
|
1777 |
} |
1441 |
|
1778 |
|
1442 |
public boolean validateFile(File file) { |
1779 |
public boolean validateFile(File file) { |
1443 |
|
1780 |
|
Lines 1644-1647
Link Here
|
1644 |
} |
1981 |
} |
1645 |
} |
1982 |
} |
1646 |
|
1983 |
|
|
|
1984 |
|
1985 |
|
1647 |
} |
1986 |
} |