package edu.harvard.wcfia.yoshikoder;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.util.Iterator;
import javax.swing.tree.TreePath;
import edu.harvard.wcfia.yoshikoder.concordance.Concordance;
import edu.harvard.wcfia.yoshikoder.concordance.ConcordanceLine;
import edu.harvard.wcfia.yoshikoder.dictionary.CategoryNode;
import edu.harvard.wcfia.yoshikoder.dictionary.Node;
import edu.harvard.wcfia.yoshikoder.dictionary.YKDictionary;
import edu.harvard.wcfia.yoshikoder.document.YKDocument;
import edu.harvard.wcfia.yoshikoder.document.YKDocumentFactory;
import edu.harvard.wcfia.yoshikoder.document.tokenizer.Token;
import edu.harvard.wcfia.yoshikoder.document.tokenizer.TokenList;
import edu.harvard.wcfia.yoshikoder.document.tokenizer.TokenListImpl;
import edu.harvard.wcfia.yoshikoder.document.tokenizer.TokenizationException;
import edu.harvard.wcfia.yoshikoder.reporting.DictionaryFrequencyReport;
import edu.harvard.wcfia.yoshikoder.reporting.EntryFrequencyMap;
import edu.harvard.wcfia.yoshikoder.ui.dialog.YKDictionaryReportDialog;
import edu.harvard.wcfia.yoshikoder.util.DialogUtil;
import edu.harvard.wcfia.yoshikoder.util.TaskWorker;
public class ConcordanceFrequencyReportAction extends YoshikoderAction {
protected boolean onlyShowCats = true;
public ConcordanceFrequencyReportAction(Yoshikoder yk) {
super(yk, ConcordanceFrequencyReportAction.class.getName());
}
public void actionPerformed(ActionEvent e) {
final Concordance conc = yoshikoder.getConcordance();
if ((conc == null) || (conc.getLines().size()==0))
return;
Node n = yoshikoder.getSelectedNode();
CategoryNode cnode = null;
if (n instanceof CategoryNode)
cnode = (CategoryNode)n;
else // patternnode
cnode = (CategoryNode)n.getParent();
final CategoryNode catnode = cnode;
TaskWorker tworker = new TaskWorker(yoshikoder){
YKDictionaryReportDialog dia;
protected void doWork() throws Exception {
TokenList tlist = new TokenListImpl();
for (Iterator iter = conc.iterator(); iter.hasNext();) {
ConcordanceLine line = (ConcordanceLine) iter.next();
for (Iterator iterator = line.getLeftHandSide().iterator(); iterator
.hasNext();) {
Token token = (Token) iterator.next();
tlist.add(token);
}
for (Iterator iterator = line.getRightHandSide().iterator(); iterator
.hasNext();) {
Token token = (Token) iterator.next();
tlist.add(token);
}
}
EntryFrequencyMap efm = new EntryFrequencyMap(yoshikoder.getDictionary(), tlist);
YKDocument fake =
YKDocumentFactory.createDummyDocument("Concordance", "none", "UTF-8");
DictionaryFrequencyReport reportcatsonly =
new DictionaryFrequencyReport("Concordance Report",
catnode.getName() + " applied to current concordance",
yoshikoder.getDictionary().getName(),
fake, efm, false);
DictionaryFrequencyReport reportcatsandpats =
new DictionaryFrequencyReport("Concordance Report",
catnode.getName() + "applied to current concordance",
yoshikoder.getDictionary().getName(),
fake, efm, true);
dia = new YKDictionaryReportDialog(yoshikoder, reportcatsonly, reportcatsandpats, onlyShowCats);
}
protected void onSuccess() {
dia.setVisible(true);
onlyShowCats = !dia.getCurrentReport().getShowPatterns();
}
protected void onError() {
if (e instanceof TokenizationException){
DialogUtil.yelp(yoshikoder, "Tokenization Error", e);
} else if (e instanceof IOException){
DialogUtil.yelp(yoshikoder, "Input/Ouput Error", e);
} else {
DialogUtil.yelp(yoshikoder, "Error", e);
}
}
};
tworker.start();
}
}