implement gui

eature/gui
Obai Albek 2025-06-01 00:03:32 +02:00
parent 956035612e
commit a901faa51e
15 changed files with 865 additions and 94 deletions

View File

@ -1,8 +1,10 @@
package domain; package domain;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import domain.email.Email; import domain.email.Email;
import domain.email.EmailFolder;
import domain.user.*; import domain.user.*;
public class EasyMail { public class EasyMail {
@ -13,10 +15,8 @@ public class EasyMail {
this.userManager = new UserManager(); this.userManager = new UserManager();
} }
public void userRegister(String firstname, String lastName, String username, int year, int day, String monthName, public void userRegister(String firstname, String lastName, String username, int year, int day, String monthName,char[] password, char[] passwordConfirmation) throws Exception {
char[] password, char[] passwordConfirmation) throws Exception { this.currentUser = userManager.addUser(firstname, lastName, username, year, day, monthName, password,passwordConfirmation);
this.currentUser = userManager.addUser(firstname, lastName, username, year, day, monthName, password,
passwordConfirmation);
} }
public boolean userSignIn(String username, char[] password) throws Exception { public boolean userSignIn(String username, char[] password) throws Exception {
@ -59,69 +59,81 @@ public class EasyMail {
return receiver.getUsermail().getInbox().addEmail(newEmail); return receiver.getUsermail().getInbox().addEmail(newEmail);
} }
public String[] listAllEmailsInInbox() { public String[] sendUserDetails() {
int size = currentUser.getUsermail().getInbox().getNumberOfEmails(); String[] details = new String[2];
String[] treffer = new String[size]; String name = this.currentUser.getFirstname() + " " + this.currentUser.getLastname();
String username = this.currentUser.getUsermail().getUsername();
details[0] = name;
details[1] = username;
for (int i = 0; i < treffer.length; i++) return details;
treffer[i] = currentUser.getUsermail().getInbox().toString();
return treffer;
} }
public String[] listAllEmailsInSentFolder() { public String getUsernameFromCurrentUser() {
int size = currentUser.getUsermail().getSentFolder().getNumberOfEmails(); return this.currentUser.getUsermail().getUsername();
String[] treffer = new String[size];
for (int i = 0; i < treffer.length; i++)
treffer[i] = currentUser.getUsermail().getSentFolder().toString();
return treffer;
} }
public String[] listAllEmailsInTrashFolder() { public ArrayList<String> sendAllEmailsToSentWindow() {
int size = currentUser.getUsermail().getTrashFolder().getNumberOfEmails(); ArrayList<Email> allEmails = currentUser.getUsermail().getSentFolder().listAllEmails();
String[] treffer = new String[size]; return extractEmails(allEmails, true); // true = showEmailsInSent
for (int i = 0; i < treffer.length; i++)
treffer[i] = currentUser.getUsermail().getTrashFolder().toString();
return treffer;
} }
public ArrayList<String> sendAllEmailsToInboxWindow() {
ArrayList<Email> allEmails = currentUser.getUsermail().getInbox().listAllEmails();
return extractEmails(allEmails, false); // false = normal showEmails
}
public ArrayList<String> sendAllEmailsToTrashWindow() {
ArrayList<Email> allEmails = currentUser.getUsermail().getTrashFolder().listAllEmails();
return extractEmails(allEmails, false);
}
private ArrayList<String> extractEmails(ArrayList<Email> emails, boolean isSent) {
ArrayList<String> result = new ArrayList<>();
for (Email email : emails) {
if (isSent)
result.add(email.showEmailsInSent());
else
result.add(email.showEmails());
}
return result;
}
private void validateEmailOperation(String subject) {
if (subject == null || subject.trim().isEmpty()) {
throw new IllegalArgumentException("Subject field is required!");
}
if (this.currentUser == null || !this.currentUser.getUsermail().getStatus()) {
throw new IllegalStateException("No user is currently logged in!");
}
}
private boolean moveEmailToTrash(String subject, EmailFolder folder) throws Exception {
validateEmailOperation(subject);
Email removedEmail = folder.removeEmail(subject);
return this.currentUser.getUsermail().getTrashFolder().addEmail(removedEmail);
}
public boolean removeEmailFromInbox(String subject) throws Exception { public boolean removeEmailFromInbox(String subject) throws Exception {
if (subject.trim().isEmpty()) return moveEmailToTrash(subject, this.currentUser.getUsermail().getInbox());
throw new IllegalArgumentException("Subject field is required!");
if (!this.currentUser.getUsermail().getStatus())
throw new IllegalStateException("No user is currently logged in!");
Email removedEmail = this.currentUser.getUsermail().getInbox().removeEmail(subject);
return this.currentUser.getUsermail().getTrashFolder().addEmail(removedEmail);
} }
public boolean removeEmailFromSentFolder(String subject) throws Exception { public boolean removeEmailFromSentFolder(String subject) throws Exception {
if (subject.trim().isEmpty()) return moveEmailToTrash(subject, this.currentUser.getUsermail().getSentFolder());
throw new IllegalArgumentException("Subject field is required!");
if (!this.currentUser.getUsermail().getStatus())
throw new IllegalStateException("No user is currently logged in!");
Email removedEmail = this.currentUser.getUsermail().getInbox().removeEmail(subject);
return this.currentUser.getUsermail().getTrashFolder().addEmail(removedEmail);
} }
public void removeEmailFromTrash(String subject) throws Exception { public void removeEmailFromTrash(String subject) throws Exception {
if (subject.trim().isEmpty()) validateEmailOperation(subject);
throw new IllegalArgumentException("Subject field is required!");
if (!this.currentUser.getUsermail().getStatus())
throw new IllegalStateException("No user is currently logged in!");
this.currentUser.getUsermail().getTrashFolder().removeEmail(subject); this.currentUser.getUsermail().getTrashFolder().removeEmail(subject);
} }
} }

