package UI; import Client.Book; import Client.SocketClient; import UI.Components.BooksList; import UI.Components.LoginPanel; import org.json.JSONException; import javax.swing.*; import java.awt.*; public class MainWindow extends JFrame { public static String url = "http://localhost:8080"; public static int userId = 0; private LoginPanel loginPanel; public MainWindow() { this.setTitle("User Panel - Library Management System"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(650, 500); this.setResizable(false); this.setLocationRelativeTo(null); CardLayout cardLayout = new CardLayout(); JPanel cardPanel = new JPanel(cardLayout); loginPanel = new LoginPanel(); loginPanel.loginButton.addActionListener(e -> { if (SocketClient.socket == null) { new SocketClient(url); SocketClient.socket.connect(); } login(cardLayout, cardPanel); }); loginPanel.signUpButton.addActionListener(e -> { if (SocketClient.socket == null) { new SocketClient(url); SocketClient.socket.connect(); } loginPanel.statusLabel.setText("Attempting to Sign Up..."); SocketClient.socket.emit("signUp", "{" + "\"userName\": \"" + loginPanel.usernameInput.getValue() + "\"," + "\"password\": \"" + loginPanel.passwordInput.getValue() + "\"" + "}"); SocketClient.socket.on("signedUp", data -> { this.login(cardLayout, cardPanel); }); SocketClient.socket.on("signUpFailed", data -> { loginPanel.statusLabel.setText("Sign Up Failed"); }); }); cardPanel.add(loginPanel); cardPanel.add(new BooksList()); this.add(cardPanel); } private void login(CardLayout cardLayout, JPanel cardPanel) { SocketClient.socket.emit("login", "{" + "\"userName\": \"" + loginPanel.usernameInput.getValue() + "\"," + "\"password\": \"" + loginPanel.passwordInput.getValue() + "\"" + "}"); SocketClient.socket.on("loginFailed", data -> { loginPanel.statusLabel.setText("Failed to Log In. Check Username or Password."); }); SocketClient.socket.on("loggedIn", data -> { MainWindow.userId = (int) data[0]; SocketClient.socket.on("allBooksList", d -> { try { BooksList.refreshBooks(Book.fromObjects(d)); } catch (JSONException ex) { throw new RuntimeException(ex); } }); SocketClient.socket.on("booksUpdated", d -> { try { BooksList.refreshBooks(Book.fromObjects(d)); } catch (JSONException ex) { throw new RuntimeException(ex); } }); SocketClient.socket.emit("getAllBooks"); cardLayout.next(cardPanel); }); } }