1 package jester; 2 3 import java.util.StringTokenizer ; 4 5 public class ReportItem { 6 private String sourceFileName; 7 private IgnoreListDocument originalContents; 8 private int indexOfChange; 9 private String valueChangedFrom; 10 private String valueChangedTo; 11 12 public ReportItem(String sourceFileName, IgnoreListDocument originalContents, int indexOfChange, String valueChangedFrom, String valueChangedTo) { 13 super(); 14 this.sourceFileName = sourceFileName; 15 this.originalContents = originalContents; 16 this.indexOfChange = indexOfChange; 17 this.valueChangedFrom = valueChangedFrom; 18 this.valueChangedTo = valueChangedTo; 19 } 20 public String toString() { 21 StringBuffer result = new StringBuffer (); 22 result.append(sourceFileName + " - changed source on line " + lineNumber() + " (char index=" + indexOfChange + ") from " + valueChangedFrom + " to " + valueChangedTo + "\n"); 23 int start = Math.max(0, indexOfChange - 30); 24 int end = Math.min(originalContents.length(), indexOfChange + 45); 25 result.append(originalContents.substring(start, indexOfChange)); 26 result.append(">>>"); 27 result.append(originalContents.substring(indexOfChange, end) + "\n"); 28 return result.toString(); 29 } 30 31 36 public int compareToReportItem(ReportItem other) { 37 int nameCompare = sourceFileName.compareTo(other.sourceFileName); 38 if (nameCompare == 0) { 39 return indexOfChange - other.indexOfChange; 40 } 41 return nameCompare; 42 } 43 44 public int lineNumber() { 45 if (indexOfChange == -1) { 46 return -1; 47 } 48 if (indexOfChange >= originalContents.length()) { 49 return -1; 50 } 51 StringTokenizer aLineBreaker = new StringTokenizer (originalContents.substring(0, indexOfChange), "\n", false); 52 int result = 0; 53 while (aLineBreaker.hasMoreTokens()) { 54 result++; 55 aLineBreaker.nextToken(); 56 } 57 return result; 58 } 59 60 public String asXML() { 61 return "<ChangeThatDidNotCauseTestsToFail index=\"" + indexOfChange + "\" from=\"" + xmlEncoded(valueChangedFrom) + "\" to=\"" + xmlEncoded(valueChangedTo) + "\"/>"; 62 } 63 64 private String xmlEncoded(String aString) { 65 StringBuffer result = new StringBuffer (); 66 for (int i = 0; i < aString.length(); i++) { 67 char nextChar = aString.charAt(i); 68 switch (nextChar) { 69 case '&' : 70 result.append("&"); 71 break; 72 case '<' : 73 result.append("<"); 74 break; 75 case '>' : 76 result.append(">"); 77 break; 78 case '"' : 79 result.append("""); 80 break; 81 default : 82 result.append(nextChar); 83 } 84 } 85 return result.toString(); 86 } 87 } | Popular Tags |