package org.korsakow.ide.ui.controller.action;
import java.awt.event.ActionEvent;
import java.util.Collection;
import java.util.Collections;
import javax.swing.JFrame;
import org.dsrg.soenea.domain.MapperException;
import org.korsakow.domain.interf.ISnu;
import org.korsakow.domain.mapper.input.SnuInputMapper;
import org.korsakow.ide.Application;
import org.korsakow.ide.lang.LanguageBundle;
import org.korsakow.ide.ui.components.linkpool.LinkPool;
import org.korsakow.ide.ui.components.linkpool.LinkPoolModel;
import org.korsakow.ide.ui.components.linkpool.LinkPoolUpdateListener;
import org.korsakow.ide.ui.components.linkpool.SnuHeaderEntry;
public class ShowLinkPoolWindowAction extends AbstractShowPoolWindowAction {
public void actionPerformed(ActionEvent e) {
Application app = Application.getInstance();
if (app.getLinkPoolDialog() != null) {
app.getLinkPoolDialog().toFront();
return;
}
Collection<ISnu> snus;
try {
snus = SnuInputMapper.findAll();
} catch (MapperException e1) {
Application.getInstance().showUnhandledErrorDialog(e1);
snus = Collections.EMPTY_LIST;
}
LinkPoolModel model = new LinkPoolModel();
model.beginBatchUpdate();
for (ISnu snu : snus)
{
model.add(new SnuHeaderEntry(snu.getId(), snu.getName()));
}
model.endBatchUpdate();
LinkPool pool = new LinkPool();
pool.setModel(model);
org.korsakow.ide.ui.components.linkpool.ContentUpdater updater = new org.korsakow.ide.ui.components.linkpool.ContentUpdater(pool);
pool.addActionListener(updater);
pool.addListSelectionListener(updater);
LinkPoolUpdateListener updateListener = new LinkPoolUpdateListener(pool);
Application.getInstance().addApplicationListener(updateListener);
pool.putClientProperty("applicationListener", updateListener); // tie lifetime to pool since applisteners are weak-refs
JFrame dialog = createPoolDialog(LanguageBundle.getString("linkpool.window.title"), pool);
app.setLinkPoolDialog(dialog, pool);
dialog.setLocation(app.getProjectExplorer().getX()+400, app.getProjectExplorer().getY()-dialog.getInsets().top);
dialog.setVisible(true);
}
}