package net.codjo.dataprocess.gui.util.sqleditor;
import net.codjo.dataprocess.common.eventsbinder.EventsBinder;
import net.codjo.dataprocess.gui.util.ErrorDialog;
import net.codjo.dataprocess.gui.util.sqleditor.util.SqlEditorClientHelper;
import net.codjo.gui.toolkit.util.GuiUtil;
import net.codjo.mad.gui.framework.AbstractGuiAction;
import net.codjo.mad.gui.framework.GuiContext;
import java.awt.event.ActionEvent;
import java.beans.PropertyVetoException;
import javax.swing.JInternalFrame;
import javax.swing.UIManager;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import org.apache.log4j.Logger;
/**
*
*/
public class SqlEditorAction extends AbstractGuiAction {
private static final Logger LOG = Logger.getLogger(SqlEditorAction.class);
private CleanUpListener cleanUpListener = new CleanUpListener();
private JInternalFrame frame;
private boolean centerWindow;
public SqlEditorAction(GuiContext ctxt) {
super(ctxt, "Editeur SQL", "Editeur SQL");
}
public void actionPerformed(ActionEvent event) {
if (frame == null) {
displayNewWindow();
}
else {
try {
frame.setSelected(true);
}
catch (PropertyVetoException ex) {
LOG.error(ex);
}
}
}
private void displayNewWindow() {
try {
EventsBinder eventsBinder = new EventsBinder();
SqlEditorDetailWindowLogic logic =
new SqlEditorDetailWindowLogic(eventsBinder, new SqlEditorClientHelper(getGuiContext()));
frame = logic.getGui();
frame.addInternalFrameListener(cleanUpListener);
getDesktopPane().add(frame);
frame.setFrameIcon(UIManager.getIcon("icon"));
if (centerWindow) {
GuiUtil.centerWindow(frame);
}
frame.setVisible(true);
frame.setSelected(true);
}
catch (Exception ex) {
LOG.error(ex);
ErrorDialog.show(getDesktopPane(), "Impossible d'afficher l'IHM", ex);
}
}
public JInternalFrame getFrame() {
return frame;
}
protected void setCenterWindow(boolean centerWindow) {
this.centerWindow = centerWindow;
}
private class CleanUpListener extends InternalFrameAdapter {
@Override
public void internalFrameClosed(InternalFrameEvent event) {
event.getInternalFrame().removeInternalFrameListener(this);
frame = null;
}
@Override
public void internalFrameClosing(InternalFrameEvent event) {
event.getInternalFrame().removeInternalFrameListener(this);
frame = null;
}
}
}