rejected hunk support; #5723
diff --git a/bundles/org.eclipse.compare/buildnotes_compare.html b/bundles/org.eclipse.compare/buildnotes_compare.html
index e97599f..4131b4a 100644
--- a/bundles/org.eclipse.compare/buildnotes_compare.html
+++ b/bundles/org.eclipse.compare/buildnotes_compare.html
@@ -11,26 +11,29 @@
 <h1>

 Eclipse Platform Build Notes<br>

 Compare</h1>

-Eclipse SDK Build 208, November ?st, 2001

+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

+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>

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
index c87d51c..9750869 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
@@ -574,7 +574,7 @@
 	 */

 	public static Viewer findContentViewer(Viewer oldViewer, Object in, Composite parent, CompareConfiguration cc) {

 		

-		if (! (in instanceof ICompareInput)) {

+		if (in instanceof IStreamContentAccessor) {

 			String type= ITypedElement.TEXT_TYPE;

 			if (in instanceof ITypedElement) {

 				ITypedElement tin= (ITypedElement) in;

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewer.java
index 833208b..a556a6f 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewer.java
@@ -35,13 +35,12 @@
 	}

 	

 	public void setInput(Object input) {

-		if (input instanceof ICompareInput) {

+		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)));

-			

-		} else if (input instanceof IStreamContentAccessor) {

-			fSourceViewer.setDocument(new Document(getString(input)));

 		}

 	}

 	

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/Diff.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/Diff.java
index 268b072..17d06f4 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/Diff.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/Diff.java
@@ -17,6 +17,7 @@
 	long fOldDate, fNewDate;	// if 0: no file

 	List fHunks= new ArrayList();

 	boolean fIsEnabled= true;

+	String fRejected;

 	

  	/* package */ Diff(IPath oldPath, long oldDate, IPath newPath, long newDate) {

 		fOldPath= oldPath;

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/InputPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/InputPatchPage.java
index 9872ccf..18eed5b 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/InputPatchPage.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/InputPatchPage.java
@@ -183,11 +183,11 @@
 		

 		// 1st row

 		fUsePatchFileButton= new Button(fPatchFileGroup, SWT.RADIO);

-		fUsePatchFileButton.setText("File: ");

+		fUsePatchFileButton.setText("File ");

 		

 		fPatchFileNameField= new Combo(fPatchFileGroup, SWT.BORDER);

 		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		gd.horizontalIndent= 8;

+		//gd.horizontalIndent= 8;

 		gd.widthHint= SIZING_TEXT_FIELD_WIDTH;

 		fPatchFileNameField.setLayoutData(gd);

 		

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/PatchCompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/PatchCompareInput.java
index 0d971f0..b705620 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/PatchCompareInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/PatchCompareInput.java
@@ -10,11 +10,12 @@
 import java.lang.reflect.InvocationTargetException;

 

 import org.eclipse.swt.graphics.Image;

+import org.eclipse.swt.widgets.Composite;

 

 import org.eclipse.core.runtime.*;

 import org.eclipse.core.resources.*;

 

-import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.*;

 

 import org.eclipse.compare.*;

 import org.eclipse.compare.structuremergeviewer.*;

@@ -26,6 +27,28 @@
  * patch selected workspace resources.

  */

 /* package */ class PatchCompareInput extends CompareEditorInput {

+	

+	static class Rejected extends DiffNode implements IStreamContentAccessor {

+		Diff fDiff;

+		String fName;

+		Rejected(IDiffContainer parent, String name, Diff diff) {

+			super(parent, Differencer.NO_CHANGE);

+			fName= name;

+			fDiff= diff;

+		}

+		public String getName() {

+			return fName;

+		}

+		public String getType() {

+			return "txt";

+		}

+		public Image getImage() {

+			return CompareUI.getImage("file");

+		}

+		public InputStream getContents() {

+			return new ByteArrayInputStream(fDiff.fRejected.getBytes());

+		}

+	}

 		

 	private DiffNode fRoot;

 	private IResource fTarget;

@@ -61,8 +84,17 @@
 				

 			for (int i= 0; i < diffs.length; i++) {

 				Diff diff= diffs[i];

-				if (diff.fIsEnabled)

-					createPath(fRoot, rootFolder, fPatcher.getPath(diff), diff);

+				if (diff.fIsEnabled) {

+					IPath path= fPatcher.getPath(diff);

+					createPath(fRoot, rootFolder, path, diff, false);

+					

+					String rej= diff.fRejected;

+					if (rej != null) {

+						IPath pp= path.removeLastSegments(1);

+						pp= pp.append(path.lastSegment() + ".rej");

+						createPath(fRoot, rootFolder, pp, diff, true);

+					}

+				}

 				pm.worked(1);

 			}

 						

@@ -122,7 +154,7 @@
 		}

 	}

 	

