package org.korsakow.ide.ui.controller.action;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collection;
import javax.swing.JFrame;
import org.dsrg.soenea.domain.MapperException;
import org.dsrg.soenea.domain.command.CommandException;
import org.korsakow.domain.CommandExecutor;
import org.korsakow.domain.command.CountSnuByInKeywordCommand;
import org.korsakow.domain.command.CountSnuByOutKeywordCommand;
import org.korsakow.domain.command.Request;
import org.korsakow.domain.interf.IKeyword;
import org.korsakow.domain.mapper.input.KeywordInputMapper;
import org.korsakow.ide.Application;
import org.korsakow.ide.lang.LanguageBundle;
import org.korsakow.ide.ui.components.keywordpool.KeywordPool;
import org.korsakow.ide.ui.components.keywordpool.KeywordPoolInOutListener;
import org.korsakow.ide.ui.components.keywordpool.KeywordPoolModel;
import org.korsakow.ide.ui.components.keywordpool.KeywordPoolUpdateListener;
import org.korsakow.services.tdg.SnuTDG;
public class ShowKeywordPoolWindowAction extends AbstractShowPoolWindowAction {
public void actionPerformed(ActionEvent event) {
Application app = Application.getInstance();
if (app.getKeywordPoolDialog() != null) {
app.getKeywordPoolDialog().toFront();
return;
}
KeywordPool pool = new KeywordPool();
ActionListener inoutListener = new KeywordPoolInOutListener(pool);
pool.addInActionListener(inoutListener);
pool.addOutActionListener(inoutListener);
pool.addItemActionListener(inoutListener);
Collection<IKeyword> keywords;
try {
keywords = KeywordInputMapper.findByObjectTypeRecursive( SnuTDG.NODE_NAME );
} catch (MapperException e) {
keywords = new ArrayList<IKeyword>();
Application.getInstance().showUnhandledErrorDialog( e );
}
KeywordPoolModel model = new KeywordPoolModel();
model.beginBatchUpdate();
try {
for (IKeyword keyword : keywords)
{
int inCount = CommandExecutor.executeCommand(CountSnuByInKeywordCommand.class, Request.single("keyword", keyword.getValue())).getInt("count");
int outCount = CommandExecutor.executeCommand(CountSnuByOutKeywordCommand.class, Request.single("keyword", keyword.getValue())).getInt("count");
model.add(keyword, inCount, outCount);
}
} catch (CommandException e) {
Application.getInstance().showUnhandledErrorDialog(e);
}
model.endBatchUpdate();
pool.setModel(model);
org.korsakow.ide.ui.components.keywordpool.ContentUpdater updater = new org.korsakow.ide.ui.components.keywordpool.ContentUpdater(pool);
pool.addActionListener(updater);
pool.addListSelectionListener(updater);
KeywordPoolUpdateListener updateListener = new KeywordPoolUpdateListener(pool);
Application.getInstance().addApplicationListener(updateListener);
pool.putClientProperty("applicationListener", updateListener); // tie lifetime to pool since applisteners are weak-refs
JFrame dialog = createPoolDialog(LanguageBundle.getString("keywordpool.window.title"), pool);
app.setKeywordPoolDialog(dialog, pool);
dialog.setLocation(app.getProjectExplorer().getX(), app.getProjectExplorer().getY()-dialog.getInsets().top);
dialog.setVisible(true);
}
}