Coverage Summary for Class: UserCredentialsPanel (it.polimi.ingsw.Client.GUI.Panels)

Class Class, % Method, % Branch, % Line, %
UserCredentialsPanel 0% (0/1) 0% (0/6) 0% (0/10) 0% (0/60)


1 package it.polimi.ingsw.Client.GUI.Panels; 2  3 import it.polimi.ingsw.Client.GUI.Context; 4 import it.polimi.ingsw.Client.GUI.IconLoader; 5 import it.polimi.ingsw.Network.SocketWrapper; 6 import it.polimi.ingsw.Server.Messages.Events.Requests.DeclarePlayerRequest; 7 import it.polimi.ingsw.Server.Messages.Message; 8 import it.polimi.ingsw.Server.Messages.ServerResponses.LobbyServerAccept; 9 import it.polimi.ingsw.Server.Messages.ServerResponses.SupportStructures.StatusCode; 10  11 import javax.swing.*; 12 import java.awt.*; 13 import java.io.IOException; 14  15 /** 16  * Panel that allows user to choose his username 17  */ 18 public class UserCredentialsPanel extends JPanel { 19  /** 20  * Create a new UserCredentialsPanel 21  * 22  * @param ctx context received form StartPanel 23  */ 24  public UserCredentialsPanel(Context ctx) { 25  // unwrapping context into useful variables 26  SocketWrapper sw = ctx.getSocketWrapper(); 27  28  // labels 29  JLabel title = new JLabel("Login"); 30  title.setFont(new Font("SansSerif", Font.BOLD, 50)); 31  title.setForeground(Color.WHITE); 32  JLabel usernameLabel = new JLabel("Username:", SwingConstants.RIGHT); 33  usernameLabel.setFont(new Font("SansSerif", Font.PLAIN, 20)); 34  usernameLabel.setForeground(Color.WHITE); 35  36  // text fields 37  JTextField username = new JTextField("guest" + (int) (Math.random() * 1000), 10); 38  39  // buttons 40  JButton login = new JButton("Login"); 41  42  // adding all elements to the view 43  this.add(title); 44  this.add(usernameLabel); 45  this.add(username); 46  this.add(login); 47  48  // setting correct focus 49  username.requestFocusInWindow(); 50  51  // actionListeners 52  username.addActionListener((actionEvent -> { 53  username.setText(username.getText().trim()); 54  login.requestFocusInWindow(); 55  })); 56  login.addActionListener(actionEvent -> { 57  login.setEnabled(false); 58  // normalize username 59  ctx.setNickname(username.getText().trim()); 60  username.setText(ctx.getNickname()); 61  try { 62  sw.sendMessage(new DeclarePlayerRequest(ctx.getNickname())); 63  } catch (Exception e) { 64  e.printStackTrace(); 65  } 66  new Thread(() -> { 67  try { 68  boolean again = true; 69  do { 70  Message response = sw.awaitMessage(); 71  if (response instanceof LobbyServerAccept lobbyAccept) { 72  if (lobbyAccept.getStatusCode() == StatusCode.Success) { 73  //Switch to a new LobbySelectionPanel if user has been accepted by Server 74  ctx.getWindow().changeView(new LobbySelectionPanel(ctx, lobbyAccept.getPublicLobbies())); 75  again = false; 76  } else { 77  JOptionPane.showMessageDialog(null, "Server denied your login", 78  "Warning", JOptionPane.INFORMATION_MESSAGE); 79  login.setEnabled(true); 80  } 81  } else { 82  throw new IllegalStateException("Unexpected value: " + response); 83  } 84  } while (again); 85  } catch (Exception e) { 86  JOptionPane.showMessageDialog(null, "Error in the connection with the server", 87  "Warning", JOptionPane.INFORMATION_MESSAGE); 88  try { 89  sw.close(); 90  } catch (IOException ex) { 91  throw new RuntimeException(ex); 92  } 93  ctx.getWindow().changeView(new StartPanel(ctx)); 94  } 95  }).start(); 96  }); 97  98  // layout object declaration and setup 99  SpringLayout layout = new SpringLayout(); 100  101  layout.putConstraint(SpringLayout.VERTICAL_CENTER, title, 340, SpringLayout.NORTH, this); 102  layout.putConstraint(SpringLayout.HORIZONTAL_CENTER, title, 0, SpringLayout.HORIZONTAL_CENTER, this); 103  104  layout.putConstraint(SpringLayout.VERTICAL_CENTER, usernameLabel, 65, SpringLayout.VERTICAL_CENTER, title); 105  layout.putConstraint(SpringLayout.EAST, usernameLabel, -10, SpringLayout.HORIZONTAL_CENTER, title); 106  layout.putConstraint(SpringLayout.VERTICAL_CENTER, username, 0, SpringLayout.VERTICAL_CENTER, usernameLabel); 107  layout.putConstraint(SpringLayout.WEST, username, 10, SpringLayout.HORIZONTAL_CENTER, title); 108  109  layout.putConstraint(SpringLayout.VERTICAL_CENTER, login, 40, SpringLayout.VERTICAL_CENTER, username); 110  layout.putConstraint(SpringLayout.HORIZONTAL_CENTER, login, 0, SpringLayout.HORIZONTAL_CENTER, this); 111  112  // apply layout 113  this.setLayout(layout); 114  } 115  116  @Override 117  protected void paintComponent(Graphics g) { 118  super.paintComponent(g); 119  assert IconLoader.userCredentialBackground != null; 120  g.drawImage(IconLoader.userCredentialBackground.getImage(), 0, 0, null); 121  } 122 }