implements Search Email logic

eature/gui
Obai Albek 2025-06-04 00:57:42 +02:00
parent eea5ccba6b
commit c71bece39b
9 changed files with 240 additions and 152 deletions

View File

@ -5,6 +5,7 @@ import java.util.ArrayList;
import domain.email.Email; import domain.email.Email;
import domain.email.EmailFolder; import domain.email.EmailFolder;
import domain.email.EmailNotFoundException;
import domain.user.*; import domain.user.*;
public class EasyMail { public class EasyMail {
@ -13,23 +14,26 @@ public class EasyMail {
public EasyMail() { public EasyMail() {
this.userManager = new UserManager(); this.userManager = new UserManager();
try { try {
this.currentUser = userManager.addUser ("obai","albek","obai.albek",1,1,"Januar",new char[] {'1','2','3','4','5','6'} , new char[]{'1','2','3','4','5','6'}); this.currentUser = userManager.addUser("obai", "albek", "obai.albek", 1, 1, "Januar",
//obai.albek@easymail.de new char[] { '1', '2', '3', '4', '5', '6' }, new char[] { '1', '2', '3', '4', '5', '6' });
} catch (Exception e) { // obai.albek@easymail.de
e.printStackTrace(); } catch (Exception e) {
} e.printStackTrace();
}
} }
public void userRegister(String firstname, String lastName, String email, int year, int day, String monthName,char[] password, char[] passwordConfirmation) throws Exception { public void userRegister(String firstname, String lastName, String email, int year, int day, String monthName,
this.currentUser = userManager.addUser(firstname, lastName, email, year, day, monthName, password,passwordConfirmation); char[] password, char[] passwordConfirmation) throws Exception {
this.currentUser = userManager.addUser(firstname, lastName, email, year, day, monthName, password,
passwordConfirmation);
} }
public boolean userSignIn(String username, char[] password) throws Exception { public boolean userSignIn(String username, char[] password) throws Exception {
this.currentUser = userManager.checkLogin(username, password); this.currentUser = userManager.checkLogin(username, password);
if (this.currentUser == null) if (this.currentUser == null)
return false; return false;
this.currentUser.getUsermail().signIn(); this.currentUser.getUsermail().signIn();
return this.currentUser.getUsermail().getStatus(); return this.currentUser.getUsermail().getStatus();
} }
@ -38,12 +42,12 @@ public class EasyMail {
return userManager.removeUser(username); return userManager.removeUser(username);
} }
public void updateUser(String firstName, String lastName, String username, int year, int day, String monthName, public void updateUser(String firstName, String lastName, String username, int year, int day, String monthName,
char[] password, char[] passwordConfirmation) char[] password, char[] passwordConfirmation) throws Exception {
throws Exception {
this.currentUser = userManager.updateUser(firstName, lastName, username, year, day, monthName, password,
this.currentUser = userManager.updateUser(firstName, lastName, username, year, day, monthName, password, passwordConfirmation); passwordConfirmation);
} }
public int getNumberOfUsers() { public int getNumberOfUsers() {
@ -64,58 +68,61 @@ public class EasyMail {
LocalDateTime timestamp = LocalDateTime.now(); LocalDateTime timestamp = LocalDateTime.now();
Email newEmail = new Email(sender, receiver, subject, content, timestamp); Email newEmail = new Email(sender, receiver, subject, content, timestamp);
sender.getUsermail().getSentFolder().addEmail(newEmail); sender.getUsermail().getSentFolder().addEmail(newEmail);
boolean sent = receiver.getUsermail().getInbox().addEmail(newEmail); boolean sent = receiver.getUsermail().getInbox().addEmail(newEmail);
return sent; return sent;
} }
public String searchEmailInInboxFolder(String subject) throws EmailNotFoundException {
if (subject.trim().isEmpty())
throw new IllegalArgumentException("subject field is required!");
Email email = this.currentUser.getUsermail().getInbox().getEmailBySubject(subject);
return email.showEmails();
}
public String[] sendUserDetails() { public String[] sendUserDetails() {
String[] details = new String[2]; String[] details = new String[2];
String name = this.currentUser.getFirstname() + " " + this.currentUser.getLastname(); String name = this.currentUser.getFirstname() + " " + this.currentUser.getLastname();
String username = this.currentUser.getUsermail().getUserEmail(); String username = this.currentUser.getUsermail().getUserEmail();
details[0] = name; details[0] = name;
details[1] = username; details[1] = username;
return details; return details;
} }
public String getUsernameFromCurrentUser() { public String getUsernameFromCurrentUser() {
return this.currentUser.getUsermail().getUserEmail(); return this.currentUser.getUsermail().getUserEmail();
} }
public ArrayList<String> sendAllEmailsToSentWindow() { public ArrayList<String> sendAllEmailsToSentWindow() {
ArrayList<Email> allEmails = currentUser.getUsermail().getSentFolder().listAllEmails(); ArrayList<Email> allEmails = currentUser.getUsermail().getSentFolder().listAllEmails();
return extractEmails(allEmails, true); // true = showEmailsInSent return extractEmails(allEmails, true); // true = showEmailsInSent
} }
public ArrayList<String> sendAllEmailsToInboxWindow() { public ArrayList<String> sendAllEmailsToInboxWindow() {
ArrayList<Email> allEmails = currentUser.getUsermail().getInbox().listAllEmails(); ArrayList<Email> allEmails = currentUser.getUsermail().getInbox().listAllEmails();
return extractEmails(allEmails, false); // false = normal showEmails return extractEmails(allEmails, false); // false = normal showEmails
} }
public ArrayList<String> sendAllEmailsToTrashWindow() { public ArrayList<String> sendAllEmailsToTrashWindow() {
ArrayList<Email> allEmails = currentUser.getUsermail().getTrashFolder().listAllEmails(); ArrayList<Email> allEmails = currentUser.getUsermail().getTrashFolder().listAllEmails();
return extractEmails(allEmails, false); return extractEmails(allEmails, false);
} }
private ArrayList<String> extractEmails(ArrayList<Email> emails, boolean isSent) { private ArrayList<String> extractEmails(ArrayList<Email> emails, boolean isSent) {
ArrayList<String> result = new ArrayList<>(); ArrayList<String> result = new ArrayList<>();
for (Email email : emails) { for (Email email : emails) {
if (isSent) if (isSent)
result.add(email.showEmailsInSent()); result.add(email.showEmailsInSent());
else else
result.add(email.showEmails()); result.add(email.showEmails());
} }
return result; return result;
} }
private void validateEmailOperation(String subject) { private void validateEmailOperation(String subject) {
if (subject == null || subject.trim().isEmpty()) { if (subject == null || subject.trim().isEmpty()) {
throw new IllegalArgumentException("Subject field is required!"); throw new IllegalArgumentException("Subject field is required!");
@ -131,8 +138,6 @@ public class EasyMail {
return this.currentUser.getUsermail().getTrashFolder().addEmail(removedEmail); return this.currentUser.getUsermail().getTrashFolder().addEmail(removedEmail);
} }
public boolean removeEmailFromInbox(String subject) throws Exception { public boolean removeEmailFromInbox(String subject) throws Exception {
return moveEmailToTrash(subject, this.currentUser.getUsermail().getInbox()); return moveEmailToTrash(subject, this.currentUser.getUsermail().getInbox());
} }
@ -146,8 +151,6 @@ public class EasyMail {
this.currentUser.getUsermail().getTrashFolder().removeEmail(subject); this.currentUser.getUsermail().getTrashFolder().removeEmail(subject);
} }
} }

View File

@ -61,5 +61,6 @@ public class Inbox implements EmailFolder {
return new ArrayList<>(receivedEmails); return new ArrayList<>(receivedEmails);
} }
} }

View File

@ -2,6 +2,9 @@ package gui;
import javax.swing.*; import javax.swing.*;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import domain.email.EmailNotFoundException;
import java.awt.*; import java.awt.*;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
@ -10,17 +13,19 @@ import java.util.ArrayList;
public class EasyMailWindow extends TemplateWindow { public class EasyMailWindow extends TemplateWindow {
private DefaultTableModel inboxTableModel; private DefaultTableModel inboxTableModel;
private JTextField searchField;
public EasyMailWindow() { public EasyMailWindow() {
super("EasyMail"); super("EasyMail");
initUI(); initUI();
showWindow();
} }
private void initUI() { private void initUI() {
initNavigationPanel(); initNavigationPanel();
initComposePanel(); initComposePanel();
initTablePanel(); initTablePanel();
getAllInboxEmails(); getAllInboxEmails("");
showUserDetails(); showUserDetails();
} }
@ -52,9 +57,9 @@ public class EasyMailWindow extends TemplateWindow {
} }
}); });
navigationPanel.add(trash); navigationPanel.add(trash);
} }
private void initComposePanel() { private void initComposePanel() {
JPanel composePanel = createPanel(367, 11, 750, 86, new Color(230, 230, 230), true); JPanel composePanel = createPanel(367, 11, 750, 86, new Color(230, 230, 230), true);
@ -71,7 +76,29 @@ public class EasyMailWindow extends TemplateWindow {
} }
}); });
composePanel.add(writeEmail); composePanel.add(writeEmail);
searchField = new PlaceholderTextField("Search By subject");
searchField.setBounds(500, 30, 150, 40);
composePanel.add(searchField);
JButton searchButton = new JButton("Search");
searchButton.setBounds(660, 30, 80, 40);
composePanel.add(searchButton);
searchButton.addActionListener(e -> handleSearching());
} }
public void handleSearching() {
try {
String getSubjct = searchField.getText();
String email = fassade.searchEmailInInboxFolder(getSubjct);
inboxTableModel.setRowCount(0);
getAllInboxEmails(email);
} catch (EmailNotFoundException e) {
this.showError(e.getMessage());
}
}
private void initTablePanel() { private void initTablePanel() {
JPanel tablePanel = createPanel(367, 105, 750, 619, null, true); JPanel tablePanel = createPanel(367, 105, 750, 619, null, true);
@ -109,23 +136,27 @@ public class EasyMailWindow extends TemplateWindow {
emailWindow.setEmailSentListener(() -> { emailWindow.setEmailSentListener(() -> {
inboxTableModel.setRowCount(0); inboxTableModel.setRowCount(0);
getAllInboxEmails(); getAllInboxEmails("");
}); });
} }
public void getAllInboxEmails() { public void getAllInboxEmails(String foundedEmail) {
if (fassade.getUsernameFromCurrentUser() == null) { if (foundedEmail.trim().isEmpty()) {
showError("No user is currently logged in!"); inboxTableModel.setRowCount(0);
return; ArrayList<String> getEmails = fassade.sendAllEmailsToInboxWindow();
if (getEmails != null && !getEmails.isEmpty())
for (String tempEmail : getEmails) {
String[] splitEmail = tempEmail.split(",");
Object[] newEmail = { splitEmail[0], splitEmail[1], splitEmail[2] };
inboxTableModel.addRow(newEmail);
}
}else {
String[] splitEmail = foundedEmail.split(",");
Object[] newEmail = { splitEmail[0], splitEmail[1], splitEmail[2] };
inboxTableModel.addRow(newEmail);
} }
inboxTableModel.setRowCount(0);
ArrayList<String> getEmails = fassade.sendAllEmailsToInboxWindow();
if (getEmails != null && !getEmails.isEmpty())
for (String tempEmail : getEmails) {
String[] splitEmail = tempEmail.split(",");
Object[] newEmail = { splitEmail[0], splitEmail[1], splitEmail[2] };
inboxTableModel.addRow(newEmail);
}
} }
} }

