package edu.harvard.wcfia.yoshikoder.reporting;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
import edu.harvard.wcfia.yoshikoder.dictionary.Node;
import edu.harvard.wcfia.yoshikoder.document.DocumentList;
public class DictionaryComparisonReport extends AbstractReport implements
YKReport {
private static Logger log =
Logger.getLogger("edu.harvard.wcfia.yoshikoder.reporting.DictionaryComparisonReport");
protected EntryFrequencyMap firstMap;
protected EntryFrequencyMap secondMap;
protected boolean showPatterns;
public DictionaryComparisonReport(String reportTitle, String desc, String dictName,
DocumentList dl, EntryFrequencyMap map1, EntryFrequencyMap map2, boolean showPats) {
super(reportTitle, desc, dictName, dl);
firstMap = map1;
secondMap = map2;
showPatterns = showPats;
data = initData();
}
public EntryFrequencyMap getFirstEntryFrequencyMap(){
return firstMap;
}
public EntryFrequencyMap getSecondEntryFrequencyMap(){
return secondMap;
}
protected Object[][] initData(){
List l = null;
if (showPatterns){
l = firstMap.getSortedEntries();
} else {
l = firstMap.getSortedCategoryEntries();
}
log.info("report has " + l.size() + " lines");
Object[][] report = new Object[l.size()][7];
int ii=0;
for (Iterator iter = l.iterator(); iter.hasNext();) {
Node node = (Node) iter.next();
//if (node.getParent()==null) // a root node - the dictionary name
// continue;
String entryPath = firstMap.getEntryPath(node);
report[ii][0] = entryPath;//.substring(entryPath.indexOf('>')+2, entryPath.length());
report[ii][1] = firstMap.getEntryCount(node);
report[ii][2] = firstMap.getSummedScore(node);
report[ii][3] = firstMap.getEntryProportion(node);
report[ii][4] = secondMap.getEntryCount(node);
report[ii][5] = secondMap.getSummedScore(node);
report[ii][6] = secondMap.getEntryProportion(node);
ii++;
}
return report;
}
public Class getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return Integer.class;
case 2:
return Double.class;
case 3:
return Double.class;
case 4:
return Integer.class;
case 5:
return Double.class;
case 6:
return Double.class;
default:
return Object.class;
}
}
public String getColumnName(int column) {
switch (column) {
case 0:
return "Entry";
case 1:
return "Count (1)";
case 2:
return "Score (1)";
case 3:
return "Prop. (1)";
case 4:
return "Count (2)";
case 5:
return "Score (2)";
case 6:
return "Prop. (2)";
default:
return "No title";
}
}
}