--- /dev/null
+package gui;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+
+import businessLogic.BLFacade;
+import domain.RegularUser;
+import domain.User;
+import javax.swing.ImageIcon;
+import java.awt.SystemColor;
+
+public class RegisterGUI extends JFrame {
+ private JLabel lblNombre;
+ private JLabel lblApellidos;
+ private JLabel lblFechaNacimiento;
+ private JLabel lblEmail;
+ private JLabel lblCuentaBancaria;
+ private JLabel lblTelfono;
+ private JLabel lblDireccin;
+ private JTextField textUser;
+ private JTextField textName;
+ private JTextField textLastName;
+ private JTextField textBirth;
+ private JTextField textEmail;
+ private JTextField textBank;
+ private JTextField textPhoneNumber;
+ private JTextField textAddress;
+ private JPasswordField textPass;
+ private static BLFacade facade = LoginGUI.getBusinessLogic();
+ private static User user;
+ JButton buttonRegistrarse = new JButton("Registrarse");
+ private JButton btnAtras;
+ private JLabel lblInfoNombre;
+ private JLabel lblInfoNombre_1;
+ private JLabel lblIcono2;
+ private JLabel lblInfoDir;
+
+ public RegisterGUI() {
+ getContentPane().setBackground(Color.WHITE);
+ try {
+ initialize();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void setBusinessLogic(BLFacade pfacade) {
+ facade = pfacade;
+ }
+
+ public static BLFacade getBusinessLogic() {
+ return facade;
+ }
+
+ public void initialize() throws ParseException {
+ setTitle("Registro");
+ getContentPane().setLayout(null);
+ setBounds(100, 100, 763, 450);
+ setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+
+ JLabel lblUser = new JLabel("Usuario:");
+ lblUser.setBounds(5, 55, 100, 14);
+ lblUser.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ lblUser.setHorizontalAlignment(SwingConstants.RIGHT);
+ getContentPane().add(lblUser);
+
+ JLabel lblUser_1 = new JLabel("Contraseña:");
+ lblUser_1.setBounds(5, 84, 100, 14);
+ lblUser_1.setHorizontalAlignment(SwingConstants.RIGHT);
+ lblUser_1.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ getContentPane().add(lblUser_1);
+
+ lblNombre = new JLabel("Nombre:");
+ lblNombre.setBounds(285, 56, 100, 14);
+ lblNombre.setHorizontalAlignment(SwingConstants.RIGHT);
+ lblNombre.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ getContentPane().add(lblNombre);
+
+ lblApellidos = new JLabel("Apellidos:");
+ lblApellidos.setBounds(285, 96, 100, 14);
+ lblApellidos.setHorizontalAlignment(SwingConstants.RIGHT);
+ lblApellidos.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ getContentPane().add(lblApellidos);
+
+ lblFechaNacimiento = new JLabel("Fecha nacimiento:");
+ lblFechaNacimiento.setBounds(268, 133, 117, 14);
+ lblFechaNacimiento.setHorizontalAlignment(SwingConstants.RIGHT);
+ lblFechaNacimiento.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ getContentPane().add(lblFechaNacimiento);
+
+ lblEmail = new JLabel("Email:");
+ lblEmail.setBounds(285, 173, 100, 14);
+ lblEmail.setHorizontalAlignment(SwingConstants.RIGHT);
+ lblEmail.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ getContentPane().add(lblEmail);
+
+ lblCuentaBancaria = new JLabel("Cuenta bancaria:");
+ lblCuentaBancaria.setBounds(285, 213, 100, 14);
+ lblCuentaBancaria.setHorizontalAlignment(SwingConstants.RIGHT);
+ lblCuentaBancaria.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ getContentPane().add(lblCuentaBancaria);
+
+ lblTelfono = new JLabel("Teléfono:");
+ lblTelfono.setBounds(285, 252, 100, 14);
+ lblTelfono.setHorizontalAlignment(SwingConstants.RIGHT);
+ lblTelfono.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ getContentPane().add(lblTelfono);
+
+ lblDireccin = new JLabel("Dirección:");
+ lblDireccin.setBounds(285, 292, 100, 14);
+ lblDireccin.setHorizontalAlignment(SwingConstants.RIGHT);
+ lblDireccin.setFont(new Font("Tahoma", Font.PLAIN, 13));
+ getContentPane().add(lblDireccin);
+
+ textUser = new JTextField();
+ textUser.setBounds(115, 51, 131, 20);
+ textUser.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textUser.setColumns(10);
+ getContentPane().add(textUser);
+
+ textName = new JTextField();
+ textName.setBounds(395, 55, 131, 20);
+ textName.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textName.setColumns(10);
+ getContentPane().add(textName);
+
+ textLastName = new JTextField();
+ textLastName.setBounds(395, 95, 131, 20);
+ textLastName.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textLastName.setColumns(10);
+ getContentPane().add(textLastName);
+
+ textBirth = new JTextField();
+ textBirth.setBounds(395, 132, 131, 20);
+ textBirth.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textBirth.setColumns(10);
+ getContentPane().add(textBirth);
+
+ textEmail = new JTextField();
+ textEmail.setBounds(395, 172, 159, 20);
+ textEmail.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textEmail.setColumns(10);
+ getContentPane().add(textEmail);
+
+ textBank = new JTextField();
+ textBank.setBounds(395, 212, 153, 20);
+ textBank.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textBank.setColumns(10);
+ getContentPane().add(textBank);
+
+ textPhoneNumber = new JTextField();
+ textPhoneNumber.setBounds(395, 251, 131, 20);
+ textPhoneNumber.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textPhoneNumber.setColumns(10);
+ getContentPane().add(textPhoneNumber);
+
+ textAddress = new JTextField();
+ textAddress.setBounds(395, 291, 227, 20);
+ textAddress.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textAddress.setColumns(10);
+ getContentPane().add(textAddress);
+
+ textPass = new JPasswordField();
+ textPass.setBounds(115, 82, 131, 19);
+ textPass.setFont(new Font("Liberation Sans", Font.PLAIN, 13));
+ textPass.setColumns(10);
+ getContentPane().add(textPass);
+ buttonRegistrarse.setForeground(Color.WHITE);
+ buttonRegistrarse.setBackground(SystemColor.textHighlight);
+ buttonRegistrarse.setFont(new Font("Dialog", Font.BOLD, 14));
+
+ buttonRegistrarse.setBounds(440, 348, 140, 23);
+ getContentPane().add(buttonRegistrarse);
+
+ JLabel lblNewLabel = new JLabel("dd/mm/aaaa");
+ lblNewLabel.setForeground(Color.GRAY);
+ lblNewLabel.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 11));
+ lblNewLabel.setBounds(530, 132, 79, 16);
+ getContentPane().add(lblNewLabel);
+
+ JLabel lblEsxxXxxxXxxx = new JLabel("ESXX XXXX XXXX XXXX ");
+ lblEsxxXxxxXxxx.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 11));
+ lblEsxxXxxxXxxx.setForeground(Color.GRAY);
+ lblEsxxXxxxXxxx.setBounds(553, 212, 146, 16);
+ getContentPane().add(lblEsxxXxxxXxxx);
+
+ JLabel lblXxxxxxxxx = new JLabel("(+34) XXXXXXXXX");
+ lblXxxxxxxxx.setForeground(Color.GRAY);
+ lblXxxxxxxxx.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 11));
+ lblXxxxxxxxx.setBounds(530, 251, 146, 16);
+ getContentPane().add(lblXxxxxxxxx);
+
+ JLabel lblAlMenos = new JLabel("Al menos:");
+ lblAlMenos.setForeground(Color.GRAY);
+ lblAlMenos.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 12));
+
+ lblAlMenos.setBounds(81, 113, 146, 16);
+ getContentPane().add(lblAlMenos);
+
+ JLabel lblCaracteres = new JLabel("8 caracteres");
+ lblCaracteres.setForeground(Color.GRAY);
+ lblCaracteres.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 10));
+
+ lblCaracteres.setBounds(101, 133, 146, 16);
+ getContentPane().add(lblCaracteres);
+
+ JLabel lblUnaMayscula = new JLabel("Una mayúscula");
+ lblUnaMayscula.setForeground(Color.GRAY);
+ lblUnaMayscula.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 10));
+
+ lblUnaMayscula.setBounds(101, 152, 146, 16);
+ getContentPane().add(lblUnaMayscula);
+
+ JLabel lblUnaMin = new JLabel("Una minúscula");
+ lblUnaMin.setForeground(Color.GRAY);
+ lblUnaMin.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 10));
+
+ // lblUnaMin.setFont(new Font("Dialog", Font.BOLD, 10));
+ lblUnaMin.setBounds(102, 171, 146, 16);
+ getContentPane().add(lblUnaMin);
+
+ JLabel lblUnNmero = new JLabel("Un número");
+ lblUnNmero.setForeground(Color.GRAY);
+ lblUnNmero.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 10));
+
+ // lblUnNmero.setFont(new Font("Dialog", Font.BOLD, 10));
+ lblUnNmero.setBounds(101, 190, 146, 16);
+ getContentPane().add(lblUnNmero);
+
+ JLabel lblUnCaracterEspecial = new JLabel("Un caracter especial");
+ lblUnCaracterEspecial.setForeground(Color.GRAY);
+ lblUnCaracterEspecial.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 10));
+
+ // lblUnCaracterEspecial.setFont(new Font("Dialog", Font.BOLD, 10));
+ lblUnCaracterEspecial.setBounds(101, 208, 146, 16);
+ getContentPane().add(lblUnCaracterEspecial);
+
+ JLabel lblSinEspaciosEn = new JLabel("Sin espacios en blanco");
+ lblSinEspaciosEn.setForeground(Color.GRAY);
+ lblSinEspaciosEn.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 10));
+
+ // lblSinEspaciosEn.setFont(new Font("Dialog", Font.BOLD, 10));
+ lblSinEspaciosEn.setBounds(101, 229, 146, 16);
+ getContentPane().add(lblSinEspaciosEn);
+
+ JLabel lblgmailcom = new JLabel("debe ser @gmail.com");
+ lblgmailcom.setForeground(Color.GRAY);
+ lblgmailcom.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 11));
+
+ // lblgmailcom.setFont(new Font("Dialog", Font.BOLD, 12));
+ lblgmailcom.setBounds(559, 174, 146, 16);
+ getContentPane().add(lblgmailcom);
+
+ btnAtras = new JButton("Atrás");
+ btnAtras.setBackground(SystemColor.controlShadow);
+ btnAtras.setForeground(Color.WHITE);
+ btnAtras.setFont(new Font("Dialog", Font.BOLD, 14));
+ btnAtras.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+// Frame reg = new LoginGUI();
+// reg.setAlwaysOnTop(true);
+// reg.setVisible(true);
+ dispose();
+
+ }
+ });
+ btnAtras.setBounds(54, 348, 79, 23);
+ getContentPane().add(btnAtras);
+
+ JLabel lblIcono = new JLabel(" ");
+ lblIcono.setIcon(new ImageIcon("C:\\Users\\Bryan\\Desktop\\Workspace\\ISBets21BRYMAUJONUNA\\info.png"));
+ lblIcono.setBounds(54, 106, 30, 30);
+ getContentPane().add(lblIcono);
+
+ lblInfoNombre = new JLabel("Sin números");
+ lblInfoNombre.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 11));
+ lblInfoNombre.setForeground(Color.GRAY);
+ lblInfoNombre.setBounds(530, 55, 95, 16);
+ getContentPane().add(lblInfoNombre);
+
+ lblInfoNombre_1 = new JLabel("Sin números");
+ lblInfoNombre_1.setForeground(Color.GRAY);
+ lblInfoNombre_1.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 11));
+ lblInfoNombre_1.setBounds(530, 95, 95, 16);
+ getContentPane().add(lblInfoNombre_1);
+
+ ImageIcon icon = new ImageIcon("imagenes/info.png");
+ lblIcono2 = new JLabel(icon);
+ lblIcono2.setBounds(640, 284, 30, 30);
+ getContentPane().add(lblIcono2);
+
+
+ lblInfoDir = new JLabel("Opcional");
+ lblInfoDir.setBounds(665, 291, 55, 16);
+ lblInfoDir.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 12));
+ lblInfoDir.setForeground(Color.GRAY);
+
+ getContentPane().add(lblInfoDir);
+ buttonRegistrarse.addActionListener(new ActionListener() {
+ @SuppressWarnings("deprecation")
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ try {
+ boolean control = true;
+ if (textUser.getText().equals("")) {
+ JOptionPane.showMessageDialog(getContentPane(), "Introduce un nombre de usuario",
+ "Error", JOptionPane.ERROR_MESSAGE);
+ control = false;
+
+ }
+
+ if (validoNombre(textName.getText()) == false) {
+ textName.setText("");
+
+ JOptionPane.showMessageDialog(getContentPane(), "Nombre con solo letras", "Error",
+ JOptionPane.ERROR_MESSAGE);
+ control = false;
+
+ }
+
+ if (validoNombre(textLastName.getText()) == false) {
+ textLastName.setText("");
+
+ JOptionPane.showMessageDialog(getContentPane(), "Apellidos con solo letras", "Error",
+ JOptionPane.ERROR_MESSAGE);
+ control = false;
+
+ }
+
+ if (validofecha(textBirth.getText()) == false) {
+ JOptionPane.showMessageDialog(getContentPane(), "Fecha incorrecta", "Error",
+ JOptionPane.ERROR_MESSAGE);
+ control = false;
+
+ }
+
+ if (validoEmail(textEmail.getText()) == false) {
+ JOptionPane.showMessageDialog(getContentPane(), "Email incorrecto", "Error",
+ JOptionPane.ERROR_MESSAGE);
+ control = false;
+
+ }
+
+ if (validoContraseña(textPass.getText()) == false) {
+ JOptionPane.showMessageDialog(getContentPane(), "Contraseña incorrecta", "Error",
+ JOptionPane.ERROR_MESSAGE);
+ control = false;
+
+ }
+ if (textBank.getText().equals("")) {
+
+ control = true;
+ }
+ else if (validoCuentaB(textBank.getText()) == false) {
+ JOptionPane.showMessageDialog(getContentPane(), "Cuenta Bancaria incorrecta", "Error",
+ JOptionPane.ERROR_MESSAGE);
+ control = false;
+
+ }
+ if (validoNumero(textPhoneNumber.getText()) == false) {
+ JOptionPane.showMessageDialog(getContentPane(), "Numero de teléfono incorrecto", "Error",
+ JOptionPane.ERROR_MESSAGE);
+ control = false;
+
+ }
+
+ if (control) {
+ facade.registrar(textUser.getText(), textPass.getText(), textName.getText(),
+ textLastName.getText(), textBirth.getText(), textEmail.getText(), textBank.getText(),
+ Integer.parseInt(textPhoneNumber.getText()), textAddress.getText(), 0);
+ JOptionPane.showMessageDialog(getContentPane(), "Registrado correctamente el usuario: "
+ + textUser.getText() + "\n\nSerá redirigido al apartado para loguearse...");
+
+ JOptionPane.showMessageDialog(getContentPane(),
+ "ENHORABUENA!!!!!\nTe regalamos un bono de bienvenida de 5€ para que apuestes");
+ facade.aplicarBonoBienvenida(textUser.getText());
+ dispose();
+ }
+
+ } catch (exceptions.UserAlreadyExistException ex) {
+
+ JOptionPane.showMessageDialog(getContentPane(), ex.getMessage(), "Error",
+ JOptionPane.ERROR_MESSAGE);
+ }
+
+ catch (Exception o) {
+ o.printStackTrace();
+
+ }
+
+ }
+
+ });
+
+ }
+
+ /* *************************************************************** */
+ /* FUNCIONES AUXILIARES DE COMPROBACIÓN DE CAMPOS PARA EL REGISTRO */
+ /* *************************************************************** */
+
+ // se verifica que el nombre sea solo formado por letras o espacios en blanco,
+ // tambien usado para apellidos
+ private boolean validoNombre(String nombre) {
+ int longitud = nombre.toCharArray().length;
+
+ for (int i = 0; i < longitud; i++) {
+ if (!Character.isLetter(nombre.toCharArray()[i]) && !Character.isWhitespace(nombre.toCharArray()[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ // se verifica que la fecha sea valida
+ private boolean validofecha(String pfecha) {
+ try {
+
+ String[] parts = pfecha.split("\\/"); // se divide el string pfecha en partes separadas por un /
+ if (parts.length != 3) { // se verifica que se el array surgido tiene tres elementos XX/XX/XXXX, sino
+ // devuelve false
+ return false;
+ } else {
+ int year; // año
+ int month; // mes [1,...,12]
+ int dayOfMonth; // día [1,...,31]
+ dayOfMonth = Integer.parseInt(parts[0]); // se parsea a int la primera parte XX/xx/xxxx, de string a int
+ month = Integer.parseInt(parts[1]); // se parsea a int la segunda parte xx/XX/xxxx, de string a int
+ year = Integer.parseInt(parts[2]); // se parsea a int la tercera parte xx/xx/XXXX, de string a int
+ if (year < 1900) { // se verifica que el año sea mayor a 1900
+ throw new IllegalArgumentException("Año inválido.");
+ }
+
+ Calendar calendar = Calendar.getInstance(); // se combierte la fecha en un Calendar, que automaticamente
+ calendar.setLenient(false); // si al intentarlo no puede, lanza excepcion como fecha
+ calendar.set(Calendar.YEAR, year); // no valida
+ calendar.set(Calendar.MONTH, month - 1); // [0,...,11] (la clase Calendar trata asi los meses 0-11)
+ calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
+ Date date = calendar.getTime(); // date es la fecha en formato Calendar XXXX/XX/XX
+ Date date2 = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()); // fecha
+ // actual en
+ // formato
+ // Date
+ if (date.after(date2)) { // se verifica que la fecha introducida no es posterior a la actual
+ System.out.println("FECHA POSTERIOR A HOY");
+ throw new IllegalArgumentException("Año inválido.");
+
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); // se transforma la fecha formato Calendar a
+ // formato Date
+ System.out.println(sdf.format(date)); // dd/MM/yyyy //es decir, de XXXX/XX/XX a XX/XX/XXXX
+ System.out.println("Fecha validada");
+ System.out.println("La fecha actual es: " + LocalDate.now());
+ return true;
+ }
+
+ } catch (Exception p) {
+ System.out.println("FECHA NO VALIDA");
+ return false;
+ }
+
+ }
+
+ private boolean validoEmail(String email) {
+ Pattern pattern = Pattern.compile("^[a-zA-Z0-9]+((\\_|\\.)[a-zA-Z0-9]+)?@gmail\\.com$");
+ Matcher mat = pattern.matcher(email);
+ if (mat.matches()) {
+ System.out.println("Porfin metes un email correscto estupida");
+
+ } else {
+ System.out.println("Amiga que email de meirda es ese");
+ return false;
+ }
+ return true;
+ }
+
+ public static boolean validoContraseña(String contraseña) {
+ Pattern pattern = Pattern.compile("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&?+=])(?=\\S+$).{8,}$");
+ Matcher mat = pattern.matcher(contraseña);
+ if (mat.matches()) {
+ System.out.println("Porfin metes una contraseña correcta estupida");
+
+ } else {
+ System.out.println("Amiga que contraseña de mierda es esa");
+ return false;
+ }
+ return true;
+ }
+
+ // acepta cuentas bancarias del tipo: ES23 3434 2342 3423
+ private boolean validoCuentaB(String cuentab) {
+ Pattern pattern = Pattern.compile("^[A-Z]{2}[0-9]{2}\\s[0-9]{4}\\s[0-9]{4}\\s[0-9]{4}$");
+ Matcher mat = pattern.matcher(cuentab);
+ if (mat.matches()) {
+ System.out.println("El formato de la cuenta bancaria cumple el formato");
+ } else {
+ System.out.println("El formato de la cuenta bancaria es incorrecto");
+ return false;
+ }
+ return true;
+ }
+
+ // +34(opcional) 123456789
+ private boolean validoNumero(String numero) {
+ Pattern pattern = Pattern.compile("^(\\+[0-9]+\\s)?[0-9]{9}$");
+ Matcher mat = pattern.matcher(numero);
+ if (mat.matches()) {
+ System.out.println("El formato del numero de telefono cumple el formato");
+ } else {
+ System.out.println("El formato del numero de telofono es incorrecto");
+ return false;
+ }
+ return true;
+ }
+}