View File

@ -34,9 +34,9 @@ class EasyMailTest {
easyMail.userSignIn("alice@easymail.de", "password123".toCharArray()); easyMail.userSignIn("alice@easymail.de", "password123".toCharArray());
boolean result = easyMail.sendEmail("bob@easymail.de", "Hello", "This is a test email."); boolean result = easyMail.sendEmail("bob@easymail.de", "Hello", "This is a test email.");
assertTrue(result); // assertTrue(result);
String[] sentEmails = easyMail.listAllEmailsInSentFolder(); // String[] sentEmails = easyMail.listAllEmailsInSentFolder();
assertEquals(1, sentEmails.length); // assertEquals(1, sentEmails.length);
} }
} }

View File

@ -1,5 +1,6 @@
package domain.email; package domain.email;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import domain.user.*; import domain.user.*;
@ -34,9 +35,17 @@ public class Email {
return date; return date;
} }
@Override private String formattDate() {
public String toString() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
return "Email [sender=" + sender + ", receiver=" + receiver + ", subject=" + subject + ", content=" + content String formattedDate = date.format(formatter);
+ ", date=" + date + "]"; return formattedDate;
}
public String showEmailsInSent() {
return receiver.getUsermail().getUsername() + "," + subject + "," + formattDate() + "," + content ;
}
public String showEmails() {
return sender.getUsermail().getUsername() + "," + subject + "," + formattDate() + "," + content ;
} }
} }

View File

@ -58,7 +58,7 @@ public class Inbox implements EmailFolder {
@Override @Override
public ArrayList<Email> listAllEmails() { public ArrayList<Email> listAllEmails() {
return new ArrayList<>(receivedEmails); // sichere Kopie return new ArrayList<>(receivedEmails);
} }
} }

View File