View File

@ -117,6 +117,7 @@ public class EditProfileWindow extends TemplateWindow {
if (updateListener != null) { if (updateListener != null) {
updateListener.onUpdateSuccess(); updateListener.onUpdateSuccess();
restInputs();
showInfo("Profile updated successfully!"); showInfo("Profile updated successfully!");
} }

View File

@ -0,0 +1,23 @@
package gui;
import javax.swing.*;
import java.awt.*;
public class PlaceholderTextField extends JTextField {
private String placeholder;
public PlaceholderTextField(String placeholder) {
this.placeholder = placeholder;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (getText().isEmpty() && !(FocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == this)) {
Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.GRAY);
g2.setFont(getFont().deriveFont(Font.ITALIC));
g2.drawString(placeholder, 5, getHeight() / 2 + getFont().getSize() / 2 - 2);
g2.dispose();
}
}
}

View File

@ -9,71 +9,86 @@ import java.util.ArrayList;
public class SentWindow extends TemplateWindow { public class SentWindow extends TemplateWindow {
private DefaultTableModel inboxTableModel; private DefaultTableModel inboxTableModel;
private JTextField searchField;
public SentWindow() { public SentWindow() {
super("Sent - EasyMail"); super("Sent - EasyMail");
initUI(); initUI();
} }
private void initUI() { private void initUI() {
initNavigationPanel(); initNavigationPanel();
initTablePanel(); initTablePanel();
initComposePanel(); initComposePanel();
showUserDetails(); showUserDetails();
} }
private void initComposePanel() {
JPanel composePanel = createPanel(367, 11, 750, 86, new Color(230, 230, 230), true);
contentPane.add(composePanel);
composePanel.setLayout(null);
}
private void initNavigationPanel() { private void initComposePanel() {
JPanel navigationPanel = createPanel(10, 273, 347, 451, new Color(230, 230, 230), true); JPanel composePanel = createPanel(367, 11, 750, 86, new Color(230, 230, 230), true);
contentPane.add(navigationPanel); contentPane.add(composePanel);
navigationPanel.setLayout(null); composePanel.setLayout(null);
JLabel inbox = createLabel("Inbox", 10, 11, 165, 39, 22); searchField = new PlaceholderTextField("Search By subject");
inbox.setForeground(Color.BLUE); searchField.setBounds(500, 30, 150, 40);
inbox.setCursor(new Cursor(Cursor.HAND_CURSOR)); composePanel.add(searchField);
inbox.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EasyMailWindow easyMailWindow = new EasyMailWindow();
closeWindow();
easyMailWindow.showWindow();
easyMailWindow.getAllInboxEmails();
}
});
navigationPanel.add(inbox);
JLabel trash = createLabel("Trash", 10, 61, 165, 39, 22); JButton searchButton = new JButton("Search");
trash.setForeground(Color.BLUE); searchButton.setBounds(660, 30, 80, 40);
trash.setCursor(new Cursor(Cursor.HAND_CURSOR)); composePanel.add(searchButton);
trash.addMouseListener(new MouseAdapter() { searchButton.addActionListener(e -> handleSearching());
@Override
public void mouseClicked(MouseEvent e) {
TrashWindow trashWindow = new TrashWindow();
closeWindow();
trashWindow.showWindow();
trashWindow.getAllTrashEmails();
}
});
navigationPanel.add(trash);
}
private void initTablePanel() { }
JPanel tablePanel = createPanel(367, 105, 750, 619, null, true);
contentPane.add(tablePanel);
tablePanel.setLayout(null);
JScrollPane scrollPane = createTable("To"); public void handleSearching() {
inboxTableModel = (DefaultTableModel) inboxTable.getModel(); String getSubjct = searchField.getText();
scrollPane.setBounds(0, 0, 750, 619);
tablePanel.add(scrollPane); }
}
private void initNavigationPanel() {
JPanel navigationPanel = createPanel(10, 273, 347, 451, new Color(230, 230, 230), true);
contentPane.add(navigationPanel);
navigationPanel.setLayout(null);
JLabel inbox = createLabel("Inbox", 10, 11, 165, 39, 22);
inbox.setForeground(Color.BLUE);
inbox.setCursor(new Cursor(Cursor.HAND_CURSOR));
inbox.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EasyMailWindow easyMailWindow = new EasyMailWindow();
closeWindow();
easyMailWindow.showWindow();
easyMailWindow.getAllInboxEmails("");
}
});
navigationPanel.add(inbox);
JLabel trash = createLabel("Trash", 10, 61, 165, 39, 22);
trash.setForeground(Color.BLUE);
trash.setCursor(new Cursor(Cursor.HAND_CURSOR));
trash.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
TrashWindow trashWindow = new TrashWindow();
closeWindow();
trashWindow.showWindow();
trashWindow.getAllTrashEmails();
}
});
navigationPanel.add(trash);
}
private void initTablePanel() {
JPanel tablePanel = createPanel(367, 105, 750, 619, null, true);
contentPane.add(tablePanel);
tablePanel.setLayout(null);
JScrollPane scrollPane = createTable("To");
inboxTableModel = (DefaultTableModel) inboxTable.getModel();
scrollPane.setBounds(0, 0, 750, 619);
tablePanel.add(scrollPane);
}
public void getAllSentEmails() { public void getAllSentEmails() {
ArrayList<String> getEmails = fassade.sendAllEmailsToSentWindow(); ArrayList<String> getEmails = fassade.sendAllEmailsToSentWindow();
@ -89,4 +104,3 @@ public class SentWindow extends TemplateWindow {
} }
} }
} }

