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.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import javax.swing.border.LineBorder; import org.jdeferred.DoneCallback; import com.rzg.zombieland.cliente.comunicacion.ServicioCliente; import com.rzg.zombieland.cliente.comunicacion.peticion.PeticionCambioDatosJugador; import com.rzg.zombieland.cliente.comunicacion.peticion.PeticionObtenerDatosJugador; 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.Avatar; import com.rzg.zombieland.comunes.misc.ParametrosNoValidosException; import com.rzg.zombieland.comunes.misc.ZombielandException; /** * @author Nicolas L * */ public class InterfazCambioDeDatosUsuario extends JFrame implements WindowListener { private static final long serialVersionUID = 7837393531603880737L; private JPanel contentPane; private JTextField textUsuario; private JTextField textRta; private ButtonGroup grupoBotones = new ButtonGroup(); private JPasswordField pass; private JPasswordField passVerificacion; private JComboBox <String> preguntaSeguridad; private JRadioButton rdbtnPJ1; private JRadioButton rdbtnPJ2; private JRadioButton rdbtnPJ3; private int avataresColocados; private List<String> spriteAvatares; private List<JRadioButton> botonesPantalla; /** * Create the frame. */ public InterfazCambioDeDatosUsuario() { avataresColocados = 0; setResizable(false); setTitle("Cambiar Datos De Usuario"); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setBounds(100, 100, 800, 600); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); addWindowListener(this); JLabel lblNombreDeUsuario = new JLabel("Nombre de Usuario:"); lblNombreDeUsuario.setForeground(Color.WHITE); lblNombreDeUsuario.setFont(new Font("Tahoma", Font.BOLD, 16)); lblNombreDeUsuario.setBounds(27, 62, 220, 22); contentPane.add(lblNombreDeUsuario); JLabel lblContrasea = new JLabel("Nueva Contrase\u00F1a:"); lblContrasea.setForeground(Color.WHITE); lblContrasea.setFont(new Font("Tahoma", Font.BOLD, 16)); lblContrasea.setBounds(27, 150, 220, 22); contentPane.add(lblContrasea); JLabel lblVerificacionDeContrasea = new JLabel( "Verificacion de Contrase\u00F1a:"); lblVerificacionDeContrasea.setForeground(Color.WHITE); lblVerificacionDeContrasea.setFont(new Font("Tahoma", Font.BOLD, 16)); lblVerificacionDeContrasea.setBounds(27, 183, 261, 22); contentPane.add(lblVerificacionDeContrasea); JLabel lblPreguntaDeSeguridad = new JLabel("Pregunta de Seguridad:"); lblPreguntaDeSeguridad.setForeground(Color.WHITE); lblPreguntaDeSeguridad.setFont(new Font("Tahoma", Font.BOLD, 16)); lblPreguntaDeSeguridad.setBounds(27, 272, 220, 22); contentPane.add(lblPreguntaDeSeguridad); JLabel lblRespuestaDeSeguridad = new JLabel("Respuesta de Seguridad:"); lblRespuestaDeSeguridad.setForeground(Color.WHITE); lblRespuestaDeSeguridad.setFont(new Font("Tahoma", Font.BOLD, 16)); lblRespuestaDeSeguridad.setBounds(27, 305, 220, 22); contentPane.add(lblRespuestaDeSeguridad); textUsuario = new JTextField(""); textUsuario.setHorizontalAlignment(SwingConstants.CENTER); textUsuario.setBorder(new LineBorder(Color.BLACK)); textUsuario.setForeground(Color.WHITE); textUsuario.setOpaque(false); textUsuario.setBounds(312, 65, 160, 20); contentPane.add(textUsuario); textUsuario.setColumns(10); pass = new JPasswordField(); pass.setBorder(new LineBorder(Color.BLACK)); pass.setForeground(Color.WHITE); pass.setOpaque(false); pass.setToolTipText(""); pass.setBounds(312, 153, 160, 20); contentPane.add(pass); // pass.setToolTipText("Mas de 4 digitos."); passVerificacion = new JPasswordField(""); passVerificacion.setBorder(new LineBorder(Color.BLACK)); passVerificacion.setForeground(Color.WHITE); passVerificacion.setOpaque(false); passVerificacion.setBounds(313, 186, 159, 20); contentPane.add(passVerificacion); 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(312, 275, 225, 20); getContentPane().add(preguntaSeguridad); textRta = new JTextField(""); textRta.setHorizontalAlignment(SwingConstants.CENTER); textRta.setBorder(new LineBorder(Color.BLACK)); textRta.setForeground(Color.WHITE); textRta.setOpaque(false); textRta.setBounds(312, 306, 160, 20); contentPane.add(textRta); textRta.setColumns(10); JButton btnModificar = new JButton("Modificar Datos"); btnModificar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { modificarDatos(); } }); btnModificar.setBounds(62, 456, 175, 40); contentPane.add(btnModificar); JButton btnCancelar = new JButton("Cancelar"); btnCancelar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { dispose(); } }); btnCancelar.setBounds(548, 456, 175, 40); contentPane.add(btnCancelar); JLabel lblSeleccionAvatar = new JLabel("Seleccione Avatar:"); lblSeleccionAvatar.setForeground(Color.WHITE); lblSeleccionAvatar.setFont(new Font("Tahoma", Font.BOLD, 16)); lblSeleccionAvatar.setBounds(554, 22, 220, 22); contentPane.add(lblSeleccionAvatar); spriteAvatares = new ArrayList<String>(); botonesPantalla = new ArrayList<JRadioButton>(); for(Avatar avatar : Avatar.values()) { if(avatar.esPersonaje()) spriteAvatares.add(avatar.getSprite()); } JLabel lblAvatar1 = new JLabel(""); colocarAvatar(lblAvatar1); lblAvatar1.setBounds(695, 76, 79, 80); contentPane.add(lblAvatar1); rdbtnPJ1 = new JRadioButton(""); rdbtnPJ1.setOpaque(false); rdbtnPJ1.setBounds(630, 97, 67, 54); contentPane.add(rdbtnPJ1); botonesPantalla.add(rdbtnPJ1); JLabel lblAvatar2 = new JLabel(""); colocarAvatar(lblAvatar2); lblAvatar2.setBounds(695, 194, 73, 94); contentPane.add(lblAvatar2); rdbtnPJ2 = new JRadioButton(""); rdbtnPJ2.setOpaque(false); rdbtnPJ2.setBounds(630, 220, 67, 54); contentPane.add(rdbtnPJ2); botonesPantalla.add(rdbtnPJ2); JLabel lblAvatar3 = new JLabel(""); colocarAvatar(lblAvatar3); lblAvatar3.setBounds(695, 341, 73, 74); contentPane.add(lblAvatar3); rdbtnPJ3 = new JRadioButton(""); rdbtnPJ3.setOpaque(false); rdbtnPJ3.setBounds(630, 357, 67, 54); contentPane.add(rdbtnPJ3); botonesPantalla.add(rdbtnPJ3); // Agrego los rdbtn al grupo de botones, para que solo se pueda // seleccionar uno. grupoBotones.add(rdbtnPJ1); grupoBotones.add(rdbtnPJ2); grupoBotones.add(rdbtnPJ3); JLabel label_1 = new JLabel("RZG - 2015"); label_1.setForeground(SystemColor.textInactiveText); label_1.setBounds(700, 515, 63, 14); contentPane.add(label_1); JLabel lblFondo = new JLabel(""); lblFondo.setBounds(-500, 0, 1300, 600); lblFondo.setIcon(new ImageIcon(RutaImagen.get("imagenes/Fondos/fondo-cambio-datos.png"))); getContentPane().add(lblFondo); } /** * El metodo va a colocar en el label la imagen del avatar que corresponda. * @param lblAvatar * @param spriteAvatares * @param indice */ private void colocarAvatar(JLabel lblAvatar) { if(avataresColocados < spriteAvatares.size()) { lblAvatar.setIcon(new ImageIcon(RutaImagen.get("imagenes/Avatares/" + spriteAvatares.get(avataresColocados)))); this.avataresColocados++; } } @Override public void windowActivated(WindowEvent arg0) { try { PeticionObtenerDatosJugador peticion = new PeticionObtenerDatosJugador(); ServicioCliente.getInstancia().getHiloEscucha().enviarPeticion(peticion); peticion.getRespuesta().then(new DoneCallback<POJORegistro> () { @Override public void onDone(POJORegistro datos){ textUsuario.setText(datos.getNombre()); pass.setText(datos.getClave()); passVerificacion.setText(datos.getClave()); int indice = 0; boolean encontro = false; while(!encontro && indice < preguntaSeguridad.getItemCount()) { if(datos.getPreguntaSecreta(). equals(preguntaSeguridad.getItemAt(indice))) encontro = true; else indice++; } preguntaSeguridad.setSelectedIndex(indice); textRta.setText(datos.getRespuestaSecreta()); int indiceBoton = spriteAvatares.indexOf(datos.getAvatarJugador().getSprite()); botonesPantalla.get(indiceBoton).setSelected(true); } }); } catch (ZombielandException e1) { } } @Override public void windowClosed(WindowEvent e) { textUsuario.setText(""); pass.setText(""); passVerificacion.setText(""); preguntaSeguridad.setSelectedIndex(-1); textRta.setText(""); } @Override public void windowClosing(WindowEvent e) { } @Override public void windowDeactivated(WindowEvent e) { } @Override public void windowDeiconified(WindowEvent e) { } @Override public void windowIconified(WindowEvent e) { } @Override public void windowOpened(WindowEvent e) { } private void modificarDatos() { if(!Arrays.equals(pass.getPassword(), passVerificacion.getPassword())) { JOptionPane.showMessageDialog(getParent(), "Las claves no son iguales"); return; } try { int indice = 0; for(JRadioButton boton : botonesPantalla) { if(boton.isSelected()) break; else indice++; } Avatar avatar = null; for(Avatar av : Avatar.values()) { if(av.getSprite().equals(spriteAvatares.get(indice))) { avatar = av; break; } } POJORegistro pojoRegistro; pojoRegistro = new POJORegistro (textUsuario.getText(), new String(pass.getPassword()), (String) preguntaSeguridad.getSelectedItem(), textRta.getText(), avatar); PeticionCambioDatosJugador peticion = new PeticionCambioDatosJugador(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(), "Cambio de datos de Usuario", JOptionPane.WARNING_MESSAGE); } catch(ZombielandException e2) { JOptionPane.showMessageDialog(getParent(), e2.getMessage(), "Cambio de datos de Usuario", JOptionPane.ERROR_MESSAGE); } } /** * Maneja la respuesta de cambio de datos * @param respuesta */ private void manejarRespuestaGenerica(RespuestaGenerica respuesta) { if(respuesta.fuePeticionExitosa()) { JOptionPane.showMessageDialog(this, "Cambio de datos exitoso", "Cambio de datos de Usuario", JOptionPane.INFORMATION_MESSAGE); EventQueue.invokeLater(new Runnable() { @Override public void run() { dispose(); } }); return; } JOptionPane.showMessageDialog(getParent(), "No se pudo realizar el cambio de datos: " + respuesta.getMensajeError(), "Cambio de datos de Usuario", JOptionPane.INFORMATION_MESSAGE); } }