package com.rzg.zombieland.cliente.interfaz; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.border.LineBorder; import org.jdeferred.DoneCallback; import com.rzg.zombieland.cliente.comunicacion.ServicioCliente; import com.rzg.zombieland.cliente.comunicacion.peticion.PeticionRegistro; import com.rzg.zombieland.cliente.meta.Estado; import com.rzg.zombieland.cliente.misc.RutaImagen; import com.rzg.zombieland.comunes.comunicacion.pojo.POJORegistro; import com.rzg.zombieland.comunes.comunicacion.respuesta.RespuestaGenerica; import com.rzg.zombieland.comunes.misc.ParametrosNoValidosException; import com.rzg.zombieland.comunes.misc.ZombielandException; /** * Interfaz de registro de usuario. * * @author Manuel */ public class InterfazRegistro extends JPanel { private static final long serialVersionUID = 3234547685088239182L; private final JTextField nombreDeUsuario = new JTextField(); private final JPasswordField password = new JPasswordField(); private JPasswordField verificacionPassword; private JTextField respuestaSeguridad; private JComboBox<String> preguntaSeguridad; private JLabel imagenCargando; /** * Create the application. */ public InterfazRegistro() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { setLayout(null); JButton btnRegistrar = new JButton("Registrar!"); btnRegistrar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { registrarJugador(); } }); btnRegistrar.setBounds(20, 387, 175, 40); add(btnRegistrar); JButton btnVolverAlInicio = new JButton("Volver al inicio de sesi\u00F3n"); btnVolverAlInicio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { Main.irA(Main.INICIO_SESION); } }); btnVolverAlInicio.setBounds(20, 473, 175, 40); add(btnVolverAlInicio); JLabel lblNombreDeUsuario = new JLabel("Nombre de usuario:"); lblNombreDeUsuario.setForeground(Color.LIGHT_GRAY); lblNombreDeUsuario.setFont(new Font("Tahoma", Font.PLAIN, 16)); lblNombreDeUsuario.setBounds(10, 40, 160, 30); add(lblNombreDeUsuario); ImageIcon icon = new ImageIcon(RutaImagen.get("imagenes/loading.gif")); imagenCargando = new JLabel(icon); imagenCargando.setText("Cargando..."); imagenCargando.setBounds(100, 387, 400, 40); imagenCargando.setVisible(false); add(imagenCargando); JLabel lblPassword = new JLabel("Password:"); lblPassword.setForeground(Color.LIGHT_GRAY); lblPassword.setFont(new Font("Tahoma", Font.PLAIN, 16)); lblPassword.setBounds(10, 80, 160, 30); add(lblPassword); JLabel lblConfirmaPassword = new JLabel("Confirma Password:"); lblConfirmaPassword.setForeground(Color.LIGHT_GRAY); lblConfirmaPassword.setFont(new Font("Tahoma", Font.PLAIN, 16)); lblConfirmaPassword.setBounds(10, 120, 160, 30); add(lblConfirmaPassword); JLabel lblPreguntaDeSeguridad = new JLabel("Pregunta de seguridad"); lblPreguntaDeSeguridad.setForeground(Color.LIGHT_GRAY); lblPreguntaDeSeguridad.setFont(new Font("Tahoma", Font.PLAIN, 16)); lblPreguntaDeSeguridad.setBounds(10, 160, 200, 30); add(lblPreguntaDeSeguridad); JLabel lblRespuestaDeSeguridad = new JLabel("Respuesta de seguridad:"); lblRespuestaDeSeguridad.setForeground(Color.LIGHT_GRAY); lblRespuestaDeSeguridad.setFont(new Font("Tahoma", Font.PLAIN, 16)); lblRespuestaDeSeguridad.setBounds(10, 200, 200, 30); add(lblRespuestaDeSeguridad); nombreDeUsuario.setBackground(Color.BLACK); nombreDeUsuario.setForeground(Color.WHITE); nombreDeUsuario.setColumns(10); nombreDeUsuario.setBorder(new LineBorder(new Color(51, 153, 51))); nombreDeUsuario.setFont(new Font("Tahoma", Font.PLAIN, 16)); nombreDeUsuario.setBounds(225, 40, 160, 30); add(nombreDeUsuario); password.setBorder(new LineBorder(new Color(51, 153, 51))); password.setForeground(Color.WHITE); password.setBackground(Color.BLACK); password.setFont(new Font("Tahoma", Font.PLAIN, 16)); password.setBounds(225, 80, 160, 30); add(password); verificacionPassword = new JPasswordField(); verificacionPassword.setForeground(Color.WHITE); verificacionPassword.setBackground(Color.BLACK); verificacionPassword.setBorder(new LineBorder(new Color(51, 153, 51))); verificacionPassword.setFont(new Font("Tahoma", Font.PLAIN, 16)); verificacionPassword.setBounds(225, 120, 160, 30); add(verificacionPassword); preguntaSeguridad = new JComboBox<String>(); preguntaSeguridad.setBorder(new LineBorder(new Color(51, 153, 51))); preguntaSeguridad.setForeground(Color.WHITE); preguntaSeguridad.setBackground(Color.BLACK); preguntaSeguridad.setModel(Estado.preguntas); preguntaSeguridad.setBounds(225, 160, 200, 30); add(preguntaSeguridad); respuestaSeguridad = new JTextField(); respuestaSeguridad.setBackground(Color.BLACK); respuestaSeguridad.setForeground(Color.WHITE); respuestaSeguridad.setColumns(10); respuestaSeguridad.setBorder(new LineBorder(new Color(51, 153, 51))); respuestaSeguridad.setFont(new Font("Tahoma", Font.PLAIN, 16)); respuestaSeguridad.setBounds(225, 200, 160, 30); add(respuestaSeguridad); JLabel lblRzg = new JLabel("RZG - 2015"); lblRzg.setForeground(SystemColor.controlShadow); lblRzg.setBounds(700, 515, 63, 14); add(lblRzg); JLabel lblFondo = new JLabel(""); lblFondo.setIcon(new ImageIcon(RutaImagen.get("imagenes/Fondos/fondo-reg-usuario.png"))); lblFondo.setBounds(0, 0, 800, 600); add(lblFondo); } /** * Registra a un jugador seg�n los datos dados. */ private void registrarJugador() { if (!Arrays.equals(password.getPassword(), verificacionPassword.getPassword())) { JOptionPane.showMessageDialog(getParent(), "Las claves no son iguales"); return; } EventQueue.invokeLater(new Runnable() { @Override public void run() { imagenCargando.setVisible(true); } }); new Thread() { @Override public void run() { try { POJORegistro pojoRegistro; pojoRegistro = new POJORegistro(nombreDeUsuario.getText(), new String( password.getPassword()), (String) preguntaSeguridad.getSelectedItem(), respuestaSeguridad.getText(), null); PeticionRegistro peticion = new PeticionRegistro(pojoRegistro); ServicioCliente.getInstancia().getHiloEscucha().enviarPeticion(peticion); peticion.getRespuesta().then(new DoneCallback<RespuestaGenerica>() { @Override public void onDone(RespuestaGenerica respuesta) { manejarRespuestaGenerica(respuesta); }; }); } catch (ParametrosNoValidosException e) { JOptionPane.showMessageDialog(getParent(), e.getMensaje(), "Registro Zombieland", JOptionPane.WARNING_MESSAGE); } catch (ZombielandException e) { JOptionPane.showMessageDialog(getParent(), e.getMessage(), "Registro Zombieland", JOptionPane.ERROR_MESSAGE); } }; }.start(); } /** * Maneja una respuesta de registro. * * @param registro */ private void manejarRespuestaGenerica(RespuestaGenerica registro) { EventQueue.invokeLater(new Runnable() { @Override public void run() { imagenCargando.setVisible(false); } }); if (registro.fuePeticionExitosa()) { JOptionPane.showMessageDialog(getParent(), "Registro exitoso", "Registro Zombieland", JOptionPane.INFORMATION_MESSAGE); Main.irA(Main.INICIO_SESION); return; } JOptionPane.showMessageDialog(getParent(), "No se pudo realizar el registro: " + registro.getMensajeError(), "Registro Zombieland", JOptionPane.INFORMATION_MESSAGE); } }