package practica1.actions;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
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.manejoExperimento.ExperimentoInvalidoException;
import practica1.manejoExperimento.ManejoExperimento;
/**
* Clase que implementa la acción para abrir un experimento
* @author Miguel González - Ceura
*/
public class ActionAbrir extends AbstractAction implements LanguageListener {
/**
* Constructor de la clase
*/
public ActionAbrir() {
super(Language.getI().getP("ABRIR"), null);
Language.getI().addLanguageListener(this);
putValue(SHORT_DESCRIPTION, Language.getI().getP("ABRIR_EXPERIMENTO"));
putValue(NAME, Language.getI().getP("ABRIR"));
//Estableces la acción en respuesta a CTRL + SHIFT + A
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_A,
InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
//Establece el nemonico del action a A
putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_A));
//Se establece el estado seleccionado del action
putValue(SELECTED_KEY, Boolean.TRUE);
}
/**
* Cuando sucede la acción nos encargamos de preguntar que experimento
* se quiere abrir y lo cargamos en el modelo de la práctica
* @param e ActionEvent Evento producido
*/
@Override
public void actionPerformed(ActionEvent e) {
//PanelExperimentos motorExperimentos = PanelExperimentos.getInstance();
JFileChooser fcAbrir = new JFileChooser();
int res = fcAbrir.showDialog(Practica1.getInstance(),
Language.getI().getP("ABRIR_EXPERIMENTO"));
if(res == JFileChooser.APPROVE_OPTION) {
File fichAbrir = fcAbrir.getSelectedFile();
if(Controller.getInstance().isExperimentoAbierto(fichAbrir)) {
JOptionPane.showMessageDialog(Practica1.getInstance(),
Language.getI().getP("EXPERIMENTO_YA_ABIERTO"),
Language.getI().getP("ADVERTENCIA"),
JOptionPane.WARNING_MESSAGE);
} else {
try {
LogicExperimento expAbierto =
ManejoExperimento.abrirExperimento(fichAbrir);
Controller.getInstance().addExperimento(expAbierto);
} catch (ExperimentoInvalidoException ex) {
JOptionPane.showMessageDialog(Practica1.getInstance(),
Language.getI().getP("EXPERIMENTO_FORMATO_INVALIDO"),
Language.getI().getP("ADVERTENCIA"),
JOptionPane.WARNING_MESSAGE);
Practica1.log.error(Language.getI().getP("ERROR"), ex);
}
}
}
}
/**
* 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("ABRIR_EXPERIMENTO"));
putValue(NAME, Language.getI().getP("ABRIR"));
}
}