package edu.harvard.wcfia.yoshikoder; import java.awt.event.ActionEvent; import java.io.IOException; import java.util.logging.Logger; import edu.harvard.wcfia.yoshikoder.dictionary.CategoryNode; import edu.harvard.wcfia.yoshikoder.dictionary.Node; 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.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 SingleDocumentDictionaryReportAction extends YoshikoderAction { private static Logger log = Logger.getLogger(DictionaryFrequencyReport.class.getName()); protected boolean onlyShowCats = true; public SingleDocumentDictionaryReportAction(Yoshikoder yk) { super(yk, SingleDocumentDictionaryReportAction.class.getName()); } public void actionPerformed(ActionEvent e) { final YKDocument doc = yoshikoder.getSelectedDocument(); if (doc == null) 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 { TokenizationCache tcache = yoshikoder.getTokenizationCache(); TokenList tl = tcache.getTokenList(doc); if (tl == null){ tl = TokenizationService.getTokenizationService().tokenize(doc); tcache.putTokenList(doc, tl); } EntryFrequencyMap efm = new EntryFrequencyMap(catnode, tl); DictionaryFrequencyReport catsAndPats = new DictionaryFrequencyReport("Dictionary Entry Frequencies", "Frequencies of each dictionary entry in " + doc.getTitle(), yoshikoder.getDictionary().getName(), doc, efm, true); DictionaryFrequencyReport catsOnly = new DictionaryFrequencyReport("Dictionary Entry Frequencies", "Frequencies of each dictionary entry in " + doc.getTitle(), yoshikoder.getDictionary().getName(), doc, efm, false); dia = new YKDictionaryReportDialog(yoshikoder, catsOnly, catsAndPats, onlyShowCats); } protected void onSuccess() { dia.setVisible(true); // why is this called without the dialog returning onlyShowCats = !dia.getCurrentReport().getShowPatterns(); log.info("now closed dialog said that the cats only flag was set when it last looked? " + onlyShowCats); } 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(); } }