package practica1.actions;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import practica1.Practica1;
import practica1.controller.Controller;
import practica1.language.Language;
import practica1.language.LanguageEvent;
import practica1.language.LanguageListener;
import practica1.logic.LogicExperimento;
import practica1.logic.LogicPoblacion;
import practica1.manejoExperimento.ManejoExperimento;
/**
* Clase que implementa la acción para cerrar un experimento
* @author Miguel González - Ceura
*/
public class ActionCerrar extends AbstractAction implements LanguageListener {
/**
* Constructor de la clase
*/
public ActionCerrar() {
super(Language.getI().getP("CERRAR"), null);
putValue(SHORT_DESCRIPTION, Language.getI().getP("CERRAR_EXPERIMENTO"));
putValue(NAME, Language.getI().getP("CERRAR"));
putValue(SELECTED_KEY, Boolean.TRUE);
initIdiomaListener();
}
private void initIdiomaListener() {
Language.getI().addLanguageListener(this);
}
/**
* Cuando sucede la acción nos encargamos de cerrar el experimento seleccionado
* @param e ActionEvent Evento producido
*/
@Override
public void actionPerformed(ActionEvent e) {
LogicExperimento exp = Controller.getInstance().
getExperimentoSeleccionado();
ArrayList<LogicPoblacion> poblacionesSinGuardar = new
ArrayList<LogicPoblacion>();
if(!exp.isModified()) {
ArrayList<LogicPoblacion> poblaciones = exp.getPoblaciones();
for(int i=0; i< poblaciones.size(); i++) {
if(poblaciones.get(i).isModified()) {
poblacionesSinGuardar.add(poblaciones.get(i));
}
}
}
if(exp.isModified() || !poblacionesSinGuardar.isEmpty()) {
int res = JOptionPane.showConfirmDialog(Practica1.getInstance(),
Language.getI().getP("DESEA_GUARDAR_EXPERIMENTO")
, Language.getI().getP("CERRAR"),
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if(res == JOptionPane.OK_OPTION) {
ManejoExperimento.guardarExperimento(exp);
Controller.getInstance().removeExperimento(exp);
} else if(res == JOptionPane.NO_OPTION) {
Controller.getInstance().removeExperimento(exp);
}
} else {
Controller.getInstance().removeExperimento(exp);
}
}
/**
* Al cambiar el idioma actualizamos el nombre y la descripción
* @param evt LanguageEvent
*/
@Override
public void idiomaChange(LanguageEvent evt) {
putValue(SHORT_DESCRIPTION, Language.getI().getP("CERRAR_EXPERIMENTO"));
putValue(NAME, Language.getI().getP("CERRAR"));
}
}