blob: e49d5ad6a0e4e9e84956962594325c9d15d114a3 [file] [log] [blame]
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
package org.eclipse.compare.internal.patch;
import java.util.List;
import org.eclipse.jface.util.Assert;
/**
* A Hunk describes a range of changed lines and some context lines.
*/
/* package */ class Hunk {
Diff fParent;
int fOldStart, fOldLength;
int fNewStart, fNewLength;
String[] fLines;
boolean fMatches= false;
private boolean fIsEnabled2= true;
/* package */ Hunk(Diff parent, int[] oldRange, int[] newRange, List lines) {
fParent= parent;
if (fParent != null)
fParent.add(this);
if (oldRange[0] > 0)
fOldStart= oldRange[0]-1; // line number start at 0!
else
fOldStart= 0;
fOldLength= oldRange[1];
if (newRange[0] > 0)
fNewStart= newRange[0]-1; // line number start at 0!
else
fNewStart= 0;
fNewLength= newRange[1];
fLines= (String[]) lines.toArray(new String[lines.size()]);
}
boolean isEnabled() {
return fIsEnabled2;
}
void setEnabled(boolean b) {
fIsEnabled2= b;
}
void reverse() {
int t= fOldStart;
fOldStart= fNewStart;
fNewStart= t;
t= fOldLength;
fOldLength= fNewLength;
fNewLength= t;
for (int i= 0; i < fLines.length; i++) {
String line= fLines[i];
char c= line.charAt(0);
switch (c) {
case '+':
fLines[i]= '-' + line.substring(1);
break;
case '-':
fLines[i]= '+' + line.substring(1);
break;
default:
break;
}
}
}
/**
* Returns the contents of this hunk.
* Each line starts with a control character. Their meaning is as follows:
* <ul>
* <li>
* '+': add the line
* <li>
* '-': delete the line
* <li>
* ' ': no change, context line
* </ul>
*/
String getContent() {
StringBuffer sb= new StringBuffer();
for (int i= 0; i < fLines.length; i++) {
String line= fLines[i];
sb.append(line.substring(0, Patcher.length(line)));
sb.append('\n');
}
return sb.toString();
}
/**
* Returns a descriptive String for this hunk.
* It is in the form old_start,old_length -> new_start,new_length.
*/
String getDescription() {
StringBuffer sb= new StringBuffer();
sb.append(Integer.toString(fOldStart));
sb.append(',');
sb.append(Integer.toString(fOldLength));
sb.append(" -> "); //$NON-NLS-1$
sb.append(Integer.toString(fNewStart));
sb.append(',');
sb.append(Integer.toString(fNewLength));
return sb.toString();
}
String getRejectedDescription() {
StringBuffer sb= new StringBuffer();
sb.append("@@ -"); //$NON-NLS-1$
sb.append(Integer.toString(fOldStart));
sb.append(',');
sb.append(Integer.toString(fOldLength));
sb.append(" +"); //$NON-NLS-1$
sb.append(Integer.toString(fNewStart));
sb.append(',');
sb.append(Integer.toString(fNewLength));
sb.append(" @@"); //$NON-NLS-1$
return sb.toString();
}
}