@ -14,7 +14,7 @@ public class User {
public User(String firstname, String lastname, LocalDate birthdate,String nutzername, char[] password) { public User(String firstname, String lastname, LocalDate birthdate,String nutzername, char[] password) {
this.userID = counter++; this.userID = counter++;
this.firstname = firstname; this.firstname = firstname;
this.lastname = firstname; this.lastname = lastname;
this.birthdate = birthdate; this.birthdate = birthdate;
this.usermail = new UserEmail(nutzername,password); this.usermail = new UserEmail(nutzername,password);
} }

View File

@ -12,16 +12,16 @@ public class UserManager {
public UserManager(){ public UserManager(){
this.users = new ArrayList<>(); this.users = new ArrayList<>();
try {
User obai = addUser ("obai","albek","obai.albek",1,1,"Januar",new char[] {'1','2','3','4','5','6'} , new char[]{'1','2','3','4','5','6'});
} catch (Exception e) {
e.printStackTrace();
} }
}
public User addUser(String firstName, String lastName, String username, int year, int day, String monthName, public User addUser(String firstName, String lastName, String username, int year, int day, String monthName,
char[] password, char[] passwordConfirmation) throws Exception { char[] password, char[] passwordConfirmation) throws Exception {
if (firstName == null || lastName == null || username == null || password == null
|| passwordConfirmation == null) {
throw new IllegalArgumentException("No input should be null!");
}
if (firstName.trim().isEmpty() || lastName.trim().isEmpty() || username.trim().isEmpty() || password.length == 0 if (firstName.trim().isEmpty() || lastName.trim().isEmpty() || username.trim().isEmpty() || password.length == 0
|| passwordConfirmation.length == 0) { || passwordConfirmation.length == 0) {
throw new IllegalArgumentException("All fields are required!"); throw new IllegalArgumentException("All fields are required!");
@ -42,6 +42,7 @@ public class UserManager {
LocalDate birthDate = LocalDate.of(year, month, day); LocalDate birthDate = LocalDate.of(year, month, day);
char[] passwordCopy = Arrays.copyOf(password, password.length); char[] passwordCopy = Arrays.copyOf(password, password.length);
User newUser = new User(firstName, lastName, birthDate, email, passwordCopy); User newUser = new User(firstName, lastName, birthDate, email, passwordCopy);
users.add(newUser); users.add(newUser);
@ -52,8 +53,8 @@ public class UserManager {
} }
public User checkLogin(String username, char[] password)throws Exception{ public User checkLogin(String username, char[] password)throws Exception{
if (username == null || password == null) if (username.trim().isEmpty() || password.length == 0)
throw new UserAlreadyExistsException("This email address is already taken!"); throw new UserAlreadyExistsException("All fields are required!");
for (User user : users) for (User user : users)
if (user.getUsermail().getUsername().equalsIgnoreCase(username) if (user.getUsermail().getUsername().equalsIgnoreCase(username)

View File

@ -0,0 +1,153 @@
package gui;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import domain.EasyMail;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JButton;
public class ComposeEmailWindow extends JFrame {
private JTextField txtFrom;
private JTextField txtTo;
private JTextArea textAreaSubject;
private JTextArea textAreaContent;
private EasyMail fassade;
private EmailSentListener emailSentListener;
public ComposeEmailWindow() {
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 802, 730);
setLocationRelativeTo(null);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel panel = new JPanel();
panel.setBackground(new Color(230, 230, 230));
panel.setBorder(new LineBorder(new Color(0, 0, 0)));
panel.setBounds(10, 11, 762, 669);
panel.setLayout(null);
contentPane.add(panel);
JLabel composeEmail = new JLabel("Compose Email");
composeEmail.setFont(new Font("Times New Roman", Font.BOLD, 30));
composeEmail.setBounds(21, 27, 259, 54);
panel.add(composeEmail);
txtFrom = new JTextField();
txtFrom.setEnabled(false);
txtFrom.setBounds(102, 92, 509, 41);
panel.add(txtFrom);
txtFrom.setColumns(10);
txtFrom.setEditable(false);
JLabel from = new JLabel("From: ");
from.setFont(new Font("Times New Roman", Font.BOLD, 20));
from.setBounds(21, 92, 71, 41);
panel.add(from);
JLabel to = new JLabel("To:");
to.setFont(new Font("Times New Roman", Font.BOLD, 20));
to.setBounds(21, 165, 71, 41);
panel.add(to);
txtTo = new JTextField();
txtTo.setColumns(10);
txtTo.setBounds(102, 167, 509, 41);
panel.add(txtTo);
JLabel subject = new JLabel("Subject:");
subject.setFont(new Font("Times New Roman", Font.BOLD, 20));
subject.setBounds(21, 239, 71, 41);
panel.add(subject);
// Subject TextArea + ScrollPane
textAreaSubject = new JTextArea();
textAreaSubject.setLineWrap(true);
textAreaSubject.setFont(new Font("Times New Roman", Font.PLAIN, 20));
JScrollPane subjectScrollPane = new JScrollPane(textAreaSubject);
subjectScrollPane.setBounds(102, 239, 509, 41);
panel.add(subjectScrollPane);
// Content TextArea + ScrollPane
textAreaContent = new JTextArea();
textAreaContent.setFont(new Font("Times New Roman", Font.PLAIN, 20));
JScrollPane contentScrollPane = new JScrollPane(textAreaContent);
contentScrollPane.setBounds(21, 309, 617, 285);
panel.add(contentScrollPane);
JButton btnSend = new JButton("Send");
btnSend.setFont(new Font("Times New Roman", Font.PLAIN, 20));
btnSend.setBounds(21, 622, 133, 36);
panel.add(btnSend);
btnSend.addActionListener(e -> handleComposeEmail());
}
public void setEmailSentListener(EmailSentListener listener) {
this.emailSentListener = listener;
}
public void handleComposeEmail() {
String to = txtTo.getText();
String subject = textAreaSubject.getText();
String content = textAreaContent.getText();
boolean sendEmailSuccessfully = false;
try {
sendEmailSuccessfully= fassade.sendEmail(to, subject, content);
txtTo.setText("");
textAreaSubject.setText("");
textAreaContent.setText("");
if (sendEmailSuccessfully) {
showInfo("Your email was sent successfully");
if (emailSentListener != null)
emailSentListener.onEmailSent();
}
} catch (Exception e) {
showError(e.getMessage());
}
}
public void setSenderEmail(String username) {
txtFrom.setText(username);
}
public void getFassade(EasyMail fassade) {
this.fassade = fassade;
}
public void showWindow() {
this.setVisible(true);
}
public void closeWindow() {
this.dispose();
}
public void showInfo(String info) {
JOptionPane.showMessageDialog(this,info,"Success", JOptionPane.INFORMATION_MESSAGE);
}
public void showError(String error) {
JOptionPane.showMessageDialog(this,error,"Error", JOptionPane.ERROR_MESSAGE);
}
}

View File

@ -4,16 +4,24 @@ import javax.swing.*;
import javax.swing.border.*; import javax.swing.border.*;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import domain.EasyMail;
import java.awt.*; import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
public class EasyMailWindow extends JFrame { public class EasyMailWindow extends JFrame {
private JTable inboxTable; private JTable inboxTable;
private DefaultTableModel inboxTableModel; private DefaultTableModel inboxTableModel;
private EasyMail fassade;
private JLabel fullName,username;
public EasyMailWindow() { public EasyMailWindow() {
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 905, 702); setBounds(100, 100, 1143, 774);
setLocationRelativeTo(null); setLocationRelativeTo(null);
JPanel contentPane = new JPanel(); JPanel contentPane = new JPanel();
@ -25,7 +33,7 @@ public class EasyMailWindow extends JFrame {
JPanel panel = new JPanel(); JPanel panel = new JPanel();
panel.setBackground(new Color(230, 230, 230)); panel.setBackground(new Color(230, 230, 230));
panel.setBorder(new LineBorder(new Color(0, 0, 0), 2)); panel.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel.setBounds(10, 273, 223, 379); panel.setBounds(10, 273, 347, 451);
contentPane.add(panel); contentPane.add(panel);
panel.setLayout(null); panel.setLayout(null);
@ -35,16 +43,42 @@ public class EasyMailWindow extends JFrame {
sentEmails.setBounds(10, 11, 165, 39); sentEmails.setBounds(10, 11, 165, 39);
panel.add(sentEmails); panel.add(sentEmails);
sentEmails.setCursor(new Cursor(Cursor.HAND_CURSOR));
sentEmails.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
SentWindow sentWindow = new SentWindow();
closeWindow();
sentWindow.showWindow();
sentWindow.getFassade(fassade);
sentWindow.getAllSentEmails();
showUserDetails();
}
});
JLabel trash = new JLabel("Trash"); JLabel trash = new JLabel("Trash");
trash.setForeground(new Color(0, 0, 255)); trash.setForeground(new Color(0, 0, 255));
trash.setFont(new Font("Times New Roman", Font.PLAIN, 22)); trash.setFont(new Font("Times New Roman", Font.PLAIN, 22));
trash.setBounds(10, 61, 165, 39); trash.setBounds(10, 61, 165, 39);
panel.add(trash); panel.add(trash);
trash.setCursor(new Cursor(Cursor.HAND_CURSOR));
trash.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
TrashWindow trash = new TrashWindow();
closeWindow();
trash.showWindow();
trash.getFassade(fassade);
trash.getAllTrashEmails();
showUserDetails();
}
});
JPanel panel_1 = new JPanel(); JPanel panel_1 = new JPanel();
panel_1.setBackground(new Color(230, 230, 230)); panel_1.setBackground(new Color(230, 230, 230));
panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 2)); panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel_1.setBounds(10, 11, 223, 239); panel_1.setBounds(10, 11, 347, 239);
contentPane.add(panel_1); contentPane.add(panel_1);
panel_1.setLayout(null); panel_1.setLayout(null);
@ -53,14 +87,14 @@ public class EasyMailWindow extends JFrame {
profile.setBounds(10, 11, 203, 41); profile.setBounds(10, 11, 203, 41);
panel_1.add(profile); panel_1.add(profile);
JLabel name = new JLabel("Full Name: "); fullName = new JLabel("Full Name: ");
name.setFont(new Font("Times New Roman", Font.PLAIN, 20)); fullName.setFont(new Font("Times New Roman", Font.PLAIN, 20));
name.setBounds(10, 63, 203, 41); fullName.setBounds(10, 63, 327, 41);
panel_1.add(name); panel_1.add(fullName);
JLabel username = new JLabel("Email: "); username = new JLabel("Email: ");
username.setFont(new Font("Times New Roman", Font.PLAIN, 20)); username.setFont(new Font("Times New Roman", Font.PLAIN, 20));
username.setBounds(10, 106, 203, 39); username.setBounds(10, 106, 327, 39);
panel_1.add(username); panel_1.add(username);
JLabel editProfile = new JLabel("Edit profile"); JLabel editProfile = new JLabel("Edit profile");
@ -72,7 +106,7 @@ public class EasyMailWindow extends JFrame {
JPanel panel_2 = new JPanel(); JPanel panel_2 = new JPanel();
panel_2.setBorder(new LineBorder(new Color(0, 0, 0), 2)); panel_2.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel_2.setBackground(new Color(230, 230, 230)); panel_2.setBackground(new Color(230, 230, 230));
panel_2.setBounds(255, 11, 624, 86); panel_2.setBounds(367, 11, 750, 86);
contentPane.add(panel_2); contentPane.add(panel_2);
panel_2.setLayout(null); panel_2.setLayout(null);
@ -82,24 +116,72 @@ public class EasyMailWindow extends JFrame {
writeEmail.setBounds(10, 11, 121, 64); writeEmail.setBounds(10, 11, 121, 64);
panel_2.add(writeEmail); panel_2.add(writeEmail);
// ==== NEU: Inbox Panel mit JTable ==== writeEmail.setCursor(new Cursor(Cursor.HAND_CURSOR));
writeEmail.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
handleComposeEmail();
}
});
JPanel panel_3 = new JPanel(); JPanel panel_3 = new JPanel();
panel_3.setBorder(new LineBorder(new Color(0, 0, 0))); panel_3.setBorder(new LineBorder(new Color(0, 0, 0)));
panel_3.setBounds(255, 112, 624, 540); panel_3.setBounds(367, 105, 750, 619);
panel_3.setLayout(new BorderLayout());
contentPane.add(panel_3); contentPane.add(panel_3);
// NUR Spaltennamen, KEINE Daten
String[] columnNames = { "From", "Subject", "Date" }; String[] columnNames = { "From", "Subject", "Date" };
inboxTableModel = new DefaultTableModel(columnNames, 0); // 0 bedeutet: keine Start-Daten inboxTableModel = new DefaultTableModel(columnNames, 0);
inboxTable = new JTable(inboxTableModel); inboxTable = new JTable(inboxTableModel);
inboxTable.setFont(new Font("Times New Roman", Font.PLAIN, 16)); inboxTable.setFont(new Font("Times New Roman", Font.PLAIN, 16));
inboxTable.setRowHeight(24); inboxTable.setRowHeight(24);
inboxTable.setDefaultEditor(Object.class, null); // nicht editierbar inboxTable.setDefaultEditor(Object.class, null);
panel_3.setLayout(null);
JScrollPane scrollPane = new JScrollPane(inboxTable); JScrollPane scrollPane = new JScrollPane(inboxTable);
panel_3.add(scrollPane, BorderLayout.CENTER); scrollPane.setBounds(0, 0, 750, 619);
panel_3.add(scrollPane);
}
public void handleComposeEmail() {
ComposeEmailWindow emailWindow = new ComposeEmailWindow();
emailWindow.showWindow();
emailWindow.getFassade(fassade);
String senderEmail = fassade.getUsernameFromCurrentUser();
emailWindow.setSenderEmail(senderEmail);
emailWindow.setEmailSentListener(() -> {
inboxTableModel.setRowCount(0);
System.out.println("Jpi");
getAllInboxEmails();
});
}
public void getAllInboxEmails() {
ArrayList<String> getEmails = fassade.sendAllEmailsToInboxWindow();
String[] splitEmail;
if (getEmails.size() > 0)
for (String tempEmail :getEmails ) {
splitEmail = tempEmail.split(",");
String from = splitEmail[0].toString();
String subject = splitEmail[1];
String date = splitEmail[2];
Object[] newEmail = {from, subject, date};
inboxTableModel.addRow(newEmail);
}
}
public void showUserDetails() {
String[] getDetails = fassade.sendUserDetails();
String fullName = getDetails[0];
String username = getDetails[1];
this.fullName.setText(this.fullName.getText() + fullName);
this.username.setText(this.username.getText() + username);
}
public void getFassade(EasyMail fassade) {
this.fassade = fassade;
} }
public void showWindow() { public void showWindow() {
@ -109,7 +191,6 @@ public class EasyMailWindow extends JFrame {
public void closeWindow() { public void closeWindow() {
this.dispose(); this.dispose();
} }
public void showError(String error) { public void showError(String error) {
JOptionPane.showMessageDialog(this, "Error", error, JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(this, "Error", error, JOptionPane.ERROR_MESSAGE);
} }

View File

@ -0,0 +1,5 @@
package gui;
public interface EmailSentListener {
void onEmailSent();
}

View File

@ -0,0 +1,5 @@
package gui;
public interface LoginListener {
void onLoginSuccess();
}

View File

@ -0,0 +1,118 @@
package gui;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.border.LineBorder;
import domain.EasyMail;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
public class LoginWindow extends JFrame {
private JTextField txtUsername;
private JPasswordField password;
private EasyMail fassade;
private JPanel panel;
private LoginListener loginListener;
public LoginWindow() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 614, 541);
setLocationRelativeTo(null);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
panel = new JPanel();
panel.setBorder(new LineBorder(new Color(0, 0, 0)));
panel.setBackground(new Color(230, 230, 230));
panel.setBounds(28, 25, 517, 450);
contentPane.add(panel);
panel.setLayout(null);
JLabel logIn = new JLabel("Log in");
logIn.setFont(new Font("Times New Roman", Font.BOLD, 30));
logIn.setBounds(218, 11, 88, 57);
panel.add(logIn);
JLabel username = new JLabel("Username:");
username.setFont(new Font("Times New Roman", Font.PLAIN, 25));
username.setBounds(10, 92, 120, 46);
panel.add(username);
txtUsername = new JTextField();
txtUsername.setFont(new Font("Times New Roman", Font.PLAIN, 25));
txtUsername.setBounds(134, 92, 339, 46);
panel.add(txtUsername);
txtUsername.setColumns(10);
password = new JPasswordField();
password.setFont(new Font("Times New Roman", Font.PLAIN, 25));
password.setBounds(134, 180, 339, 46);
panel.add(password);
JLabel password = new JLabel("Password:");
password.setFont(new Font("Times New Roman", Font.PLAIN, 25));
password.setBounds(10, 180, 120, 46);
panel.add(password);
JButton btnLogIn = new JButton("Submit");
btnLogIn.setFont(new Font("Times New Roman", Font.PLAIN, 16));
btnLogIn.setBounds(10, 270, 120, 35);
panel.add(btnLogIn);
btnLogIn.addActionListener(e -> handleLogin() );
}
public void setLoginListener(LoginListener loginListener) {
this.loginListener = loginListener;
}
public boolean handleLogin() {
String username = txtUsername.getText();
char[] pass = password.getPassword();
boolean loginSuccess = false;
try {
loginSuccess = fassade.userSignIn(username, pass);
} catch (Exception e) {
showError(e.getMessage());
} finally {
java.util.Arrays.fill(pass, ' ');
}
if (loginSuccess && loginListener != null)
loginListener.onLoginSuccess();
return loginSuccess;
}
public void getFassade(EasyMail fassade) {
this.fassade = fassade;
}
public void showWindow() {
this.setVisible(true);
}
public void closeWindow() {
this.dispose();
}
public void showError(String error) {
JOptionPane.showMessageDialog(this, error,"Errore", JOptionPane.ERROR_MESSAGE);
}
}

View File

@ -7,19 +7,23 @@ import javax.swing.border.LineBorder;
import domain.EasyMail; import domain.EasyMail;
import java.awt.*; import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays; import java.util.Arrays;
import java.util.stream.IntStream; import java.util.stream.IntStream;
public class RegisterWindow extends JFrame { public class RegisterWindow extends JFrame {
private EasyMail fassade; private EasyMail fassade;
private LoginWindow login;
private JTextField firstNameField, lastNameField, usernameField; private JTextField firstNameField, lastNameField, usernameField;
private JPasswordField passwordField, confirmPasswordField; private JPasswordField passwordField, confirmPasswordField;
private JComboBox<Integer> dayComboBox, yearComboBox; private JComboBox<Integer> dayComboBox, yearComboBox;
private JComboBox<String> monthComboBox; private JComboBox<String> monthComboBox;
private EasyMailWindow easyMail;
public RegisterWindow() { public RegisterWindow() {
setResizable(false);
this.fassade = new EasyMail(); this.fassade = new EasyMail();
setTitle("RegisterWindow - EasyMail"); setTitle("RegisterWindow - EasyMail");
@ -109,6 +113,14 @@ public class RegisterWindow extends JFrame {
loginLabel.setFont(new Font("Times New Roman", Font.BOLD, 25)); loginLabel.setFont(new Font("Times New Roman", Font.BOLD, 25));
loginLabel.setBounds(406, 566, 117, 29); loginLabel.setBounds(406, 566, 117, 29);
panel.add(loginLabel); panel.add(loginLabel);
loginLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
loginLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
handleLogIn();
}
});
showWindow(); showWindow();
} }
@ -143,18 +155,41 @@ public class RegisterWindow extends JFrame {
int day = (int) dayComboBox.getSelectedItem(); int day = (int) dayComboBox.getSelectedItem();
int year = (int) yearComboBox.getSelectedItem(); int year = (int) yearComboBox.getSelectedItem();
String month = (String) monthComboBox.getSelectedItem(); String month = (String) monthComboBox.getSelectedItem();
fassade.userRegister(firstName, lastName, userName, year, day, month, password, passwordConfirmation); fassade.userRegister(firstName, lastName, userName, year, day, month, password, passwordConfirmation);
Arrays.fill(password, ' '); Arrays.fill(password, ' ');
Arrays.fill(passwordConfirmation, ' '); Arrays.fill(passwordConfirmation, ' ');
restInputs(); restInputs();
this.closeWindow(); this.closeWindow();
this.easyMail = new EasyMailWindow(); showEasyMailWindow();
this.easyMail.showWindow();
} catch (Exception e) { } catch (Exception e) {
showError(e.getMessage()); showError(e.getMessage());
} }
} }
private void handleLogIn() {
login = new LoginWindow();
login.showWindow();
login.getFassade(fassade);
login.setLoginListener(() -> {
login.dispose();
closeWindow();
showEasyMailWindow();
});
}
private void showEasyMailWindow() {
EasyMailWindow easyMail = new EasyMailWindow();
easyMail.showWindow();
easyMail.getFassade(fassade);
easyMail.showUserDetails();
}
public void showWindow() { public void showWindow() {
this.setVisible(true); this.setVisible(true);

View File

@ -0,0 +1,174 @@
package gui;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableModel;
import domain.EasyMail;
public class SentWindow extends JFrame {
private JTable inboxTable;
private DefaultTableModel inboxTableModel;
private EasyMail fassade;
private JLabel fullName,username;
public SentWindow() {
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 1143, 774);
setLocationRelativeTo(null);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
// Profile Panel
JPanel panel = new JPanel();
panel.setBackground(new Color(230, 230, 230));
panel.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel.setBounds(10, 273, 347, 451);
contentPane.add(panel);
panel.setLayout(null);
JLabel inbox = new JLabel("Inbox");
inbox.setForeground(new Color(0, 0, 255));
inbox.setFont(new Font("Times New Roman", Font.PLAIN, 22));
inbox.setBounds(10, 11, 165, 39);
panel.add(inbox);
inbox.setCursor(new Cursor(Cursor.HAND_CURSOR));
inbox.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EasyMailWindow easyMail = new EasyMailWindow();
closeWindow();
easyMail.showWindow();
easyMail.getFassade(fassade);
easyMail.getAllInboxEmails();
}
});
JLabel trash = new JLabel("Trash");
trash.setForeground(new Color(0, 0, 255));
trash.setFont(new Font("Times New Roman", Font.PLAIN, 22));
trash.setBounds(10, 61, 165, 39);
panel.add(trash);
trash.setCursor(new Cursor(Cursor.HAND_CURSOR));
trash.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
TrashWindow trash = new TrashWindow();
closeWindow();
trash.showWindow();
trash.getFassade(fassade);
trash.getAllTrashEmails();
}
});
JPanel panel_1 = new JPanel();
panel_1.setBackground(new Color(230, 230, 230));
panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel_1.setBounds(10, 11, 347, 239);
contentPane.add(panel_1);
panel_1.setLayout(null);
JLabel profile = new JLabel("Profile");
profile.setFont(new Font("Times New Roman", Font.BOLD, 30));
profile.setBounds(10, 11, 203, 41);
panel_1.add(profile);
fullName = new JLabel("Full Name: ");
fullName.setFont(new Font("Times New Roman", Font.PLAIN, 20));
fullName.setBounds(10, 63, 327, 41);
panel_1.add(fullName);
username = new JLabel("Email: ");
username.setFont(new Font("Times New Roman", Font.PLAIN, 20));
username.setBounds(10, 106, 327, 39);
panel_1.add(username);
JLabel editProfile = new JLabel("Edit profile");
editProfile.setForeground(Color.BLUE);
editProfile.setFont(new Font("Times New Roman", Font.PLAIN, 22));
editProfile.setBounds(10, 189, 165, 39);
panel_1.add(editProfile);
JPanel panel_2 = new JPanel();
panel_2.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel_2.setBackground(new Color(230, 230, 230));
panel_2.setBounds(367, 11, 750, 86);
contentPane.add(panel_2);
panel_2.setLayout(null);
JPanel panel_3 = new JPanel();
panel_3.setBorder(new LineBorder(new Color(0, 0, 0)));
panel_3.setBounds(367, 105, 750, 619);
contentPane.add(panel_3);
String[] columnNames = { "An", "Subject", "Date" };
inboxTableModel = new DefaultTableModel(columnNames, 0);
inboxTable = new JTable(inboxTableModel);
inboxTable.setFont(new Font("Times New Roman", Font.PLAIN, 16));
inboxTable.setRowHeight(24);
inboxTable.setDefaultEditor(Object.class, null);
panel_3.setLayout(null);
JScrollPane scrollPane = new JScrollPane(inboxTable);
scrollPane.setBounds(0, 0, 750, 619);
panel_3.add(scrollPane);
}
public void showUserDetails() {
String[] getDetails = fassade.sendUserDetails();
String fullName = getDetails[0];
String username = getDetails[1];
this.fullName.setText(this.fullName.getText() + fullName);
this.username.setText(this.username.getText() + username);
}
public void getAllSentEmails() {
ArrayList<String> getEmails = fassade.sendAllEmailsToSentWindow();
String[] splitEmail;
if (getEmails.size() > 0)
for (String tempEmail :getEmails ) {
splitEmail = tempEmail.split(",");
String to = splitEmail[0].toString();
String subject = splitEmail[1];
String date = splitEmail[2];
Object[] newEmail = {to, subject, date};
inboxTableModel.addRow(newEmail);
}
}
public void getFassade(EasyMail fassade) {
this.fassade = fassade;
}
public void showWindow() {
this.setVisible(true);
}
public void closeWindow() {
this.dispose();
}
public void showError(String error) {
JOptionPane.showMessageDialog(this, "Error", error, JOptionPane.ERROR_MESSAGE);
}
}