View File

@ -29,6 +29,8 @@ public abstract class TemplateWindow extends JFrame {
protected static EasyMail fassade = new EasyMail(); protected static EasyMail fassade = new EasyMail();
protected JLabel fullName, username, editProfile; protected JLabel fullName, username, editProfile;
protected JTable inboxTable; protected JTable inboxTable;
private JPanel profilePanel;
public TemplateWindow(String title) { public TemplateWindow(String title) {
setTitle(title); setTitle(title);
@ -48,38 +50,50 @@ public abstract class TemplateWindow extends JFrame {
protected void showUserDetails() {
JPanel profilePanel = createPanel(10, 11, 347, 239, new Color(230, 230, 230), true);
contentPane.add(profilePanel);
profilePanel.setLayout(null);
JLabel profile = createLabel("Profile", 10, 11, 203, 41, 30);
profilePanel.add(profile);
editProfile = createLabel("Edit profile", 10, 189, 165, 39, 22);
editProfile.setForeground(Color.BLUE);
profilePanel.add(editProfile);
editProfile.setCursor(new Cursor(Cursor.HAND_CURSOR));
editProfile.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EditProfileWindow editProfile = new EditProfileWindow();
editProfile.setUpdateProfileListener(() -> {
showUserDetails();
});
}
});
String[] getDetails = fassade.sendUserDetails(); protected void showUserDetails() {
String fullName = getDetails[0]; if (profilePanel != null)
String username = getDetails[1]; contentPane.remove(profilePanel);
this.fullName = createLabel("",10,63, 327, 41,20);
this.username = createLabel("",10, 106, 327, 39,20); profilePanel = createPanel(10, 11, 347, 239, new Color(230, 230, 230), true);
this.fullName.setText("Full Name: " + fullName); contentPane.add(profilePanel);
this.username.setText("Email: " + username); profilePanel.setLayout(null);
profilePanel.add(this.fullName);
profilePanel.add(this.username); JLabel profile = createLabel("Profile", 10, 11, 203, 41, 30);
profilePanel.add(profile);
editProfile = createLabel("Edit profile", 10, 189, 165, 39, 22);
editProfile.setForeground(Color.BLUE);
profilePanel.add(editProfile);
editProfile.setCursor(new Cursor(Cursor.HAND_CURSOR));
editProfile.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EditProfileWindow editProfileWindow = new EditProfileWindow();
editProfileWindow.setUpdateProfileListener(() -> {
showUserDetails();
});
}
});
// User Details
String[] getDetails = fassade.sendUserDetails();
String fullName = getDetails[0];
String username = getDetails[1];
this.fullName = createLabel("", 10, 63, 327, 41, 20);
this.username = createLabel("", 10, 106, 327, 39, 20);
this.fullName.setText("Full Name: " + fullName);
this.username.setText("Email: " + username);
profilePanel.add(this.fullName);
profilePanel.add(this.username);
contentPane.revalidate();
contentPane.repaint();
} }
// Neue Methode // Neue Methode
protected JPanel createPanel(int x, int y, int width, int height, Color bgColor, boolean withBorder) { protected JPanel createPanel(int x, int y, int width, int height, Color bgColor, boolean withBorder) {
JPanel panel = new JPanel(); JPanel panel = new JPanel();

View File

@ -44,7 +44,7 @@ public class TrashWindow extends TemplateWindow {
EasyMailWindow easyMailWindow = new EasyMailWindow(); EasyMailWindow easyMailWindow = new EasyMailWindow();
closeWindow(); closeWindow();
easyMailWindow.showWindow(); easyMailWindow.showWindow();
easyMailWindow.getAllInboxEmails(); easyMailWindow.getAllInboxEmails("");
} }
}); });
navigationPanel.add(inbox); navigationPanel.add(inbox);

View File

@ -5,7 +5,8 @@ import gui.*;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
new RegisterWindow(); EasyMailWindow easy = new EasyMailWindow();
} }