/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.control.gui.plugin; import java.awt.event.ActionEvent; import java.beans.PropertyVetoException; import javax.swing.JInternalFrame; import javax.swing.event.InternalFrameAdapter; import javax.swing.event.InternalFrameEvent; import net.codjo.agent.UserId; import net.codjo.control.gui.data.QuarantineGuiData; import net.codjo.gui.toolkit.util.ErrorDialog; import net.codjo.i18n.common.TranslationManager; import net.codjo.i18n.gui.TranslationNotifier; import net.codjo.mad.gui.framework.AbstractGuiAction; import net.codjo.mad.gui.framework.GuiContext; import net.codjo.mad.gui.i18n.InternationalizationUtil; import net.codjo.mad.gui.request.ListDataSource; class DefaultQuarantineAction extends AbstractGuiAction { private CleanUpListener cleanUpListener = new CleanUpListener(); private JInternalFrame frame; private QuarantineGuiData guiData; private final UserId userId; DefaultQuarantineAction(GuiContext ctxt, QuarantineGuiData guiData, UserId userId) { super(ctxt, guiData.getName(), guiData.getTooltip(), guiData.getIcon()); this.guiData = guiData; this.userId = userId; } public void actionPerformed(ActionEvent event) { if (frame == null) { displayNewWindow(); } else { try { frame.setSelected(true); } catch (PropertyVetoException ex) { ; // pas grave } } } private void displayNewWindow() { try { frame = new DefaultQuarantineWindow(getGuiContext(), guiData, userId, new ListDataSource()); frame.addInternalFrameListener(cleanUpListener); getDesktopPane().add(frame); frame.pack(); frame.setVisible(true); frame.setSelected(true); } catch (Exception ex) { ErrorDialog.show(getDesktopPane(), "Impossible d'afficher la liste", ex); } } private class CleanUpListener extends InternalFrameAdapter { @Override public void internalFrameActivated(InternalFrameEvent event) { } @Override public void internalFrameClosed(InternalFrameEvent event) { event.getInternalFrame().removeInternalFrameListener(this); frame = null; } @Override public void internalFrameClosing(InternalFrameEvent event) { event.getInternalFrame().removeInternalFrameListener(this); frame = null; } } }