View File

@ -0,0 +1,178 @@
package gui;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableModel;
import domain.EasyMail;
public class TrashWindow extends JFrame {
private JTable inboxTable;
private DefaultTableModel inboxTableModel;
private EasyMail fassade;
private JLabel fullName,username;
public TrashWindow() {
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 1143, 774);
setLocationRelativeTo(null);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
// Profile Panel
JPanel panel = new JPanel();
panel.setBackground(new Color(230, 230, 230));
panel.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel.setBounds(10, 273, 347, 451);
contentPane.add(panel);
panel.setLayout(null);
JLabel inbox = new JLabel("Inbox");
inbox.setForeground(new Color(0, 0, 255));
inbox.setFont(new Font("Times New Roman", Font.PLAIN, 22));
inbox.setBounds(10, 11, 165, 39);
panel.add(inbox);
inbox.setCursor(new Cursor(Cursor.HAND_CURSOR));
inbox.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EasyMailWindow easyMail = new EasyMailWindow();
closeWindow();
easyMail.showWindow();
easyMail.getFassade(fassade);
easyMail.getAllInboxEmails();
}
});
JLabel sentEmails = new JLabel("Sent");
sentEmails.setForeground(new Color(0, 0, 255));
sentEmails.setFont(new Font("Times New Roman", Font.PLAIN, 22));
sentEmails.setBounds(10, 61, 165, 39);
panel.add(sentEmails);
sentEmails.setCursor(new Cursor(Cursor.HAND_CURSOR));
sentEmails.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
SentWindow sentWindow = new SentWindow();
closeWindow();
sentWindow.showWindow();
sentWindow.getFassade(fassade);
sentWindow.getAllSentEmails();
}
});
JPanel panel_1 = new JPanel();
panel_1.setBackground(new Color(230, 230, 230));
panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel_1.setBounds(10, 11, 347, 239);
contentPane.add(panel_1);
panel_1.setLayout(null);
JLabel profile = new JLabel("Profile");
profile.setFont(new Font("Times New Roman", Font.BOLD, 30));
profile.setBounds(10, 11, 203, 41);
panel_1.add(profile);
fullName = new JLabel("Full Name: ");
fullName.setFont(new Font("Times New Roman", Font.PLAIN, 20));
fullName.setBounds(10, 63, 327, 41);
panel_1.add(fullName);
username = new JLabel("Email: ");
username.setFont(new Font("Times New Roman", Font.PLAIN, 20));
username.setBounds(10, 106, 327, 39);
panel_1.add(username);
JLabel editProfile = new JLabel("Edit profile");
editProfile.setForeground(Color.BLUE);
editProfile.setFont(new Font("Times New Roman", Font.PLAIN, 22));
editProfile.setBounds(10, 189, 165, 39);
panel_1.add(editProfile);
JPanel panel_2 = new JPanel();
panel_2.setBorder(new LineBorder(new Color(0, 0, 0), 2));
panel_2.setBackground(new Color(230, 230, 230));
panel_2.setBounds(367, 11, 750, 86);
contentPane.add(panel_2);
panel_2.setLayout(null);
JPanel panel_3 = new JPanel();
panel_3.setBorder(new LineBorder(new Color(0, 0, 0)));
panel_3.setBounds(367, 105, 750, 619);
contentPane.add(panel_3);
String[] columnNames = { "From", "Subject", "Date" };
inboxTableModel = new DefaultTableModel(columnNames, 0);
inboxTable = new JTable(inboxTableModel);
inboxTable.setFont(new Font("Times New Roman", Font.PLAIN, 16));
inboxTable.setRowHeight(24);
inboxTable.setDefaultEditor(Object.class, null);
panel_3.setLayout(null);
JScrollPane scrollPane = new JScrollPane(inboxTable);
scrollPane.setBounds(0, 0, 750, 619);
panel_3.add(scrollPane);
}
public void showUserDetails() {
String[] getDetails = fassade.sendUserDetails();
String fullName = getDetails[0];
String username = getDetails[1];
this.fullName.setText(this.fullName.getText() + fullName);
this.username.setText(this.username.getText() + username);
}
public void getAllTrashEmails() {
ArrayList<String> getEmails = fassade.sendAllEmailsToTrashWindow();
String[] splitEmail;
if (getEmails.size() > 0)
for (String tempEmail :getEmails ) {
splitEmail = tempEmail.split(",");
String from = splitEmail[0].toString();
String subject = splitEmail[1];
String date = splitEmail[2];
Object[] newEmail = {from, subject, date};
inboxTableModel.addRow(newEmail);
}
}
public void getFassade(EasyMail fassade) {
this.fassade = fassade;
}
public void showWindow() {
this.setVisible(true);
}
public void closeWindow() {
this.dispose();
}
public void showError(String error) {
JOptionPane.showMessageDialog(this, "Error", error, JOptionPane.ERROR_MESSAGE);
}
}

View File

@ -1,6 +1,6 @@
package main; package main;
import gui.RegisterWindow; import gui.*;
public class Main { public class Main {