-	private void createPath(DiffContainer root, IContainer folder, IPath path, Diff diff) {

+	private void createPath(DiffContainer root, IContainer folder, IPath path, Diff diff, boolean reject) {

 		if (path.segmentCount() > 1) {

 			IFolder f= folder.getFolder(path.uptoSegment(1));

 			IDiffElement child= root.findChild(path.segment(0));

@@ -131,11 +163,15 @@
 				child= new DiffNode(root, Differencer.CHANGE, null, rn, rn);

 			}

 			if (child instanceof DiffContainer)

-				createPath((DiffContainer)child, f, path.removeFirstSegments(1), diff);

+				createPath((DiffContainer)child, f, path.removeFirstSegments(1), diff, reject);

 		} else {

 			// a leaf

-			BufferedResourceNode rn= new BufferedResourceNode(folder.getFile(path));						

-			new DiffNode(root, diff.getType(), null, rn, new PatchedResource(rn, diff, path, fPatcher));

+			BufferedResourceNode rn= new BufferedResourceNode(folder.getFile(path));

+			if (reject) {

+				new Rejected(root, path.segment(0), diff);

+			} else {

+				new DiffNode(root, diff.getType(), null, rn, new PatchedResource(rn, diff, path, fPatcher));

+			}					

 		}

 	}

 }

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/Patcher.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/Patcher.java
index 3877cba..5aea6ce 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/Patcher.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/Patcher.java
@@ -603,7 +603,7 @@
 			} else {

 				if (failedHunks != null)

 					failedHunks.add(hunk);

-				System.out.println("hunk ignored");

+				// System.out.println("hunk ignored");

 			}

 		}

 		return shift;

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/PreviewPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/PreviewPatchPage.java
index 9c97d14..8d1a28f 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/PreviewPatchPage.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/PreviewPatchPage.java
@@ -5,7 +5,7 @@
 package org.eclipse.compare.patch;

 

 import java.io.*;

-import java.util.ArrayList;

+import java.util.*;

 

 import org.eclipse.swt.SWT;

 import org.eclipse.swt.events.*;

@@ -204,9 +204,9 @@
 		l.setToolTipText("Allow context to shift this number of lines from the original place");

 		fFuzzField= new Text(group, SWT.BORDER);

 		fFuzzField.setText("2");

-		GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_CENTER);

-		gd.widthHint= 30;

-		fFuzzField.setLayoutData(gd);

+		GridData gd2= new GridData(GridData.HORIZONTAL_ALIGN_CENTER);

+		gd2.widthHint= 30;

+		fFuzzField.setLayoutData(gd2);

 

 		addSpacer(group);

 		

@@ -218,15 +218,16 @@
 		// register listeners

 		

 		final Patcher patcher= fPatchWizard.getPatcher();

-				

-		fStripPrefixSegments.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					if (patcher.setStripPrefixSegments(getStripPrefixSegments()))

-						updateTree();

+			

+		if (fStripPrefixSegments != null) 

+			fStripPrefixSegments.addSelectionListener(

+				new SelectionAdapter() {

+					public void widgetSelected(SelectionEvent e) {

+						if (patcher.setStripPrefixSegments(getStripPrefixSegments()))

+							updateTree();

+					}

 				}

-			}

-		);

+			);

 		fIgnoreWhitespaceButton.addSelectionListener(

 			new SelectionAdapter() {

 				public void widgetSelected(SelectionEvent e) {

@@ -312,7 +313,7 @@
 					}

 				}

 			}

-			if (length != 99)

+			if (fStripPrefixSegments != null && length != 99)

 				for (int i= 1; i < length; i++)

 					fStripPrefixSegments.add(Integer.toString(i));

 		}

@@ -407,6 +408,18 @@
 				lines= new ArrayList();

 			fPatchWizard.getPatcher().patch(diff, lines, failedHunks);

 			

+			if (! failedHunks.isEmpty()) {

+				StringBuffer sb= new StringBuffer();

+				Iterator iter= failedHunks.iterator();

+				while (iter.hasNext()) {

+					Hunk hunk= (Hunk) iter.next();

+					sb.append(hunk.getDescription());

+					sb.append('\n');

+					sb.append(hunk.getContent());

+				}

+				diff.fRejected= sb.toString();

+			}

