package practica1.actions;
import java.awt.event.ActionEvent;
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.ui.simulacion.ThreadSimulacion;
import practica1.util.Utils;
/**
*
* @author Miguel González - Ceura
*/
public class ActionSimularPoblaciones extends AbstractAction implements LanguageListener {
private LogicExperimento experimento;
/**
* Constructor de la clase
*/
public ActionSimularPoblaciones() {
super(Language.getI().getP("SIMULAR_POBLACIONES"), null);
experimento = null;
putValue(SHORT_DESCRIPTION, Language.getI().getP("SIMULAR_POBLACIONES"));
putValue(NAME, Language.getI().getP("SIMULAR_POBLACIONES"));
putValue(SELECTED_KEY, Boolean.TRUE);
initIdiomaListener();
}
private void initIdiomaListener() {
Language.getI().addLanguageListener(this);
}
/**
* Constructor de la clase que asocia la acción a un experimento
* @param experimento LogicExperimento Experimento al que se asocia la acción
*/
public ActionSimularPoblaciones(LogicExperimento experimento) {
super(Language.getI().getP("SIMULAR_POBLACIONES"), null);
this.experimento = experimento;
putValue(SHORT_DESCRIPTION, Language.getI().getP("NUEVA_POBLACION"));
putValue(NAME, Language.getI().getP("NUEVA_POBLACION"));
putValue(SELECTED_KEY, Boolean.TRUE);
initIdiomaListener();
}
/**
* Cuando sucede la acción nos encargamos de crear una nueva población
* al experimento seleccionado, o bien si la acción está asociada directamente
* al experimento
* @param e ActionEvent Evento prtoducido
*/
@Override
public void actionPerformed(ActionEvent e) {
LogicExperimento ex;
if(experimento != null) {
ex = experimento;
} else {
ex = Controller.getInstance().getExperimentoSeleccionado();
}
String ladoPlato = JOptionPane.showInputDialog(
Practica1.getInstance(),
Language.getI().getP("LADO_PLATO"),
Language.getI().getP(
"SIMULACION"),
JOptionPane.QUESTION_MESSAGE);
if(Utils.esNumero(ladoPlato)) {
for(LogicPoblacion poblacion : ex.getPoblaciones()) {
if(!poblacion.isSimulando()) {
ThreadSimulacion threadSimulacion =
new ThreadSimulacion(poblacion,
Integer.parseInt(ladoPlato));
threadSimulacion.addCalculosSimulacionListener(
poblacion.getSimulacionBacterias());
threadSimulacion.start();
}
}
} else {
JOptionPane.showMessageDialog(
Practica1.getInstance(),
Language.getI().getP("INTRODUCE_NUMERO_VALIDO"));
}
}
/**
* 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("SIMULAR_POBLACIONES"));
putValue(NAME, Language.getI().getP("SIMULAR_POBLACIONES"));
}
}