package edu.harvard.wcfia.yoshikoder;
import java.awt.event.ActionEvent;
import java.io.IOException;
import edu.harvard.wcfia.yoshikoder.document.YKDocument;
import edu.harvard.wcfia.yoshikoder.document.tokenizer.TokenList;
import edu.harvard.wcfia.yoshikoder.document.tokenizer.TokenizationCache;
import edu.harvard.wcfia.yoshikoder.document.tokenizer.TokenizationException;
import edu.harvard.wcfia.yoshikoder.document.tokenizer.TokenizationService;
import edu.harvard.wcfia.yoshikoder.reporting.DocumentFrequencyReport;
import edu.harvard.wcfia.yoshikoder.reporting.WordFrequencyMap;
import edu.harvard.wcfia.yoshikoder.ui.dialog.YKReportDialog;
import edu.harvard.wcfia.yoshikoder.util.DialogUtil;
import edu.harvard.wcfia.yoshikoder.util.DialogWorker;
public class SingleDocumentWordFrequencyReportAction extends YoshikoderAction {
public SingleDocumentWordFrequencyReportAction(Yoshikoder yk) {
super(yk, SingleDocumentWordFrequencyReportAction.class.getName());
}
public void actionPerformed(ActionEvent e) {
final YKDocument doc = yoshikoder.getSelectedDocument();
if (doc == null) return;
dworker = new DialogWorker(yoshikoder){
protected void doWork() throws Exception {
TokenizationCache tcache = yoshikoder.getTokenizationCache();
TokenList tl = tcache.getTokenList(doc);
if (tl == null){
tl = TokenizationService.getTokenizationService().tokenize(doc);
tcache.putTokenList(doc, tl);
}
WordFrequencyMap map = new WordFrequencyMap(tl);
DocumentFrequencyReport report =
new DocumentFrequencyReport("Word Frequency Report",
"Frequencies of each word in " + doc.getTitle(),
yoshikoder.getDictionary().getName(),
doc, map);
dia = new YKReportDialog(yoshikoder, report);
}
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);
}
}
};
dworker.start();
}
}