+			

 			int checkedSubs= 0;	// counts checked hunk items

 			TreeItem[] hunkItems= item.getItems();

 			for (int h= 0; h < hunkItems.length; h++) {

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
index e97599f..4131b4a 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html
@@ -11,26 +11,29 @@
 <h1>

 Eclipse Platform Build Notes<br>

 Compare</h1>

-Eclipse SDK Build 208, November ?st, 2001

+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

+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>

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
index c87d51c..9750869 100644
--- 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
@@ -574,7 +574,7 @@
 	 */

 	public static Viewer findContentViewer(Viewer oldViewer, Object in, Composite parent, CompareConfiguration cc) {

 		

-		if (! (in instanceof ICompareInput)) {

+		if (in instanceof IStreamContentAccessor) {

 			String type= ITypedElement.TEXT_TYPE;

 			if (in instanceof ITypedElement) {

 				ITypedElement tin= (ITypedElement) in;

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewer.java
index 833208b..a556a6f 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewer.java
@@ -35,13 +35,12 @@
 	}

 	

 	public void setInput(Object input) {

-		if (input instanceof ICompareInput) {

+		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)));

-			

-		} else if (input instanceof IStreamContentAccessor) {

-			fSourceViewer.setDocument(new Document(getString(input)));

 		}

 	}

 	

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/Diff.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/Diff.java
index 268b072..17d06f4 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/Diff.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/Diff.java
@@ -17,6 +17,7 @@
 	long fOldDate, fNewDate;	// if 0: no file

 	List fHunks= new ArrayList();

 	boolean fIsEnabled= true;

+	String fRejected;

 	

  	/* package */ Diff(IPath oldPath, long oldDate, IPath newPath, long newDate) {

 		fOldPath= oldPath;

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/InputPatchPage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/InputPatchPage.java
index 9872ccf..18eed5b 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/InputPatchPage.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/InputPatchPage.java
@@ -183,11 +183,11 @@
 		

 		// 1st row

 		fUsePatchFileButton= new Button(fPatchFileGroup, SWT.RADIO);

-		fUsePatchFileButton.setText("File: ");

+		fUsePatchFileButton.setText("File ");

 		

 		fPatchFileNameField= new Combo(fPatchFileGroup, SWT.BORDER);

 		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		gd.horizontalIndent= 8;

+		//gd.horizontalIndent= 8;

 		gd.widthHint= SIZING_TEXT_FIELD_WIDTH;

 		fPatchFileNameField.setLayoutData(gd);

 		

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/PatchCompareInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/PatchCompareInput.java
index 0d971f0..b705620 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/PatchCompareInput.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/PatchCompareInput.java
@@ -10,11 +10,12 @@
 import java.lang.reflect.InvocationTargetException;

 

 import org.eclipse.swt.graphics.Image;

+import org.eclipse.swt.widgets.Composite;

 

 import org.eclipse.core.runtime.*;

 import org.eclipse.core.resources.*;

 

-import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.*;

 

 import org.eclipse.compare.*;

 import org.eclipse.compare.structuremergeviewer.*;

@@ -26,6 +27,28 @@
  * patch selected workspace resources.

  */

 /* package */ class PatchCompareInput extends CompareEditorInput {

+	

+	static class Rejected extends DiffNode implements IStreamContentAccessor {

+		Diff fDiff;

+		String fName;

+		Rejected(IDiffContainer parent, String name, Diff diff) {

+			super(parent, Differencer.NO_CHANGE);

+			fName= name;

+			fDiff= diff;

+		}

+		public String getName() {

+			return fName;

+		}

+		public String getType() {

+			return "txt";

+		}

+		public Image getImage() {

+			return CompareUI.getImage("file");

+		}

+		public InputStream getContents() {

+			return new ByteArrayInputStream(fDiff.fRejected.getBytes());

+		}

+	}

 		

 	private DiffNode fRoot;

 	private IResource fTarget;

@@ -61,8 +84,17 @@
 				

 			for (int i= 0; i < diffs.length; i++) {

 				Diff diff= diffs[i];

-				if (diff.fIsEnabled)

-					createPath(fRoot, rootFolder, fPatcher.getPath(diff), diff);

+				if (diff.fIsEnabled) {

+					IPath path= fPatcher.getPath(diff);

+					createPath(fRoot, rootFolder, path, diff, false);

+					

+					String rej= diff.fRejected;

+					if (rej != null) {

+						IPath pp= path.removeLastSegments(1);

+						pp= pp.append(path.lastSegment() + ".rej");

+						createPath(fRoot, rootFolder, pp, diff, true);

+					}

+				}

 				pm.worked(1);

 			}

 						

@@ -122,7 +154,7 @@
 		}

 	}

 	

-	private void createPath(DiffContainer root, IContainer folder, IPath path, Diff diff) {

+	private void createPath(DiffContainer root, IContainer folder, IPath path, Diff diff, boolean reject) {

 		if (path.segmentCount() > 1) {

 			IFolder f= folder.getFolder(path.uptoSegment(1));

 			IDiffElement child= root.findChild(path.segment(0));

@@ -131,11 +163,15 @@
 				child= new DiffNode(root, Differencer.CHANGE, null, rn, rn);

 			}

 			if (child instanceof DiffContainer)

-				createPath((DiffContainer)child, f, path.removeFirstSegments(1), diff);

+				createPath((DiffContainer)child, f, path.removeFirstSegments(1), diff, reject);

 		} else {

 			// a leaf

-			BufferedResourceNode rn= new BufferedResourceNode(folder.getFile(path));						

-			new DiffNode(root, diff.getType(), null, rn, new PatchedResource(rn, diff, path, fPatcher));

+			BufferedResourceNode rn= new BufferedResourceNode(folder.getFile(path));

+			if (reject) {

+				new Rejected(root, path.segment(0), diff);

+			} else {

+				new DiffNode(root, diff.getType(), null, rn, new PatchedResource(rn, diff, path, fPatcher));

+			}					

 		}

 	}

 }

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/Patcher.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/Patcher.java
index 3877cba..5aea6ce 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/Patcher.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/Patcher.java
@@ -603,7 +603,7 @@
 			} else {

 				if (failedHunks != null)

 					failedHunks.add(hunk);

-				System.out.println("hunk ignored");

+				// System.out.println("hunk ignored");

 			}

 		}

 		return shift;

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/PreviewPatchPage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/PreviewPatchPage.java
index 9c97d14..8d1a28f 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/PreviewPatchPage.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/patch/PreviewPatchPage.java
@@ -5,7 +5,7 @@
 package org.eclipse.compare.patch;

 

 import java.io.*;

-import java.util.ArrayList;

+import java.util.*;

 

 import org.eclipse.swt.SWT;

 import org.eclipse.swt.events.*;

@@ -204,9 +204,9 @@
 		l.setToolTipText("Allow context to shift this number of lines from the original place");

 		fFuzzField= new Text(group, SWT.BORDER);

 		fFuzzField.setText("2");

-		GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_CENTER);

-		gd.widthHint= 30;

-		fFuzzField.setLayoutData(gd);

+		GridData gd2= new GridData(GridData.HORIZONTAL_ALIGN_CENTER);

+		gd2.widthHint= 30;

+		fFuzzField.setLayoutData(gd2);

 

 		addSpacer(group);

 		

@@ -218,15 +218,16 @@
 		// register listeners

 		

 		final Patcher patcher= fPatchWizard.getPatcher();

-				

-		fStripPrefixSegments.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					if (patcher.setStripPrefixSegments(getStripPrefixSegments()))

-						updateTree();

+			

+		if (fStripPrefixSegments != null) 

+			fStripPrefixSegments.addSelectionListener(

+				new SelectionAdapter() {

+					public void widgetSelected(SelectionEvent e) {

+						if (patcher.setStripPrefixSegments(getStripPrefixSegments()))

+							updateTree();

+					}

 				}

-			}

-		);

+			);

 		fIgnoreWhitespaceButton.addSelectionListener(

 			new SelectionAdapter() {

 				public void widgetSelected(SelectionEvent e) {

@@ -312,7 +313,7 @@
 					}

 				}

 			}

-			if (length != 99)

+			if (fStripPrefixSegments != null && length != 99)

 				for (int i= 1; i < length; i++)

 					fStripPrefixSegments.add(Integer.toString(i));

 		}

@@ -407,6 +408,18 @@
 				lines= new ArrayList();

 			fPatchWizard.getPatcher().patch(diff, lines, failedHunks);

 			

+			if (! failedHunks.isEmpty()) {

+				StringBuffer sb= new StringBuffer();

+				Iterator iter= failedHunks.iterator();

+				while (iter.hasNext()) {

+					Hunk hunk= (Hunk) iter.next();

+					sb.append(hunk.getDescription());

+					sb.append('\n');

+					sb.append(hunk.getContent());

+				}

+				diff.fRejected= sb.toString();

+			}

+			

 			int checkedSubs= 0;	// counts checked hunk items

 			TreeItem[] hunkItems= item.getItems();

 			for (int h= 0; h < hunkItems.length; h++) {