From ad0b45cf13d37d02900af226da937aa61d0abe4c Mon Sep 17 00:00:00 2001 From: angelajiang Date: Mon, 10 Nov 2025 21:09:47 -0500 Subject: [PATCH 01/84] Rough AutoSave GUI --- .idea/.gitignore | 5 ++++ .idea/AutoSaveGUI | 44 ++++++++++++++++++++++++++++++++++++ .idea/Bill-Splitting-App.iml | 9 ++++++++ .idea/checkstyle-idea.xml | 15 ++++++++++++ .idea/misc.xml | 6 +++++ .idea/modules.xml | 8 +++++++ .idea/vcs.xml | 6 +++++ 7 files changed, 93 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/AutoSaveGUI create mode 100644 .idea/Bill-Splitting-App.iml create mode 100644 .idea/checkstyle-idea.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/AutoSaveGUI b/.idea/AutoSaveGUI new file mode 100644 index 0000000..8b0db1b --- /dev/null +++ b/.idea/AutoSaveGUI @@ -0,0 +1,44 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; + +public class AutoSave { + public static void main(String[] args) { + JFrame frame = new JFrame("Auto Save Demo"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(400, 200); + frame.setLayout(new BorderLayout()); + + JTextField inputField = new JTextField(); + frame.add(inputField, BorderLayout.CENTER); + + JLabel saveStatus = new JLabel("All changes saved.", SwingConstants.CENTER); + saveStatus.setForeground(new Color(0, 128,0)); + frame.add(saveStatus, BorderLayout.SOUTH); + + Timer[] timerHolder = new Timer[1]; + + inputField.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(keyEvent e) { + saveStatus.setText("Saving..."); + saveStatus.setForeground(Color.GRAY); + + if (timerHolder[0] != null && timerHolder[0].isRunning()) + timerHolder[0].stop(); + } + + timerHolder[0] = new Timer(1000, ev -> { + if (Math.random() < 0.85) { + saveStatus.setText("All changes saved.") + saveStatus.setForeground(new Color(0, 128, 0)); + } else { + saveStatus.setText("Changes failed to save.") + saveStatus.setForeground(Color.RED); + }); + timerHolder[0].setRepeats(false); + timerHolder[0].start(); + } + }); + frame.setVisible(true); +} \ No newline at end of file diff --git a/.idea/Bill-Splitting-App.iml b/.idea/Bill-Splitting-App.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/Bill-Splitting-App.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..0b111c4 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,15 @@ + + + + 11.0.1 + JavaOnly + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..e6be3f1 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..809d494 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From 0ce0ea6d08bd6f14468ebdc3a42973e1f0dded82 Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 12 Nov 2025 18:57:45 -0500 Subject: [PATCH 02/84] Created GroupViewFrame with Join Group, Create Group, and view My Group buttons --- src/main/view/GroupViewFrame.java | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/view/GroupViewFrame.java diff --git a/src/main/view/GroupViewFrame.java b/src/main/view/GroupViewFrame.java new file mode 100644 index 0000000..f680971 --- /dev/null +++ b/src/main/view/GroupViewFrame.java @@ -0,0 +1,33 @@ +package main.view; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class GroupViewFrame extends JFrame { + public GroupViewFrame() { + initializeUI(); + } + private void initializeUI(){ + setTitle("Group View (2)"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(300, 100); + + JButton join = new JButton("Join Group"); + JButton create = new JButton("Create Group"); + JButton view = new JButton("View My Group"); + + JPanel panel = new JPanel(); + panel.add(join); + panel.add(create); + panel.add(view); + this.add(panel); + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(()->{ + new GroupViewFrame().setVisible(true); + }); + } + } From c2a8075359c93639c79f4ebddd21eb6779dc3c6c Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 12 Nov 2025 19:18:48 -0500 Subject: [PATCH 03/84] UI for Join Group created. (2.1) --- src/main/view/JoinGroupFrame.java | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/view/JoinGroupFrame.java diff --git a/src/main/view/JoinGroupFrame.java b/src/main/view/JoinGroupFrame.java new file mode 100644 index 0000000..e230f76 --- /dev/null +++ b/src/main/view/JoinGroupFrame.java @@ -0,0 +1,34 @@ +package main.view; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class JoinGroupFrame extends JFrame { + int CODE_LENGTH = 15; + public JoinGroupFrame() { + initializeUI(); + } + private void initializeUI(){ + setTitle("Group View (2.1)"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(400, 200); + + JLabel code = new JLabel("Enter code: "); + JTextField codeField = new JTextField(CODE_LENGTH); + JButton submit = new JButton("Submit"); + + JPanel panel = new JPanel(); + panel.add(code); + panel.add(codeField); + panel.add(submit); + this.add(panel); + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(()->{ + new JoinGroupFrame().setVisible(true); + }); + } +} From 94483e54c84587f25a1ab7301b58a5ebffe4a172 Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 12 Nov 2025 19:33:15 -0500 Subject: [PATCH 04/84] UI for CreateGroupFrame created. (2.2) --- src/main/view/CreateGroupFrame.java | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/main/view/CreateGroupFrame.java diff --git a/src/main/view/CreateGroupFrame.java b/src/main/view/CreateGroupFrame.java new file mode 100644 index 0000000..5c59b65 --- /dev/null +++ b/src/main/view/CreateGroupFrame.java @@ -0,0 +1,44 @@ +package main.view; + +import javax.swing.*; +import java.awt.*; + +public class CreateGroupFrame extends JFrame { + + public CreateGroupFrame() { + initializeUI(); + } + + private void initializeUI() { + setTitle("Create Group (2.2)"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(500, 300); + setLocationRelativeTo(null); + + JLabel newGroupLabel = new JLabel("New Group: ", JLabel.LEFT); + + JLabel groupNameLabel = new JLabel("Group Name: ", JLabel.LEFT); + JTextField nameField = new JTextField(5); + JLabel groupID = new JLabel("Group ID: ", JLabel.LEFT); + + JButton submitButton = new JButton("Submit"); + + // Simple panel with components + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(8, 1, 10, 10)); + + panel.add(newGroupLabel); + panel.add(groupNameLabel); + panel.add(nameField); + panel.add(nameField); + panel.add(groupID); + panel.add(submitButton); + add(panel); + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + new CreateGroupFrame().setVisible(true); + }); + } +} From 521816f079ff9f409f467a9fa567601c5cbed445 Mon Sep 17 00:00:00 2001 From: amyjq Date: Mon, 10 Nov 2025 18:07:00 -0500 Subject: [PATCH 05/84] initial commit: - initialized group/user/expense class - created initial gui - started expense gui --- pom.xml | 57 +++++++++++++++++++++++++++++++++ src/main/model/Expense.java | 38 ++++++++++++++++++++++ src/main/model/Group.java | 25 +++++++++++++++ src/main/model/User.java | 26 +++++++++++++++ src/main/view/ExpenseDesc.java | 42 ++++++++++++++++++++++++ src/main/view/ExpenseFrame.java | 44 +++++++++++++++++++++++++ src/main/view/MainFrame.java | 27 ++++++++++++++++ 7 files changed, 259 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/model/Expense.java create mode 100644 src/main/model/Group.java create mode 100644 src/main/model/User.java create mode 100644 src/main/view/ExpenseDesc.java create mode 100644 src/main/view/ExpenseFrame.java create mode 100644 src/main/view/MainFrame.java diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..2a9ecf0 --- /dev/null +++ b/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + com.group14 + bill-splitter-app + 1.0-SNAPSHOT + jar + + BillSplitterApp + A bill splitting and expense tracking app + + + 11 + 11 + UTF-8 + + + + + + org.junit.jupiter + junit-jupiter-api + 5.8.2 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.8.2 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 11 + 11 + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + + + \ No newline at end of file diff --git a/src/main/model/Expense.java b/src/main/model/Expense.java new file mode 100644 index 0000000..a526b44 --- /dev/null +++ b/src/main/model/Expense.java @@ -0,0 +1,38 @@ +package main.model; + +import java.util.ArrayList; +import java.util.List; + +public class Expense { + private String id; + private double amount; + private String description; + private User paidBy; + private List participants; + + public Expense(String id, double amount, String description, User paidBy) { + this.id = id; + this.amount = amount; + this.description = description; + this.paidBy = paidBy; + this.participants = new ArrayList<>(); + } + + // Getters and setters + public String getId() { return id; } + public double getAmount() { return amount; } + public String getDescription() { return description; } + public User getPaidBy() { return paidBy; } + public List getParticipants() { return participants; } + + public void addParticipant(User user) { + if (!participants.contains(user)) { + participants.add(user); + } + } + + public double calculateEqualShare() { + if (participants.isEmpty()) return 0; + return amount / participants.size(); + } +} diff --git a/src/main/model/Group.java b/src/main/model/Group.java new file mode 100644 index 0000000..419d2a3 --- /dev/null +++ b/src/main/model/Group.java @@ -0,0 +1,25 @@ +package main.model; + +import java.util.*; + +public class Group { + // Core properties + private String groupId; + private String groupName; + + // Members and relationships + private List members; + private List expenses; + private Map balances; // Track who owes whom + + + public Group(String groupId, String groupName) { + this.groupId = groupId; + this.groupName = groupName; + this.members = new ArrayList<>(); + this.expenses = new ArrayList<>(); + this.balances = new HashMap<>(); + + + } +} \ No newline at end of file diff --git a/src/main/model/User.java b/src/main/model/User.java new file mode 100644 index 0000000..58978c3 --- /dev/null +++ b/src/main/model/User.java @@ -0,0 +1,26 @@ +package main.model; + +public class User { + private String id; + private String name; + private String password; + + public User(String id, String name, String password) { + this.id = id; + this.name = name; + this.password = password; + } + + // Getters and setters + public String getId() { return id; } + public String getName() { return name; } + public String getPassword() { return password; } + + public void setName(String name) { this.name = name; } + public void setPassword(String email) { this.password = email; } + + @Override + public String toString() { + return name; + } +} \ No newline at end of file diff --git a/src/main/view/ExpenseDesc.java b/src/main/view/ExpenseDesc.java new file mode 100644 index 0000000..406e453 --- /dev/null +++ b/src/main/view/ExpenseDesc.java @@ -0,0 +1,42 @@ +package main.view; + +import javax.swing.*; +import java.awt.*; + +public class ExpenseDesc extends JFrame { + + public ExpenseDesc() { + initializeUI(); + } + + private void initializeUI() { + setTitle("Add Expense"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(500, 300); + setLocationRelativeTo(null); + + JLabel titleLabel = new JLabel("Enter Amount and Description", JLabel.CENTER); + JTextField amountField = new JTextField(10); + JTextField descField = new JTextField(10); + JButton submitButton = new JButton("Submit"); + + // Simple panel with components + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(6, 1, 10, 10)); + + panel.add(titleLabel); + panel.add(new JLabel("Amount:")); + panel.add(amountField); + panel.add(new JLabel("Description:")); + panel.add(descField); + panel.add(submitButton); + + add(panel); + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + new ExpenseDesc().setVisible(true); + }); + } +} diff --git a/src/main/view/ExpenseFrame.java b/src/main/view/ExpenseFrame.java new file mode 100644 index 0000000..06e79e1 --- /dev/null +++ b/src/main/view/ExpenseFrame.java @@ -0,0 +1,44 @@ +package main.view; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class ExpenseFrame extends JFrame { + + public ExpenseFrame() { + initializeUI(); + } + + private void initializeUI() { + setTitle("Bill Splitter - Group 14"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(600, 400); + setLocationRelativeTo(null); + + JLabel welcomeLabel = new JLabel("Split Expense Here", JLabel.CENTER); + JButton fixedExpense = new JButton("Fixed Expense"); + + // Simple button listener + fixedExpense.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // Close current window + dispose(); + + // Open new screen + new ExpenseDesc().setVisible(true); + } + }); + + add(welcomeLabel, BorderLayout.NORTH); + add(fixedExpense, BorderLayout.CENTER); + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + new ExpenseFrame().setVisible(true); + }); + } +} \ No newline at end of file diff --git a/src/main/view/MainFrame.java b/src/main/view/MainFrame.java new file mode 100644 index 0000000..94b427f --- /dev/null +++ b/src/main/view/MainFrame.java @@ -0,0 +1,27 @@ +package main.view; + +import javax.swing.*; + +public class MainFrame extends JFrame { + + public MainFrame() { + initializeUI(); + } + + private void initializeUI() { + setTitle("Bill Splitter - Group 14"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(600, 400); + setLocationRelativeTo(null); + + // Add initial components + JLabel welcomeLabel = new JLabel("Welcome to Bill Splitter App!", JLabel.CENTER); + add(welcomeLabel); + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + new MainFrame().setVisible(true); + }); + } +} From 84a9f5cc372df1e0304ebbb72ca8c475da18debc Mon Sep 17 00:00:00 2001 From: amyjq Date: Mon, 10 Nov 2025 22:48:03 -0500 Subject: [PATCH 06/84] renamed --- src/main/{model => entities}/Expense.java | 2 +- src/main/{model => entities}/Group.java | 2 +- src/main/{model => entities}/User.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/main/{model => entities}/Expense.java (97%) rename src/main/{model => entities}/Group.java (95%) rename src/main/{model => entities}/User.java (96%) diff --git a/src/main/model/Expense.java b/src/main/entities/Expense.java similarity index 97% rename from src/main/model/Expense.java rename to src/main/entities/Expense.java index a526b44..60bdcf5 100644 --- a/src/main/model/Expense.java +++ b/src/main/entities/Expense.java @@ -1,4 +1,4 @@ -package main.model; +package main.entities; import java.util.ArrayList; import java.util.List; diff --git a/src/main/model/Group.java b/src/main/entities/Group.java similarity index 95% rename from src/main/model/Group.java rename to src/main/entities/Group.java index 419d2a3..254a85e 100644 --- a/src/main/model/Group.java +++ b/src/main/entities/Group.java @@ -1,4 +1,4 @@ -package main.model; +package main.entities; import java.util.*; diff --git a/src/main/model/User.java b/src/main/entities/User.java similarity index 96% rename from src/main/model/User.java rename to src/main/entities/User.java index 58978c3..2d336d3 100644 --- a/src/main/model/User.java +++ b/src/main/entities/User.java @@ -1,4 +1,4 @@ -package main.model; +package main.entities; public class User { private String id; From 752abb4fd2d0e12ad97172c1924c9abadd54dda8 Mon Sep 17 00:00:00 2001 From: amyjq Date: Tue, 11 Nov 2025 11:55:48 -0500 Subject: [PATCH 07/84] added participants field --- src/main/view/ExpenseDesc.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/view/ExpenseDesc.java b/src/main/view/ExpenseDesc.java index 406e453..a550028 100644 --- a/src/main/view/ExpenseDesc.java +++ b/src/main/view/ExpenseDesc.java @@ -15,22 +15,25 @@ private void initializeUI() { setSize(500, 300); setLocationRelativeTo(null); - JLabel titleLabel = new JLabel("Enter Amount and Description", JLabel.CENTER); + JLabel titleLabel = new JLabel("Enter Amount and Description and Participants ", JLabel.CENTER); JTextField amountField = new JTextField(10); JTextField descField = new JTextField(10); + JTextField participantsField = new JTextField(10); + JButton submitButton = new JButton("Submit"); // Simple panel with components JPanel panel = new JPanel(); - panel.setLayout(new GridLayout(6, 1, 10, 10)); + panel.setLayout(new GridLayout(8, 1, 10, 10)); panel.add(titleLabel); panel.add(new JLabel("Amount:")); panel.add(amountField); panel.add(new JLabel("Description:")); panel.add(descField); + panel.add(new JLabel("Participants:")); + panel.add(participantsField); panel.add(submitButton); - add(panel); } From fd3187380dea061bf382b135d4e40727e1f9b120 Mon Sep 17 00:00:00 2001 From: angelajiang Date: Wed, 12 Nov 2025 20:01:37 -0500 Subject: [PATCH 08/84] saving local changes before rebasing --- .idea/AutoSave.java | 45 ++++++++++++++++++++++++++++++++ .idea/workspace.xml | 62 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 .idea/AutoSave.java create mode 100644 .idea/workspace.xml diff --git a/.idea/AutoSave.java b/.idea/AutoSave.java new file mode 100644 index 0000000..3471c57 --- /dev/null +++ b/.idea/AutoSave.java @@ -0,0 +1,45 @@ +package main.view; + +import javax.swing.*; +import java.awt.*; + +public class AutoSave extends JFrame{ + public static void main(String[] args) { + JFrame frame = new JFrame("Auto Save Demo"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(400, 200); + frame.setLayout(new BorderLayout()); + + JTextField inputField = new JTextField(); + frame.add(inputField, BorderLayout.CENTER); + + JLabel saveStatus = new JLabel("All changes saved.", SwingConstants.CENTER); + saveStatus.setForeground(new Color(0, 128,0)); + frame.add(saveStatus, BorderLayout.SOUTH); + + Timer[] timerHolder = new Timer[1]; + + inputField.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(keyEvent e) { + saveStatus.setText("Saving..."); + saveStatus.setForeground(Color.GRAY); + + if (timerHolder[0] != null && timerHolder[0].isRunning()) + timerHolder[0].stop(); + } + + timerHolder[0] = new Timer(1000, ev -> { + if (Math.random() < 0.85) { + saveStatus.setText("All changes saved.") + saveStatus.setForeground(new Color(0, 128, 0)); + } else { + saveStatus.setText("Changes failed to save.") + saveStatus.setForeground(Color.RED); + }); + timerHolder[0].setRepeats(false); + timerHolder[0].start(); + } + }); + frame.setVisible(true); +} \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..a72340f --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + 1762785916007 + + + + \ No newline at end of file From 8c4acfd127846fa45577bf44d2c0a5d5ea95076c Mon Sep 17 00:00:00 2001 From: angelajiang Date: Wed, 12 Nov 2025 20:07:54 -0500 Subject: [PATCH 09/84] Moved AutoSave.java into src folder --- {.idea => src}/AutoSave.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {.idea => src}/AutoSave.java (100%) diff --git a/.idea/AutoSave.java b/src/AutoSave.java similarity index 100% rename from .idea/AutoSave.java rename to src/AutoSave.java From 2ccfbbd55a50b65c7c029d2924c0847c306a84b4 Mon Sep 17 00:00:00 2001 From: angelajiang Date: Wed, 12 Nov 2025 21:11:12 -0500 Subject: [PATCH 10/84] Added AutoSave panel and demo frame. --- src/AutoSave.java | 45 --------------------------------- src/main/view/AutoSave.java | 23 +++++++++++++++++ src/main/view/AutoSaveDemo.java | 18 +++++++++++++ 3 files changed, 41 insertions(+), 45 deletions(-) delete mode 100644 src/AutoSave.java create mode 100644 src/main/view/AutoSave.java create mode 100644 src/main/view/AutoSaveDemo.java diff --git a/src/AutoSave.java b/src/AutoSave.java deleted file mode 100644 index 3471c57..0000000 --- a/src/AutoSave.java +++ /dev/null @@ -1,45 +0,0 @@ -package main.view; - -import javax.swing.*; -import java.awt.*; - -public class AutoSave extends JFrame{ - public static void main(String[] args) { - JFrame frame = new JFrame("Auto Save Demo"); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setSize(400, 200); - frame.setLayout(new BorderLayout()); - - JTextField inputField = new JTextField(); - frame.add(inputField, BorderLayout.CENTER); - - JLabel saveStatus = new JLabel("All changes saved.", SwingConstants.CENTER); - saveStatus.setForeground(new Color(0, 128,0)); - frame.add(saveStatus, BorderLayout.SOUTH); - - Timer[] timerHolder = new Timer[1]; - - inputField.addKeyListener(new KeyAdapter() { - @Override - public void keyTyped(keyEvent e) { - saveStatus.setText("Saving..."); - saveStatus.setForeground(Color.GRAY); - - if (timerHolder[0] != null && timerHolder[0].isRunning()) - timerHolder[0].stop(); - } - - timerHolder[0] = new Timer(1000, ev -> { - if (Math.random() < 0.85) { - saveStatus.setText("All changes saved.") - saveStatus.setForeground(new Color(0, 128, 0)); - } else { - saveStatus.setText("Changes failed to save.") - saveStatus.setForeground(Color.RED); - }); - timerHolder[0].setRepeats(false); - timerHolder[0].start(); - } - }); - frame.setVisible(true); -} \ No newline at end of file diff --git a/src/main/view/AutoSave.java b/src/main/view/AutoSave.java new file mode 100644 index 0000000..1fdd4fc --- /dev/null +++ b/src/main/view/AutoSave.java @@ -0,0 +1,23 @@ +package main.view; + +import javax.swing.*; +import java.awt.*; + +public class AutoSave extends JPanel { + + private JLabel saveStatus; + + public AutoSave() { + setLayout(new BorderLayout()); + + saveStatus = new JLabel("All changes saved.", SwingConstants.CENTER); + saveStatus.setForeground(Color.GREEN); + + add(saveStatus, BorderLayout.SOUTH); + } + + public void setSaveStatus(String text, Color color) { + saveStatus.setText(text); + saveStatus.setForeground(color); + } +} \ No newline at end of file diff --git a/src/main/view/AutoSaveDemo.java b/src/main/view/AutoSaveDemo.java new file mode 100644 index 0000000..c0851a8 --- /dev/null +++ b/src/main/view/AutoSaveDemo.java @@ -0,0 +1,18 @@ +package main.view; + +import javax.swing.*; + +public class AutoSaveDemo { + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + JFrame frame = new JFrame("AutoSave Demo"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(400, 200); + + AutoSave autoSavePanel = new AutoSave(); + frame.add(autoSavePanel); + + frame.setVisible(true); + }); + } +} \ No newline at end of file From ad91978c91d474fbe3dd32d134b09c82b378a254 Mon Sep 17 00:00:00 2001 From: angelajiang Date: Wed, 12 Nov 2025 21:15:16 -0500 Subject: [PATCH 11/84] Save AutoSave panel. --- .idea/compiler.xml | 13 +++++ .idea/encodings.xml | 7 +++ .idea/jarRepositories.xml | 20 +++++++ .idea/misc.xml | 12 ++++ .idea/modules.xml | 4 ++ .idea/workspace.xml | 53 ++++++++++++------ bill-splitter-app.iml | 11 ++++ target/classes/main/entities/Expense.class | Bin 0 -> 1657 bytes target/classes/main/entities/Group.class | Bin 0 -> 836 bytes target/classes/main/entities/User.class | Bin 0 -> 994 bytes target/classes/main/view/AutoSave.class | Bin 0 -> 1002 bytes target/classes/main/view/AutoSaveDemo.class | Bin 0 -> 1472 bytes target/classes/main/view/ExpenseDesc.class | Bin 0 -> 2332 bytes target/classes/main/view/ExpenseFrame$1.class | Bin 0 -> 809 bytes target/classes/main/view/ExpenseFrame.class | Bin 0 -> 2012 bytes target/classes/main/view/MainFrame.class | Bin 0 -> 1651 bytes 16 files changed, 104 insertions(+), 16 deletions(-) create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 bill-splitter-app.iml create mode 100644 target/classes/main/entities/Expense.class create mode 100644 target/classes/main/entities/Group.class create mode 100644 target/classes/main/entities/User.class create mode 100644 target/classes/main/view/AutoSave.class create mode 100644 target/classes/main/view/AutoSaveDemo.class create mode 100644 target/classes/main/view/ExpenseDesc.class create mode 100644 target/classes/main/view/ExpenseFrame$1.class create mode 100644 target/classes/main/view/ExpenseFrame.class create mode 100644 target/classes/main/view/MainFrame.class diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b402903 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index e6be3f1..97d5724 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,18 @@ +<<<<<<< HEAD +======= + + + + + +>>>>>>> 62d198c (Save AutoSave panel changes.:) \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 809d494..73dcd45 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,11 @@ +<<<<<<< HEAD +======= + +>>>>>>> 62d198c (Save AutoSave panel changes.:) \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index a72340f..6193cfb 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,11 @@ - + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 211a16d..ae5d0c4 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,20 @@ - + + + + + + + + + + + + + + - { - "keyToString": { - "Application.AutoSaveDemo.executor": "Run", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "main", - "kotlin-language-version-configured": "true", - "project.structure.last.edited": "Modules", - "project.structure.proportion": "0.0", - "project.structure.side.proportion": "0.0" + +}]]> + + + + + diff --git a/src/main/usecase/AutoSaveController.java b/src/main/usecase/AutoSaveController.java new file mode 100644 index 0000000..8470036 --- /dev/null +++ b/src/main/usecase/AutoSaveController.java @@ -0,0 +1,22 @@ +package interface_adapters; + +import usecase.*; + +public class AutoSaveController{ + + private final AutoSaveInputBoundary interactor; + + public AutoSaveController(AutoSaveInputBoundary interactor) { + this.interactor = interactor; + } + + public void autosave(String content) { + AutoSaveRequestModel req = new AutoSaveRequestModel(content); + interactor.save(req); + } + + public String loadDraft() { + AutoSaveResponseModel res = interactor.load(); + return res.getContent(); + } +} \ No newline at end of file diff --git a/src/main/usecase/AutoSaveGateway.java b/src/main/usecase/AutoSaveGateway.java new file mode 100644 index 0000000..b9c229a --- /dev/null +++ b/src/main/usecase/AutoSaveGateway.java @@ -0,0 +1,6 @@ +package data; + +public interface AutoSaveGateway { + void saveDraft(String content); + String loadDraft(); +} \ No newline at end of file diff --git a/src/main/usecase/AutoSaveInputBoundary.java b/src/main/usecase/AutoSaveInputBoundary.java new file mode 100644 index 0000000..d2caeb1 --- /dev/null +++ b/src/main/usecase/AutoSaveInputBoundary.java @@ -0,0 +1,6 @@ +package usecase; + +public interface AutoSaveInputBoundary { + AutoSaveResponseModel save(AutoSaveRequest Model requestModel); + AutoSaveResponseModel load(); +} \ No newline at end of file diff --git a/src/main/usecase/AutoSaveInteractor.java b/src/main/usecase/AutoSaveInteractor.java new file mode 100644 index 0000000..582df39 --- /dev/null +++ b/src/main/usecase/AutoSaveInteractor.java @@ -0,0 +1,24 @@ +package usecase; + +import data.AutoSaveGateway; + +public class AutoSaveInteractor implements AutoSaveInputBoundary { + private final AutoSaveInteractor gateway; + + public AutoSaveInteractor(AutoSaveInteractor gateway) { + this.gateway = gateway; + } + + @Override + public AutoSaveResponseModel save(AutoSaveRequestModel requestModel) { + gateway.saveDraft(requestModel.getContent()); + return new AutoSaveResponseModel(true, requestModel.getContent()); + } + + @Override + public AutoSaveResponseModel load() { + String content = gateway.loadDraft(); + boolean success = content != null && !content.isEmpty(); + return new AutoSaveResponseModel(success, content); + } +} \ No newline at end of file diff --git a/src/main/usecase/AutoSaveRequestModel.java b/src/main/usecase/AutoSaveRequestModel.java new file mode 100644 index 0000000..7d6a2bc --- /dev/null +++ b/src/main/usecase/AutoSaveRequestModel.java @@ -0,0 +1,13 @@ +package usecase; + +public class AutoSaveRequestModel { + private final String content; + + public AutoSaveRequestModel(String content) { + this.content = content; + } + + public String getContent() { + return content; + } +} \ No newline at end of file diff --git a/src/main/usecase/AutoSaveResponseModel.java b/src/main/usecase/AutoSaveResponseModel.java new file mode 100644 index 0000000..5d3e02a --- /dev/null +++ b/src/main/usecase/AutoSaveResponseModel.java @@ -0,0 +1,19 @@ +package usecase; + +public class AutoSaveResponseModel { + private final boolean success; + private final String content; + + public AutoSaveResponseModel(boolean success, String content) { + this.success = success; + this.content = content; + } + + public boolean isSuccess() { + return success; + } + + public String getContent() { + return content; + } +} \ No newline at end of file diff --git a/src/main/usecase/FileAutoSaveGateway.java b/src/main/usecase/FileAutoSaveGateway.java new file mode 100644 index 0000000..1965e7f --- /dev/null +++ b/src/main/usecase/FileAutoSaveGateway.java @@ -0,0 +1,26 @@ +package data; + +import java.io.*; + +public class FileAutoSaveGateway implements AutoSaveGateway { + + private final File file = new File("autosave.txt"); + + @Override + public void saveDraft(String content) { + try (FileWriter writer = new FileWriter(file)) { + writer.write(content); + } catch (IOException e) { + throw new RuntimeException("Failed to save draft", e); + } + } + @Override + public String loadDraft() { + if (!file.exists()) return ""; + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + return read.readLine(); + } catch (IOException e) { + throw new RuntimeException("Failed to load draft", e); + } + } +} \ No newline at end of file diff --git a/src/main/view/AutoSave.java b/src/main/view/AutoSave.java index 1fdd4fc..41858d6 100644 --- a/src/main/view/AutoSave.java +++ b/src/main/view/AutoSave.java @@ -1,5 +1,9 @@ package main.view; +import interface_adapters.AutoSaveController; +import usecase.AutoSaveInteractor; +import data.FileAutoSaveGateway; + import javax.swing.*; import java.awt.*; @@ -12,8 +16,25 @@ public AutoSave() { saveStatus = new JLabel("All changes saved.", SwingConstants.CENTER); saveStatus.setForeground(Color.GREEN); - add(saveStatus, BorderLayout.SOUTH); + + FileAutoSaveGateway gateway = new FileAutoSaveGateway(); + AutoSaveInteractor interactor = new AutoSaveInteractor(gateway); + controller = new AutoSaveController(interactor); + + String draft = controller.loadDraft(); + if (!draft.isEmpty()) { + setSaveStatus("Load previous draft.", color.BLUE); + } + } + + public void onUserEdit(String newText) { + try { + controller.autosave(newText); + setSaveStatus("All changes saved.", Color.GREEN); + } catch (Exception e) { + setSaveStatus("Failed to save changes.", Color.RED); + } } public void setSaveStatus(String text, Color color) { From 491493d1d1b90ff8a87977f8b911fc10b410ea3d Mon Sep 17 00:00:00 2001 From: amyjq Date: Mon, 17 Nov 2025 22:35:17 -0500 Subject: [PATCH 29/84] changed participants to checkbox menu --- .idea/compiler.xml | 13 ++++++ .idea/encodings.xml | 7 +++ .idea/jarRepositories.xml | 20 ++++++++ .idea/misc.xml | 12 +++++ .idea/modules.xml | 8 ++++ .idea/vcs.xml | 6 +++ .idea/workspace.xml | 44 ++++++++++++++++++ src/main/view/ExpenseDesc.java | 41 ++++++++++++---- target/classes/main/entities/Expense.class | Bin 0 -> 1761 bytes target/classes/main/entities/Group.class | Bin 0 -> 836 bytes target/classes/main/entities/User.class | Bin 0 -> 994 bytes target/classes/main/view/ExpenseDesc.class | Bin 0 -> 3416 bytes target/classes/main/view/ExpenseFrame$1.class | Bin 0 -> 839 bytes target/classes/main/view/ExpenseFrame.class | Bin 0 -> 3094 bytes target/classes/main/view/MainFrame.class | Bin 0 -> 1651 bytes 15 files changed, 141 insertions(+), 10 deletions(-) create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 target/classes/main/entities/Expense.class create mode 100644 target/classes/main/entities/Group.class create mode 100644 target/classes/main/entities/User.class create mode 100644 target/classes/main/view/ExpenseDesc.class create mode 100644 target/classes/main/view/ExpenseFrame$1.class create mode 100644 target/classes/main/view/ExpenseFrame.class create mode 100644 target/classes/main/view/MainFrame.class diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b402903 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d4ba39c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..0f41f74 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..75bab78 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/view/ExpenseDesc.java b/src/main/view/ExpenseDesc.java index a1a58d5..9893aba 100644 --- a/src/main/view/ExpenseDesc.java +++ b/src/main/view/ExpenseDesc.java @@ -11,37 +11,58 @@ public ExpenseDesc() { } private void initializeUI() { - - setTitle("Add Expense"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setSize(500, 300); + setSize(500, 400); setLocationRelativeTo(null); - JLabel titleLabel = new JLabel("Enter Amount and Description and Participants ", JLabel.CENTER); + JLabel titleLabel = new JLabel("Enter Expense Details", JLabel.CENTER); + JTextField nameField = new JTextField(10); JTextField amountField = new JTextField(10); JTextField descField = new JTextField(10); - JTextField participantsField = new JTextField(10); String[] options = {"Utility", "Food", "Gifts"}; JComboBox comboBox = new JComboBox<>(options); JButton submitButton = new JButton("Submit"); - // Simple panel with components + // Create checkboxes for participants + JLabel participantsLabel = new JLabel("Participants:"); + JCheckBox participant1 = new JCheckBox("Amy"); + JCheckBox participant2 = new JCheckBox("Katie"); + JCheckBox participant3 = new JCheckBox("Tan"); + JCheckBox participant4 = new JCheckBox("Patricia"); + JCheckBox participant5 = new JCheckBox("Lucy"); + JCheckBox participant6 = new JCheckBox("Angela"); + + // Panel for checkboxes with grid layout + JPanel participantsPanel = new JPanel(); + participantsPanel.setLayout(new GridLayout(3, 2, 5, 5)); + participantsPanel.add(participant1); + participantsPanel.add(participant2); + participantsPanel.add(participant3); + participantsPanel.add(participant4); + participantsPanel.add(participant5); + participantsPanel.add(participant6); + + // Main panel with components JPanel panel = new JPanel(); - panel.setLayout(new GridLayout(10, 1, 10, 8)); + panel.setLayout(new GridLayout(0, 1, 10, 8)); + panel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20)); panel.add(titleLabel); + panel.add(new JLabel("Expense Name:")); + panel.add(nameField); panel.add(new JLabel("Amount:")); panel.add(amountField); panel.add(new JLabel("Description:")); panel.add(descField); - panel.add(new JLabel("Participants:")); - panel.add(participantsField); - panel.add(new JLabel("Category")); + panel.add(new JLabel("Category:")); panel.add(comboBox); + panel.add(participantsLabel); + panel.add(participantsPanel); panel.add(submitButton); + add(panel); } diff --git a/target/classes/main/entities/Expense.class b/target/classes/main/entities/Expense.class new file mode 100644 index 0000000000000000000000000000000000000000..a7e932b1ca66c13ce13790df48bffa8920b79e2e GIT binary patch literal 1761 zcmZ`)ZF3q`6n^dkAtVcJ2zepV)MyidXz`_5m6)1_RMXOz8EhQ=;LOdkLvJMuE{kLR z1Ag_Z{)y_0Os6{I5Aa7hK4)2h()G)|=bpXKdCqyxx$yTtfBXgD8tyE>LL!Z%jTGh- zE1s!N?drX=N3Ihn%3ZT{v9XFZ zUhiqsy75?{(0HEoLErUjX%rQfL%u;^I@Lqp*N+>fA1q)U35oNPjhC^dVE42i7{~Oq z7xY>1D9I2c_iKxI1>0%7YU4FrR>)0a%4danr|Si*n%I@nRD~nCYUQsaz^;wg1)b2X zmYmBrD%evUzE3P<;eWc#*_cSMbOM+a`Z>l2Y_nzpBd zfzNBZGgw3g*q=@@YC?S~>&O)cFP}22qi&0I7aGQM?+(t-T>o=@)}bfg=sLP{ zs(mBp$e9ct8p^UZ6D^twW|L~W!3ig$P%6Ke11sd`!)PcdM4jr>Q=iPk=*s>O9VJX)5#qHyQ433on| zaOapq;oZ=_%6l9n+8O#%c#rG*JpF_OV*$IBr%;u>A<~u75ZOvGImA+>m>Qx``4j73 zKE=imo4!DdX+qkj1Tbvu7xC{fT@T?;bR<(!PXd@eKG@Hj|E?k zWnP+PF2;gC!Qq&Bl6GMhyb%k&fg=_t9ht6qa~8ZA10FTFPVQsej57F|!9?C7h1=YF zhD#QHK`uJ%SolIZnFz(qahHB(afv^X+abZ~2t4jw5uZ|Sh0j8iTBmt3*7*V3C;ixx z@Xt_E_!+6(6P~go&l?IqcBKI$LiwiwE^}mdrmESB$RdgyL*9z*##^(Rl%}Fg=HNCt HEHwTF;m|)y literal 0 HcmV?d00001 diff --git a/target/classes/main/entities/Group.class b/target/classes/main/entities/Group.class new file mode 100644 index 0000000000000000000000000000000000000000..5032a72dc3aa8958af2ef15facffbb79d7d3e1d4 GIT binary patch literal 836 zcmah{TTc@~6#iygSh}wC28yVNiqJ0T`o=>EiSeFPc&IkM;X7F5?U{b+3cBf&V1)PxB2n&>vsVAc<8}F!9~%>0u}`-XYzv#hcX(3$GtPv z&jc0^bfmLGfkLC%Enx{I7oLwR@CE84siROuna;FI!z?PL}9s z&@v3mKFTJ%WPwL=q+C?VX2E%;hvAbXk)PT+%{)|4Ffl7WR&kBwBQ@%&BxS8ra*H=m zOTFgfhJh`qk7E_3Ds^#FpgLoICDYS4a_nJ!%Dds?4mKIklWe=MNL-#HCbY#uJ9-ew zEKiic_S~&Wd(i%U2=7vrvWsy{&HJK>L@oud@IRfwiNf}uqzX7>L1U;zWO+cj&4|w^@Bm`S2rxB3_V?kfMTA$h(uC!c~q_*)IGokcg0Y z;0N%d5VLk@P-7%?(%s(P&g|^m&tKnv0Cr^tO&rj$3jeLjo&Gbbh@JUK7kN6MZuGc&yhVJs zczXUfDF49{j{k6pmj7sp&X*ju%e_wo$ZVm`)xb8ndt~b~>lb)j!ya#B%KNH3lFp*W zlOLoeh3mMn>KyQts+#{5&SwS{NGm%}wsUH?C|FS|+$;sRu7W$I;9I5O&QUG$j5=i`Tg+;$Eh=>Pa&*6_xU|I1zd**_FX#Eo>Vn7n2hUyFC_D$H!)!RQS31nS I-0b_m0d7N*CfsVx zbxg;n4+`$xoScHOVA?A7QrRiTH@)@P1}074u0NGg9=`gS>%^>Yi?%yJmFYLe=s$9L1>A)2reG z0$t|~&$r4}&2apBUM65v!3VcEan&qerxPm1*-~TGWeq1Ws^SzKf0UIlRh;I*oIz95 z?2q#XJE3eDDjsE!g+`g-&d`N1XOWdtaBg#D&Kr(tYnYXdeIW`WCo6i|vnmB+*=^AA z$1o=yzsMxAJHq~$#U&k&qa@HF`y-GP*d6PMkT+vE#-iy3y*Z1^I-bOb=&@0$2xMc@ zu?`AT+}c(eK7x-bFmx<{kjcc8J??rH)0;BNzUwUu^p-u-@Xb@zn!g+#3G5C14m7Vr zb|JWy3q?j{4on?auoyt=zLygO(O=Ea7-a0(=(6Q9)aDLf^hv7GZ(-J&@;D4rOe z=Q80|xa%ocjyc%>ITGxsFwqgMxIw<@$o4pBqftq$lp}ykPvdz!yN-OS z*XsdxLo^edt%4z&V!gE(n4`G#81L{_8xgRjjhG;(P<(r&b^B23mIEm+d~}l^0kpT| zH{jB08wZbRv(Z{BxLjMW;(^v!*OPKQV7GjBPEcJ^)_U`R-1sc<-0&7ziZ0uzE>w&` zDLu&Ps}v%cX{X)Yp z@w$Rv>39Rb7T726h8~6x$Q1&sRAF3MpAwzb`0lUqk4|(cw0OpFDz;f4EV%CVMs0L! z^f6A$#W|)jF8==?h9=+rZhSgKnkNj~E?T}RTWZ>IOmD(A>UERfw%-Ws-;$HNg{R* z-07h(K8w!1?m~cdxkJM1NK^v1<)`O6h^bD)trD zu)mbjR&oE#1~t1u<&*7y#BeE*K2R(r(}#+swsfwTZ(GCRQl@PcNAm4!I9f_SvWk3O z36vgR#fiMShLffA*eWLS9RWEhNi86!B-t5|XC$cyS#XC)2Zr z$4c#Os=A6|6Z4s#Oh*$>T;i%lYiG1F+JN5`t=)26SCq=6q@qMJrKQ$YrAY6Pe{bQ# zO;j?e1HnxSGCfxrNw_^2<6hg~9*S}84Q?hGV>@@)ECPK?Wz=ZxiB?6f*-Wa5+9g@= zL{RWIaDa3-OWMP7r_jfO?!tCH*mfYt-7)lIl5fxwGN@oTTt0+u;a)t00o-PXy@Y*u z758BUgZKmP$Dc8TzhM}EM;8B}?tkGR-oYXKhp)Oe92VVt$PM6#c#zMv5gZj$7!fmg zL_EotSQ&ZYVN~40aq%qQV9(=(cmXHH%Y1je#s}7$mM3!Qk{5JbmH5jbgU3U-yzk-xZlBdNp&;&f8qtah#toI6Xxbc zX7qc^uY^!&_4~Bifgj+9A%ys|CBov{_!#gO8h5ZLf6f3?bZNQ;hd*KvNNIAoMoNYv zn6txG_VUNs8K01PL{Q>T&uKb;h6(vG`P=B+Pb0TpBkvWK@D;pCj>bDH_$_{q%>Mu) C8gcLd literal 0 HcmV?d00001 diff --git a/target/classes/main/view/ExpenseFrame$1.class b/target/classes/main/view/ExpenseFrame$1.class new file mode 100644 index 0000000000000000000000000000000000000000..cf20604cdc8882179e4ac2830a087acd83a03197 GIT binary patch literal 839 zcmaKqZBG+H5Xb-99=-NB+tNxw9>j;LZBY(P)E6}*21_KVK%zF$ciZa-ORjh1_9(_z zekBuyL=!)NAIdm;5GAp=$<6F-e*2%}{C3uL(G?eq`GPgvur3RSW$ zkZm-34vHw*D7%<4cx}9@fIU$9Fw$hBDlq*I^_;Ztpn`%iH5W6O6>u~qJ*8DYAOWlK zuGzCOC$N~NB##r1MieIAGe1#L*i|~AkYa)P#$|77_E={l8n9fct3uj78ulrEEz(Em2&C4eaf9b54}ohC<+7P29KBn^^dW3K;vso_Ax`yAoGR+L!=e`MGMm9YG}v1_q)jZRCq>+6?=WND!Rt4it+_J* literal 0 HcmV?d00001 diff --git a/target/classes/main/view/ExpenseFrame.class b/target/classes/main/view/ExpenseFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..9ec36eee388bc582d361c875191e432a242cba68 GIT binary patch literal 3094 zcmc&$Yj+#f72VgCJ!5$s+v6m}NeNDH5?jF$X+zUk;bF^<*vLw;9VZSA$ymC!CmGME zqmduYkiX~!Ld?QPlJ9FopbI;j(pELgN z|3CX2z;XOLjs`Sph#6=?vw(ToTD8`b#WmYqN=}aX)`}EpK54slaF0M^U;kVjI$AWu z4YVqUohz2@CRc5_mKCqwzzmSaCG&rIlO6NvfJ4Ro|K&h+Srj!teZdR|^f zmq63_^yp|-#}00m0^8AX3lBa$J(L|E)zM7@FIbkojy=2`&J3mRZ^fWh)gxikAa!xN?mboDH{qFQvj<4pK(s8@Mu3_78dS(ia9R$+v z8R!}Jy;7m)=rINM0RsndNI);jVAc*C60)PVteL^%!o7|k&9Nz3DS;N zl&1^Qw*uR932)y-#dg5J5hMjP+Rl(B0^2tcy*p~)hxids;=7EO3tgwB!*x~8dIGmZ z8CYvUGVQGtJeS-u2Mu?9T|^mcL6Xkn+z%`4iFDF)O8PR6V>qF-H%KXMQ5DnCa8jVF zPM5=_An;rrlw{kOy)N_Bm~o_Vp9*(K$FM->tYm7wpfsRcvRZwriB<|OcF|Y?y0^7p(6-*q@r$dG98#}2uPUEK<9xyPC8G-iA zfN94n7RfS`8ndO77Z|9`tjcnYdVRU*P|(THoRQC9M8h1p*$i4|qTyTwWHPL5bUh~v zN)rmT^9CNo&xj`pAM<>WLNmkadu3^K#!}x{3Zk20wyw0d0dxisxb5fG}R@+_muE>nVvo<>{r0Pbz zO6NAJl74OA5j-joCu4JV(dKcgxzG1g0#LZBt*QJ2~9Q`HpSlaBg2Hwx8S@2XG#4!Scn^Qm@OK0M z!24{cP2?&%OJ>3(7{Xe#azTi1>q_m@|7r(N5`Si(6giyHnZaNs6Pwkl7*Bnx0xNLX>K=nn!C*1*YJZ(!rWg*Z=$)3zC>rkxlZwX8FwT^ z8FyaCv3c{yjaTuLsq0A1n|EKuz1i??h?z+}-pk(hc|m zuM^LAad!ySGyx$T5mejp9G=8eJoyAJ<9GNyK~Ccm{(wIc<}AOGPxCIu6CS`bc$N%Z z#0Y(!CBS*yi{~)~4S!-pML{LnpLzEJcMhQ8OBSPR>UXP#V;WN7Z(IX^lMoutavePcJ-$>a38Zz*HQj5UI9Ads*j@}eW4{Yx(EVE26I{ AsQ>@~ literal 0 HcmV?d00001 diff --git a/target/classes/main/view/MainFrame.class b/target/classes/main/view/MainFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..4fbcc1cb713ada0d07de9a86245e1cb714a97480 GIT binary patch literal 1651 zcma)6+j1L45IrL)T6wd+$#+AH9Bhy`7bOrdpb&_aI8j(9V99m@Ph)G63|Z}L?T+k( zui#gBk*TDL51{xaik{sqTPCVh9yFtw>F#s-bZ`It@9Vz+tmCnb9P$lv-6%56jGLZTfL%zDUYomk_3$}yv#$l?w zAL0Tb(VM3Z64!0v(|#!0ieWBez>jpTp}L_8M4*X-g^&KPlgIakU&1oOg+1XPsII7J zRXLmS?J!)nv4oF}(kl$JLlVrGed6F#R7q~$=`gs%d8G23C0C}Jx(+VkGC4;*Qew8c zHlX8nF9`U)FX}d~qGsWmgX{Q=VR5kPEmQj)EvZsc#0=+UaHw7gk5k=FRY~e{5-(Ld zZ)*94gD=ZZ0sLJaNpsFF3;MYv z{26aZi`5yNqg3ide1_>H&y&_oZpo@(oQ)2@4CrvuPxQ{CX9O}e$wnnnsle4jReHv$2JT79KhH z5kE0pJniyS=bD#bQV9N(A7~Z5q7rlmPyY;dPUe&%-seHb7x9Xx)QetNe>>xWn=_8> zSD_d*fB(l6^4-3JEto}aaNlo9EleGoK_H@r&*NCc7TOG}Z)q|tJqy%POYb(N*_CR6 zWhz3BJ`bP(ngS@&`W2n(v@_aA++#4e59<#)q|ea_Pf_G}tI!(JtiZ*hyzNAMlK&seO}o}}{{YrvnlatdK4JupY9 zES^c_Ha36>+w^A^q?%X~oi`{wImYLOK5m#eERiLRGfy-ZNT54(pTk{jCiEG8pu2mx QPrq%tvB{@}9qeJ@KU>j{O#lD@ literal 0 HcmV?d00001 From 582ea8a793bc46b9566c7de456987620eb96b710 Mon Sep 17 00:00:00 2001 From: Katie Date: Tue, 18 Nov 2025 10:27:45 -0500 Subject: [PATCH 30/84] Created mock text and interactor for create_group --- .idea/workspace.xml | 94 +++++++++++++----- .../data_access/GroupDataAccessObject.java | 26 ----- .../InMemoryGroupDataAccessObject.java | 46 +++++++++ src/main/java/entities/Group.java | 2 +- .../CreateGroupDataAccessInterface.java | 35 +++++++ .../CreateGroupInputBoundary.java | 13 +++ .../create_group/CreateGroupInputData.java | 13 +++ .../create_group/CreateGroupInteractor.java | 27 +++++ .../CreateGroupOutputBoundary.java | 5 + .../create_group/CreateGroupOutputData.java | 20 ++++ .../join_group/JoinGroupInputData.java | 2 +- .../join_group/JoinGroupOutputData.java | 2 +- .../view_my_group/ViewMyGroupInputData.java | 2 +- .../view_my_group/ViewMyGroupOutputData.java | 2 +- .../CreateGroupDataAccessInterface.java | 16 --- .../create_group/CreateGroupInputData.java | 20 ---- .../create_group/CreateGroupOutputData.java | 18 ---- .../use_case/JoinGroupInteractorTest.java | 4 - .../CreateGroupInteractorTest.java | 21 ++++ target/classes/main/entities/Expense.class | Bin 1698 -> 0 bytes target/classes/main/entities/Group.class | Bin 836 -> 0 bytes target/classes/main/entities/User.class | Bin 994 -> 0 bytes .../classes/main/use_case/create_group.class | Bin 289 -> 0 bytes target/classes/main/use_case/join_group.class | Bin 283 -> 0 bytes target/classes/main/use_case/view_group.class | Bin 283 -> 0 bytes .../classes/main/view/CreateGroupFrame.class | Bin 2261 -> 0 bytes target/classes/main/view/ExpenseDesc.class | Bin 2332 -> 0 bytes target/classes/main/view/ExpenseFrame$1.class | Bin 839 -> 0 bytes target/classes/main/view/ExpenseFrame.class | Bin 2012 -> 0 bytes target/classes/main/view/GroupViewFrame.class | Bin 1758 -> 0 bytes target/classes/main/view/JoinGroupFrame.class | Bin 1908 -> 0 bytes target/classes/main/view/MainFrame.class | Bin 1651 -> 0 bytes target/classes/main/view/MyGroupFrame.class | Bin 3365 -> 0 bytes target/classes/main/view/SettleUpPanel.class | Bin 2569 -> 0 bytes 34 files changed, 254 insertions(+), 114 deletions(-) delete mode 100644 src/main/java/data_access/GroupDataAccessObject.java create mode 100644 src/main/java/data_access/InMemoryGroupDataAccessObject.java create mode 100644 src/main/java/use_case/create_group/CreateGroupDataAccessInterface.java create mode 100644 src/main/java/use_case/create_group/CreateGroupInputBoundary.java create mode 100644 src/main/java/use_case/create_group/CreateGroupInputData.java create mode 100644 src/main/java/use_case/create_group/CreateGroupInteractor.java create mode 100644 src/main/java/use_case/create_group/CreateGroupOutputBoundary.java create mode 100644 src/main/java/use_case/create_group/CreateGroupOutputData.java rename src/main/java/{use_cases => use_case}/join_group/JoinGroupInputData.java (87%) rename src/main/java/{use_cases => use_case}/join_group/JoinGroupOutputData.java (55%) rename src/main/java/{use_cases => use_case}/view_my_group/ViewMyGroupInputData.java (54%) rename src/main/java/{use_cases => use_case}/view_my_group/ViewMyGroupOutputData.java (54%) delete mode 100644 src/main/java/use_cases/create_group/CreateGroupDataAccessInterface.java delete mode 100644 src/main/java/use_cases/create_group/CreateGroupInputData.java delete mode 100644 src/main/java/use_cases/create_group/CreateGroupOutputData.java delete mode 100644 src/test/java/use_case/JoinGroupInteractorTest.java create mode 100644 src/test/java/use_case/create_group/CreateGroupInteractorTest.java delete mode 100644 target/classes/main/entities/Expense.class delete mode 100644 target/classes/main/entities/Group.class delete mode 100644 target/classes/main/entities/User.class delete mode 100644 target/classes/main/use_case/create_group.class delete mode 100644 target/classes/main/use_case/join_group.class delete mode 100644 target/classes/main/use_case/view_group.class delete mode 100644 target/classes/main/view/CreateGroupFrame.class delete mode 100644 target/classes/main/view/ExpenseDesc.class delete mode 100644 target/classes/main/view/ExpenseFrame$1.class delete mode 100644 target/classes/main/view/ExpenseFrame.class delete mode 100644 target/classes/main/view/GroupViewFrame.class delete mode 100644 target/classes/main/view/JoinGroupFrame.class delete mode 100644 target/classes/main/view/MainFrame.class delete mode 100644 target/classes/main/view/MyGroupFrame.class delete mode 100644 target/classes/main/view/SettleUpPanel.class diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3096519..06f19ce 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,23 +4,37 @@ - - - + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - { + "selectedUrlAndAccountId": { + "url": "https://github.com/amyjqian/Bill-Splitting-App.git", + "accountId": "deb1ad0f-e833-4c67-b696-1c96b6953a76" } -}]]> +} { "associatedIndex": 3 } @@ -66,6 +80,7 @@ - + + + + + + + + + @@ -150,7 +184,8 @@ @@ -176,6 +219,7 @@ - \ No newline at end of file diff --git a/src/main/java/data_access/GroupDataAccessObject.java b/src/main/java/data_access/GroupDataAccessObject.java deleted file mode 100644 index b523d1d..0000000 --- a/src/main/java/data_access/GroupDataAccessObject.java +++ /dev/null @@ -1,26 +0,0 @@ -package data_access; - -import entities.Group; -import use_cases.create_group.CreateGroupDataAccessInterface; - -import java.util.*; - -public class GroupDataAccessObject implements CreateGroupDataAccessInterface { - private HashMap groupMap; //private hashmap to test DAO - - public GroupDataAccessObject(){ - groupMap = new HashMap<>(); - } - - @Override - public Group createGroup(String groupID, String groupName) { - //create a new group - Group g = new Group("id1", "group1"); - - //add it to the "db" - groupMap.put("group1", g); - - return g; - } - -} diff --git a/src/main/java/data_access/InMemoryGroupDataAccessObject.java b/src/main/java/data_access/InMemoryGroupDataAccessObject.java new file mode 100644 index 0000000..5cf4485 --- /dev/null +++ b/src/main/java/data_access/InMemoryGroupDataAccessObject.java @@ -0,0 +1,46 @@ +package data_access; + +import entities.Group; +import use_case.create_group.CreateGroupDataAccessInterface; + +import java.util.*; + +public class InMemoryGroupDataAccessObject implements CreateGroupDataAccessInterface { + private HashMap groupMap; //private hashmap to test DAO + private String groupName; + public InMemoryGroupDataAccessObject(){ + groupMap = new HashMap<>(); + } + + @Override + public Group createGroup(String groupID) { + //create a new group + Group g = new Group(groupID); + + //POST it to the db + groupMap.put(groupID, null); + + return g; + } + + @Override + public Group getGroup(String groupID) { + //GET a group from the db by its id + return groupMap.get(groupID); + } + + @Override + public void setNewGroup(String id, Group group) { + //POST a corresponding group to an id + groupMap.replace(id, group); + } + + @Override + public void delete(String groupID) { + //remove a group from the db + groupMap.remove(groupID); + } + + + +} diff --git a/src/main/java/entities/Group.java b/src/main/java/entities/Group.java index f868723..b279b92 100644 --- a/src/main/java/entities/Group.java +++ b/src/main/java/entities/Group.java @@ -13,7 +13,7 @@ public class Group { private Map balances; // Track who owes whom - public Group(String groupId, String groupName) { + public Group(String groupId) { this.groupId = groupId; this.groupName = groupName; this.members = new ArrayList<>(); diff --git a/src/main/java/use_case/create_group/CreateGroupDataAccessInterface.java b/src/main/java/use_case/create_group/CreateGroupDataAccessInterface.java new file mode 100644 index 0000000..995d7df --- /dev/null +++ b/src/main/java/use_case/create_group/CreateGroupDataAccessInterface.java @@ -0,0 +1,35 @@ +package use_case.create_group; + +import entities.Group; + +/** + * DAO interface for the Create Group Use Case. + */ + +public interface CreateGroupDataAccessInterface { + /** + * Create a new group by groupID + * @param groupID + * @return group + */ + Group createGroup(String groupID); + + /** + * Fetch the group from the db by ID + * @param groupID + * @return group + */ + Group getGroup(String groupID); + + /** + * Modify the group associated with the id + * @param id + */ + void setNewGroup(String id, Group group); + + /** + * Delete the group associated with groupID + * @param groupID + */ + void delete(String groupID); +} diff --git a/src/main/java/use_case/create_group/CreateGroupInputBoundary.java b/src/main/java/use_case/create_group/CreateGroupInputBoundary.java new file mode 100644 index 0000000..76d4ee2 --- /dev/null +++ b/src/main/java/use_case/create_group/CreateGroupInputBoundary.java @@ -0,0 +1,13 @@ +package use_case.create_group; + +/** + * Input Boundary for the create_group use case. + */ +public interface CreateGroupInputBoundary { + + /** + * Executes the create_group use case. After this executes, + * a new group will be created. + */ + void execute(); +} \ No newline at end of file diff --git a/src/main/java/use_case/create_group/CreateGroupInputData.java b/src/main/java/use_case/create_group/CreateGroupInputData.java new file mode 100644 index 0000000..9314136 --- /dev/null +++ b/src/main/java/use_case/create_group/CreateGroupInputData.java @@ -0,0 +1,13 @@ +package use_case.create_group; + +public class CreateGroupInputData { + private final String groupName; + + public CreateGroupInputData(String groupName) { + this.groupName = groupName; + } + + public String getGroupName() { + return this.groupName; + } +} diff --git a/src/main/java/use_case/create_group/CreateGroupInteractor.java b/src/main/java/use_case/create_group/CreateGroupInteractor.java new file mode 100644 index 0000000..9431ce8 --- /dev/null +++ b/src/main/java/use_case/create_group/CreateGroupInteractor.java @@ -0,0 +1,27 @@ +package use_case.create_group; + +import entities.Group; + +public class CreateGroupInteractor implements CreateGroupInputBoundary{ + private CreateGroupDataAccessInterface userDataAccessObject; + private CreateGroupOutputBoundary createGroupPresenter; + + public CreateGroupInteractor(CreateGroupDataAccessInterface userDataAccessInterface, + CreateGroupOutputBoundary createGroupOutputBoundary) { + this.userDataAccessObject = userDataAccessInterface; + this.createGroupPresenter = createGroupOutputBoundary; + } + + @Override + public void execute() { + //implements the logic of the create_group use case + // * insert a new group in the db + // * instantiate the `CreateGroupOutputData`, which needs to contain NewGroup + // * tell the presenter to prepare the "view my group" view (2.3). + String test_id = "id2"; //placeholder for now + Group NewGroup = userDataAccessObject.createGroup("id2"); + //System.out.println("New Group: " + NewGroup); + final CreateGroupOutputData updateCreateGroupOutputData = new CreateGroupOutputData(test_id, NewGroup); + createGroupPresenter.prepareSuccessView(updateCreateGroupOutputData); + } +} diff --git a/src/main/java/use_case/create_group/CreateGroupOutputBoundary.java b/src/main/java/use_case/create_group/CreateGroupOutputBoundary.java new file mode 100644 index 0000000..ba25688 --- /dev/null +++ b/src/main/java/use_case/create_group/CreateGroupOutputBoundary.java @@ -0,0 +1,5 @@ +package use_case.create_group; + +public class CreateGroupOutputBoundary { + void prepareSuccessView(CreateGroupOutputData createGroupOutputData) {} +} diff --git a/src/main/java/use_case/create_group/CreateGroupOutputData.java b/src/main/java/use_case/create_group/CreateGroupOutputData.java new file mode 100644 index 0000000..4031794 --- /dev/null +++ b/src/main/java/use_case/create_group/CreateGroupOutputData.java @@ -0,0 +1,20 @@ +package use_case.create_group; + +import entities.Group; + +public class CreateGroupOutputData { + private final String groupID; + private final Group group; + + public CreateGroupOutputData(String groupID, Group group){ + this.groupID = groupID; + this.group = group; + } + + public String getGroupID() { + return groupID; + } + public Group getGroup() { + return group; + } +} diff --git a/src/main/java/use_cases/join_group/JoinGroupInputData.java b/src/main/java/use_case/join_group/JoinGroupInputData.java similarity index 87% rename from src/main/java/use_cases/join_group/JoinGroupInputData.java rename to src/main/java/use_case/join_group/JoinGroupInputData.java index 4ed276a..17d2586 100644 --- a/src/main/java/use_cases/join_group/JoinGroupInputData.java +++ b/src/main/java/use_case/join_group/JoinGroupInputData.java @@ -1,4 +1,4 @@ -package use_cases.join_group; +package use_case.join_group; public class JoinGroupInputData { private final String code; diff --git a/src/main/java/use_cases/join_group/JoinGroupOutputData.java b/src/main/java/use_case/join_group/JoinGroupOutputData.java similarity index 55% rename from src/main/java/use_cases/join_group/JoinGroupOutputData.java rename to src/main/java/use_case/join_group/JoinGroupOutputData.java index 9071403..d92d90b 100644 --- a/src/main/java/use_cases/join_group/JoinGroupOutputData.java +++ b/src/main/java/use_case/join_group/JoinGroupOutputData.java @@ -1,4 +1,4 @@ -package use_cases.join_group; +package use_case.join_group; public class JoinGroupOutputData { } diff --git a/src/main/java/use_cases/view_my_group/ViewMyGroupInputData.java b/src/main/java/use_case/view_my_group/ViewMyGroupInputData.java similarity index 54% rename from src/main/java/use_cases/view_my_group/ViewMyGroupInputData.java rename to src/main/java/use_case/view_my_group/ViewMyGroupInputData.java index bd8d019..f129549 100644 --- a/src/main/java/use_cases/view_my_group/ViewMyGroupInputData.java +++ b/src/main/java/use_case/view_my_group/ViewMyGroupInputData.java @@ -1,4 +1,4 @@ -package use_cases.view_my_group; +package use_case.view_my_group; public class ViewMyGroupInputData { } diff --git a/src/main/java/use_cases/view_my_group/ViewMyGroupOutputData.java b/src/main/java/use_case/view_my_group/ViewMyGroupOutputData.java similarity index 54% rename from src/main/java/use_cases/view_my_group/ViewMyGroupOutputData.java rename to src/main/java/use_case/view_my_group/ViewMyGroupOutputData.java index 41d40e0..e4ca8f9 100644 --- a/src/main/java/use_cases/view_my_group/ViewMyGroupOutputData.java +++ b/src/main/java/use_case/view_my_group/ViewMyGroupOutputData.java @@ -1,4 +1,4 @@ -package use_cases.view_my_group; +package use_case.view_my_group; public class ViewMyGroupOutputData { } diff --git a/src/main/java/use_cases/create_group/CreateGroupDataAccessInterface.java b/src/main/java/use_cases/create_group/CreateGroupDataAccessInterface.java deleted file mode 100644 index 111ac38..0000000 --- a/src/main/java/use_cases/create_group/CreateGroupDataAccessInterface.java +++ /dev/null @@ -1,16 +0,0 @@ -package use_cases.create_group; - -import entities.Group; - -/** - * DAO interface for the Create Group Use Case. - */ - -public interface CreateGroupDataAccessInterface { - /** - * Create a new group - * @param groupID - * @param groupName - */ - Group createGroup(String groupID, String groupName); -} diff --git a/src/main/java/use_cases/create_group/CreateGroupInputData.java b/src/main/java/use_cases/create_group/CreateGroupInputData.java deleted file mode 100644 index 9150112..0000000 --- a/src/main/java/use_cases/create_group/CreateGroupInputData.java +++ /dev/null @@ -1,20 +0,0 @@ -package use_cases.create_group; - -public class CreateGroupInputData { - private final String groupName; - private final String groupID; - - public CreateGroupInputData(String groupName, String groupID){ - this.groupName = groupName; - this.groupID = groupID; - } - - public String getGroupName() - { - return this.groupName; - } - - public String getGroupID(){ - return this.groupID; - } -} diff --git a/src/main/java/use_cases/create_group/CreateGroupOutputData.java b/src/main/java/use_cases/create_group/CreateGroupOutputData.java deleted file mode 100644 index 863b0bc..0000000 --- a/src/main/java/use_cases/create_group/CreateGroupOutputData.java +++ /dev/null @@ -1,18 +0,0 @@ -package use_cases.create_group; - -public class CreateGroupOutputData { - private final String groupID; - private final String groupName; - - public CreateGroupOutputData(String groupID, String name){ - this.groupID = groupID; - this.groupName = name; - } - - public String getGroupID() { - return groupID; - } - public String getGroupName() { - return groupName; - } -} diff --git a/src/test/java/use_case/JoinGroupInteractorTest.java b/src/test/java/use_case/JoinGroupInteractorTest.java deleted file mode 100644 index 78180e4..0000000 --- a/src/test/java/use_case/JoinGroupInteractorTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package use_case; - -public class JoinGroupInteractorTest { -} diff --git a/src/test/java/use_case/create_group/CreateGroupInteractorTest.java b/src/test/java/use_case/create_group/CreateGroupInteractorTest.java new file mode 100644 index 0000000..80e9a38 --- /dev/null +++ b/src/test/java/use_case/create_group/CreateGroupInteractorTest.java @@ -0,0 +1,21 @@ +package use_case.create_group; + +import data_access.InMemoryGroupDataAccessObject; + +//import static org.junit.jupiter.api.Assertions.assertNull; + +public class CreateGroupInteractorTest { + void mockTest(){ + InMemoryGroupDataAccessObject userRepository = new InMemoryGroupDataAccessObject(); + CreateGroupOutputBoundary testPresenter = new CreateGroupOutputBoundary(); + CreateGroupInputBoundary interactor = new CreateGroupInteractor(userRepository, testPresenter); + interactor.execute(); + + } + + public static void main(String[] args) { + new CreateGroupInteractorTest().mockTest(); + } +} + + diff --git a/target/classes/main/entities/Expense.class b/target/classes/main/entities/Expense.class deleted file mode 100644 index ff930b65a9a2bfc65a506bae91469ba54b4610af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1698 zcmZ`)?Q+vb6g}&YI3J22&X)}|;iFJnZZU0XX>l4za40E;GGhn>KbYCrny}!=uC(qH zUVvw4UjmrH!_dy~06Y}KSxLmksDHGpt9$M__uO6k-TQyv0=R%1(?}tmL&icD69R`H z$vv>uIHx8&tRc>bYLv z3giM;>yFzN5cdtlwr~iC1yYKkd}Bz`)V}ieY9=RdVIB+Qll$GiM`BSo;Ux>p20GJr zgO;y)T6H}WFIqT)qfGBf)!uv}u+aEa%$>mXYdL%&Fdy>uwdzzid|y6ks6bES7}BQB zaSJDKQo!m-U#phtNlynfA`%&bOnz+!U*dEQXDob$l7Ky|X+8@~wz{6C8^kV_Mmmga ztd;MZ0*-}>L8oQAZQj4Ja28eirGl;fo@N&`In4al!gu&yAQPykG?d|OfvKk2^Q7+k zjGP%0xR%uZdQD($R88!6eMDd!N`jYnDBw!BO}ax3<+(Te`@61xTkduk$v3(!+1Zi4 zGVgIPqaP|dusl{RJ{VM!-E;Le55YpI{J92p$j=+`{MmDzMl(_$jy_7c70-N$RT8F7 zxkTOiWT5$vgu{^vls*gouZ=cGHd2v2mXfGL%lbTe0<%pmTaRzZUhK_0?P~QqQoCD! z^kt{{P?|YTH@khm3^41I2AFe-nE@7^Vs?On^B<1gdySO= zR$qn%f8z5bivcz=EIdUyHU-RM4n^d#%AG@DKQrSz2}yyAsBtwrBVB|$Bi=MrF;|+E z%+55B<@YuG63eV|HThZR6=q*>lY$X25eAn-5-UoGNd(q$i4oIdmDwM`bI-@Xg+%b> zMCQeD=3*jv1DglTL)nFK@R3CD71Sv=l05{kj)RXTfTKxok^3rsjTJm#F=KC$#;sP~ z;8Y6#z>Z(aDcm*FOowLLT!9tLa&`qCG&8xS2z)TPBCc^Z0^1=<6uABEz~?(0pYeIc vlz)S-1y5Jje$KbKC~{8VS=S68A~gRq;4hwy(<9xi#AGpr&63xdmO|qLXj(ZE diff --git a/target/classes/main/entities/Group.class b/target/classes/main/entities/Group.class deleted file mode 100644 index 5032a72dc3aa8958af2ef15facffbb79d7d3e1d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmah{TTc@~6#iygSh}wC28yVNiqJ0T`o=>EiSeFPc&IkM;X7F5?U{b+3cBf&V1)PxB2n&>vsVAc<8}F!9~%>0u}`-XYzv#hcX(3$GtPv z&jc0^bfmLGfkLC%Enx{I7oLwR@CE84siROuna;FI!z?PL}9s z&@v3mKFTJ%WPwL=q+C?VX2E%;hvAbXk)PT+%{)|4Ffl7WR&kBwBQ@%&BxS8ra*H=m zOTFgfhJh`qk7E_3Ds^#FpgLoICDYS4a_nJ!%Dds?4mKIklWe=MNL-#HCbY#uJ9-ew zEKiic_S~&Wd(i%U2=7vrvWsy{&HJK>L@oud@IRfwiNf}uqzX7>L1U;zWO+cj&4|w^@Bm`S2rxB3_V?kfMTA$h(uC!c~q_*)IGokcg0Y z;0N%d5VLk@P-7%?(%s(P&g|^m&tKnv0Cr^tO&rj$3jeLjo&Gbbh@JUK7kN6MZuGc&yhVJs zczXUfDF49{j{k6pmj7sp&X*ju%e_wo$ZVm`)xb8ndt~b~>lb)j!ya#B%KNH3lFp*W zlOLoeh3mMn>KyQts+#{5&SwS{NGm%}wsUH?C|FS|+$;sRu7W$I;9I5O&QUG$j5=i`Tg+;$Eh=>Pa&*6_xU|I1zd**_FX#Eo>Vn7n2hUyFC_D$H!)!RQS31nS I-0b_m0d7N*U649ObSUatIfqrQN)vQR_+Ly&4E+K8D1@)- zz=AD3`#np~_V>@%7Qh|GIU>Xvk|9zI2;()sv#GdVnOV6O+Yts2u6Eso5MNy{G8_=j zH|%QDx3aX{im_g}ljX`c{Tm^9Y+i&gDqJm3{iYQE%w?s@S6{4d9id>l@5e*WRMT#J|(b=5BS@vDzNB%1n5(OW?M@89- zkf_*|W_M<#+1;Px*EfJUrZGJD5rPCEMucf4_fpi-Y{jamRM`_oOKo)jMDXt)@(34% zn?`CQhE8ot*(p(3Z8qE14m(2dY~K|j&9qUkLsO{sO%^pP*O@J4oy%4`{woIkhwccs z*?)!$LcF#^TdEiBT++W?Gj}QO5b*;ph?8GnyksWM90(sjK?fE*#EfnX_!u)L=RV{* LVMe%O^pKtabQ3*0 diff --git a/target/classes/main/use_case/view_group.class b/target/classes/main/use_case/view_group.class deleted file mode 100644 index e781d101dcfa5a31c3ec2b17af3c0c27769b223d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmZ`!yKcfj5S;Y`gF`T)LUeRV3a(6%hz5zu3I)imbv7sGkg+2_$akfRM8OB}QBn2~ z5*54B?9Qw-yLBWX!nV#HZsXs8HHsk^GH_O@T=%FpSmVY z!h42q1bJjM+j^$%RMOZ>|B+HY)XEpmpFKaL9gdpFU`!zGt6;?nYzCbuRCO*T zTQZY+;4z{3DEhdGeV7n9K;;GXKz8h)Y`ea?)mEMiEY}f86e^MKeiH|f6G&0F&NKvu z3YGZmkcq>1kCAv*b=O1F+sfv;sa9Np{c#3zD=3xSR@-%y6EKGqj=m05Rjw&Jjbj3P zYHBO0ZZ2=&2u^5VrvxV7QV#P-<9&flT?H{BH3B}DPoY4IzE-TLC&6_~*-Zl{QPfT+ z(m2gL8g9pnjVlXz%h%Rt1;+cVuXcjKb<#M;X4X4vEh{i^2IsY#u@pXhy_{v~DBHlS zX2!+XS4qRL=vmFGeCl>+e*u@Y{T#t1q!FmIxNPDRkSfC()KF94P!EuiY)LwDLwR9C zXK}^E=eSCG$!1fa*rVM8d&GwRUTErE$&$#|OkBqzJ$M~cQNO#JP3ELfi`|f!873_5IC-FqYqBh{!%pz zO&9WkTn}9DDVfpg-Tl=&*0E6(@rHDow(_T{uKT#to`19O9!a0!%G0*$Rsa8oQOI}O z_D)9Zxh!qFZUu^sGAoXwys|BQU->C)2~59%$=k|Hfyf+rw<Aj!H_ugY9WHJ|6uU_M#?1g$_#D9?pJ^Hl^J(A?cV?uFRoo5rcppWML=7qa0lyZr zW)~yHWEa`unD~24obF<>D7rYfgCmV>erOxVtKsXkeqGwZ$wqn`Gqq55O3UUFJ2=zG zmbUT1+|UkY8{7D3E}2X2;6fvlPGpRXv5k+rn9n6ob@AEVT#_;La;9&|C8BL^NUy~l zQ!3wmRbLI`%y%y<7~#D-iV5C_2a&}zuex*GUBV=;@hV%!AvAbx*}PhO9K|!_@go8K z3CHm>PT&Qm@C&UpJ~tu^Vtl6Y9AD8^&|e$(_%=YV8@P|JiS0G6-%yrdgk^k-@7R_G z7V$kKa~j4P)+22Bn;~w}ODq7tT|K<+T1hhtQ qZfQRvYlhCmdV+6LtVcnFKDZn;C*BRuARhZ2L5O*|nGxqkt!1uUxo diff --git a/target/classes/main/view/ExpenseDesc.class b/target/classes/main/view/ExpenseDesc.class deleted file mode 100644 index 6d7a1ca64e04f8628f1dd8ee40df8fd618c44fc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2332 zcma)8T~iZR7=8|fB&@51AY!m;RIni`Y3+v+}!wq8AMvnf9u^>GbFHy3^3=?~_!C*~VPHD|j z>!r&Zb>;YKTKOvirZ%ypZ9P`EX4BX!u;*g6ns4c7Cw(R|=od))Dp;@rn}G%kWgWj{ zOGd8*9+Q}iA`Y0?k3oThRGwD%Wy21pY}Z%U>&laXfs&@c z8!cZYUHcW!s+Q%Z+o1hfyru2mCZfbKLb8N+Oq|DrK(9tJ)D$=rLobreNk^_KFYICo z7fieh%_CW@3KV17F{~pBbT%N34;VcHctYbhp2ieO7Q=ZWjmrXi<4998jSE>4{i=ys zTw`FbL8crijKz3%v*9>$*;bPV%9u-G-o$m>5EzaFThRk?E3j;mTKOci<*d1nR9Uj| zJFE$L+x8c+v0EomF|mMK0tUfaw0w)jffD)v@Mnz1y5nb@5)uKP*RCD#r7z?1bk6+CdOeg?_DBwXF5x(O@Xc?Nt0 zDKt#1VO`+3wvDc(sPUz87?m#MeYq02-X>A4#dm+lC%a`7MZC%z!dCuB*>xW^>XR?l z9FueyE^O9ST>bwaMj>Br8=r}m=P7C16)RBekvZ!)%A2yK?<+rr#{#1-V6t0zDSRn# z*D z%2>kPP>)}#$dP!06#sxfi&?XYeZ^!G*Ig>7};xOiVi6mgW+XIM<`sVvc#w+};6U5rZshFU#D=&vGAk84M%KFU0^a z_x-%72QiHyUTnhz=nx*^Fg#wPPjM9AAdl~f{0}&epKt=dU@(-L0!Mqv))&g@B zKjI!fCY&XFhfnY++i)J=;xoQ=GsaVV&bI_3twCa$J-mY&R#0Vby->IxHG)4qS{;3c zE5NV#aHkmklLY)~@hjHR%~d=AGKL<}mXkt@Eao=Sg#ROgbW{5gAu}RBMFMh)sXe5; ai-p@W&0#@r? zdthThU@1*Wo+KVkC``QPexjnVuXI8o#R7}1tKQZgFlQqgF|O2CA#ERzhZMh&X@E*U z@?|iPu`>S`hnA_Az`_;8=319a^oo*$XtXO$krRqpUy^A~yA;2V;xUZ`mRtR)Y4^+% zx+XEfSvCGA;)1-6j$@xTl_|*F-@Sco;2gIX`az^sxPP9Li;n4vYZ|6xpgz*uErI+t z>EvakxtH!%$Tiytq}HTyo98GGftwKJvY90wuMB^)SY+Se-8y@7;&fKOLUhhxe@-<^ zY;$}QsN)vf+PMnL%rwhMX#y*}pJCajGK=rvE?a}$xxiLCUm#9#?K>)aXSi;iV*Zj} vM3$uu*i5Z3_cBiPPn;^6xW`Zn_gS041GLy%Jfv-`rYA)_Wbd%Xyo1+od7Zf1 diff --git a/target/classes/main/view/ExpenseFrame.class b/target/classes/main/view/ExpenseFrame.class deleted file mode 100644 index f4bfa8e83d2e4b0186d6a29aa95a508d97b5a54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2012 zcma)7Yg5}s6g>-$ZHyAI34}mPoy2baAaUr6wocQ=P6(y~S`0KKeXZ>U7G%jIt$FlU z^oR6IznDyz=@01iH+6bfRzWm0Q_on}yL%t!o_p5%lmkuj?ECs)%w0S3{2uCLyUau1cu>C zt`?k48+Z$EQzbexou(hUCM>cCV%=f55g_1)s#JB_9mf{7A`CIS^KYt5-VjzCw`kw* zFdeXwUKFlKU>0nyiZBwuEc)W2dX)m?zFx99Qk?L4RuCGn7e7REQxTN`207Xzr_xJ<-&h$MHES zu}am2n;dNsdx@ z48zhsaQ21CslfT@ees>;>q}}-_pxN)E0_!k($1#zB$d;ud!FAUQ*~Oj8Zo6UR=Vwm zaMv{)(uP)F$vM)?M91dbdJn@>b~xD-KJQOy1QifAK;$m znpj;Co>~@~14=qtaUA6-mv@$h+I3pqD54`#a7}2#z;l1qNn-B7WX{i#Xu6szQ)OA?ZrTYo_Vt?U8+78xJ5%4pqm9m zKsOdqdM?wdOqP)yDx827dWii-ivg_A^BM-}nV^7S3O2AxE2Hm>uknrVN3V$>(XZsE z{g(gjdg5Le?!>Bw*m5bvOWc`@DO;3%6Vb^0tIr^e(^&4&#(oICbXu5B)NcH;}r3& z6D&r0sOdb+r?Q_XPv8qg(+k=kz<2nbte!>@KhQ5tZIgiih@a@YM>{F-4%U+C^c8 zijv%tzlrU75)%xQflFTb0teY`# z4l`7gobQTfyl43}%kjj+u5h_89h)I;)27S$uc0PcqV;&ckEYnF`VlZm1;Jyg&lK6ySBH*!p6q+<#`L}$V+!mIO0%Gc6 z8YrSfBJy^dp%jtihkm){bh?f$Y`qu^;q<{M7JKce_e$hI7OIK@U_mRY{5V^sM2cd+t6bM42jBvzXqEY1%(wKaJy{@uh4Lu zSG{iaecA(-p}?)9t{8Ox|CeFO562D;ZIrpjEvqSgL2WYXwk_P6#XV1W8lEy-c~6tG z=xO+gA@^Zdnwd}wT%sn7&@0R z@L%8;{=7>V_aR1XXDrU_;e>5UkI1$YAI#oeO%i)#Z@5`zywvEBve!MeVj%PX_&~M zf*GPTixteFPG7@KWNFUk1MD|Ld=d5>mhm0#5PB1fD6w;y#8| z+>bae(He;L8VkT5SUd%#{!~CgN#uuwdO$Fc($(}wNzAAZ#tD){`%7ZCr1G#p^e|73 ih+QNY-;;d=4Xo3uq<=)V4LqdZE?IQ4Ji(9n8QHf9D4_2E diff --git a/target/classes/main/view/JoinGroupFrame.class b/target/classes/main/view/JoinGroupFrame.class deleted file mode 100644 index c3cc146429864a9e8a387e0bc1c5d0fcdca6fa01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1908 zcma)7ZBrXn7(Ew4Hd(eLgz^$Z3>RdN7r@A=HY+1UwVOz~c zJFP#rySnzYu(q>N+GJpPl`;o3L}VXLR@Awn|0MSEAq+A^z0^dRDkYK&v-2q#KBVC~ zh8aSRa7(&t5SZa)L1N4poDddWn}B9hWf?rGVGMDCM8T`#h&K&4XIPHdZ3vsYx@9s1 zl6gP&hK3JtlR=@_B7tD&OXkU^VDfDe3cMxveE4a%r z(nVZJyl~fbVboMi;X@e}SCC>D>WW%vx~^r0FijK}o7KARsz~CFg4wq*JmRJ>RLr1P zF7p}|@Da(uYc+;+n-G5HW^z`&VVS~ovnijYZlh#rK1RZSqLKEWQU$w7tc)bv(H^Id zo2JRDhRCW|L{`C)hR;Fbk9T4($^)|J>ISJO9EN_~Jhh&S0w;nPMmsgStmiXN6NK=U zh85%(RHDDEJ36(K;yg)}Y0DA643UCvik)V?D(sSkLzEP(LvED0t;_GWG2ou))PKD2 zU*|AO6{TVf*F8!u54Wc)dBf7{iA6`JJLFPE3JW@(LUaJTV|)=QpsyiCy3)pzPJ)mC zCD#YOGTrBw{Mk?L$H>c^T@yc(YO`x=$;Xtqz95URNx&GDi18-CTe$WMnR>_x#3%t!X${lbj{z#OP8Q8i!v;3JSbA*RCI3b*H2@CM zv1kjibg+ey^dS3r5P!5Veu0TfEOCz8g$qno(!WAE$Gz76b9X zbPIF)@xXn5n~_^O9%$jg{u_7;-b@43JVM~27$(4z7{W9?=O1GP%NV6G#!x^UMU3MK zZg}t?_z>IhC$WS)wrGH9%;9T_?xE~^*v1YGvy7YA#Uqb`Z}7N1=0n;gbK%z%idXpT z4Ji3j2YR*XE$`qeOaMwiRFzkvT_ov65}OwY(b!+mbYIFk%;Vm#Gf9Ib2u7LgJ=n*$ Xv`hBCCtHOEs-Q*|l`I0s&=LO^FX6}o diff --git a/target/classes/main/view/MainFrame.class b/target/classes/main/view/MainFrame.class deleted file mode 100644 index 4fbcc1cb713ada0d07de9a86245e1cb714a97480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1651 zcma)6+j1L45IrL)T6wd+$#+AH9Bhy`7bOrdpb&_aI8j(9V99m@Ph)G63|Z}L?T+k( zui#gBk*TDL51{xaik{sqTPCVh9yFtw>F#s-bZ`It@9Vz+tmCnb9P$lv-6%56jGLZTfL%zDUYomk_3$}yv#$l?w zAL0Tb(VM3Z64!0v(|#!0ieWBez>jpTp}L_8M4*X-g^&KPlgIakU&1oOg+1XPsII7J zRXLmS?J!)nv4oF}(kl$JLlVrGed6F#R7q~$=`gs%d8G23C0C}Jx(+VkGC4;*Qew8c zHlX8nF9`U)FX}d~qGsWmgX{Q=VR5kPEmQj)EvZsc#0=+UaHw7gk5k=FRY~e{5-(Ld zZ)*94gD=ZZ0sLJaNpsFF3;MYv z{26aZi`5yNqg3ide1_>H&y&_oZpo@(oQ)2@4CrvuPxQ{CX9O}e$wnnnsle4jReHv$2JT79KhH z5kE0pJniyS=bD#bQV9N(A7~Z5q7rlmPyY;dPUe&%-seHb7x9Xx)QetNe>>xWn=_8> zSD_d*fB(l6^4-3JEto}aaNlo9EleGoK_H@r&*NCc7TOG}Z)q|tJqy%POYb(N*_CR6 zWhz3BJ`bP(ngS@&`W2n(v@_aA++#4e59<#)q|ea_Pf_G}tI!(JtiZ*hyzNAMlK&seO}o}}{{YrvnlatdK4JupY9 zES^c_Ha36>+w^A^q?%X~oi`{wImYLOK5m#eERiLRGfy-ZNT54(pTk{jCiEG8pu2mx QPrq%tvB{@}9qeJ@KU>j{O#lD@ diff --git a/target/classes/main/view/MyGroupFrame.class b/target/classes/main/view/MyGroupFrame.class deleted file mode 100644 index d7d7aaeda31186500fd6909e733ad4f17ba564b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3365 zcma)9X?q)26@IU!c%<*|Fp7Wb=s-+E+`txe3Yd%5vUPPNsM&653hWYsuc}}z@AoPc{Z8#+#s~vFwmi48)I%4=o!qh;)r7rW75?hp(B+K0y~tc^#GJKlfW(tLY+Cmz`YE- zM_}hBz!B~~19vj0UgBVs6%BWh6Ri=Qo03<{b`cnj-p3zT%a5^3u6 zC}ZG3&SQceO>q%45J`5bVp_FuWX$u6($85dUNzM55FX~dpA^_Kc$VtR7P1CT;WR;# zg-B0eZ?h_FA(Bm4u2qtLhROHHt>n9Cxzb_lF&*PL#}KDAD%)<&f_BMzFlC~CNzi~)Q~qYg=s1-Iml)Ry~RD2kXH#@CVpk58%m#@C>VGQSEyaA zVo_kI}M)}bbk4?f0`*i@cz+YhK<-6&{qZq4@;t7~w{ z(<`?Jp`k*wQkidQ=LCFWNt0Qu=;TdU{7D5dlYvxW>^ORkt_Om@#$5VKiTltd)K82?#U3C7U zFXyH2%VOTXM#Z>ENrqiNsF?N{s!yK!X(54Uh|p^0Fs@1C{PPCBfG-m7{3?~FXRyft zRftPf*X7D(bUceMYxs(Rui|T)&FJaScI?oW0WrjOm%SyLtwih%r`qjBjZDqgjc*$G z7QRh0jsiL*=dG#}W*sk(7b?=XLJFN(*6jT68u%X10&Xmhna}^gzz;d0I>~12z>avC z^@@~{?K#_(lhyL9^qYk>bKacg%viq7aW#eUaKR?Wcjq?0EiyzybzNNYYPV5CO%l?G zhQ8XdFYCMz=xrad8HV^QmFG%B{QC zTgPhiP=t8Ka*K`(26CRaRIOxMrbsio7D?N|sg;UsRsa7VMv!lOwzXZFma~@QdCOVP{$(SE)`-oQ0}||uMjieoiD`AAYa&GR`U(iR&i|&PZsFVwFW*g z$!olh52p_^^5O>aQFff6PsB;*=o+3XbmQ4ne*+({;}awry+zck^w<&gYgD<^8#g~q zW?!HRbl}JIy-aljQdExwOeAp^bb4v)LIzuL2HP-AmA*nx7OBoFRN<%5LzB4|&tVUK zjlH;zeR!2@yiPavzicmjt-i4cB5sK=t3 zldYf9ZUz6w&+v0%#B+EBzo1_oWT}K-;#Y`~oh+Uw8S~}^LRP%NVOj;9jhUZ)o|Y&i zCKYf*K^W2FCPWgy!HXmz%F&;S=xFjfJ_o#nFKy(6|7-yFQ${i^Mv_=Xol>Rq>}eXg zjFQZba%(2-Qt-#zLTa>et*Mo4+o3~$nYqo_c(UZJL^82SO-Z^ mf?ra}h~c-S*+J=Dqm`rhJwg2rH|XT_3De^XcYnHgaKb@d@LbI#e<@7sIl{Qd8}KLH%YFACZaiXg0_ z9UTm@8+?J^OxcT?QAwQ}w|G@Bbezx(%^76~C5C4eM9~?6qGFR&*jDA5ky_BiVk##b zM;9}-^V|?RgDRCYu4}i%%tREM89F_Qfti{#(xsvsJq%G>IC+gU8Tt}g=|81&@}6@n z3L@=!>{YQ9eGJ=4__Vmr>$;QCOk;}_v zhT%Z0s{jOOnJ(TCB@dEk39t2hjny@spiyu{meq4UXe$+!7dM?#mf-R{t>Ofprvh+H zk86gliQ#}NzXB8-!%3M^kNi5NVhkCEO$6|nvgYujtekM-vLxvYL)QvP69$P8AgA%7 z)ILiUL3Q9&!ZDmv@e;BgQIp)NXjDR51Ic^ZE<;m(o-0}8N|veXvd$Gu;=HuJD~b!$ zDH-BOSP|qIdV?gL8>>5xX+$wgv5xW5yn-A~Mo?H!zS}$zT=Df&vf9RVbMbzyUB;`@ zU7vzWxF)}b$DKDk_+xDzNGVME@EdF4PS} z!kkuc1M?B+Dykr zNi%ehnWjU4@YbLdA#f>MI3b<4y$MsQ4D&G3;9f%qxOa*7Zv! z_;p@#OlygB1V@#xHjj}H6!K`V{*K6sGSqFC3DCU=HA}Id<4?UNU)(y@n z-*SfQdQNi$v7}BIhOja^w{1Zq`$vYM4VXMAy$J3y?0&Q;O&Jdh>?IP~sCR)dsF%?} zPn%Y0dNX==CYxZ%1|q-Hq74o`w;)8%C@FN(Q$d|pswa#EEV^>^zwQ}gqlnNq@LMvb zHn1hx(LgNO!>;z=uLk;)tbrZL7Iqi9m2Rbpfd=-qu)h#Xgqk>*O&*A)8hEOOBZVf8 zPPTBYaIk^nO^i;Bgc^8Zq=nP2rl&pLzyukaEQ~ZU9edf;%oSoYO}-{Jsxi0wTsDkd#psVs~L`?ha%ogac`j;N*DU*ma&8OhS7_|bcsl#9~rtJ zOe2mwom8-sP}qfK`WwH4J-CYj{7TSDWJbO0ePj;9z)dU>HW^&QExbXPPSY5F6K@f! z%h-pvahs66L*AD04iVCcck!NwCEc}rQtm+je?VIeS>C}w*M=yD))4YOJ^;EE*=4?w zL7#86g(#tF5(YJChq>fRDQPE!kLcZokMRk;CB0wL-lzDCe&5rMLOVa;C;W`~e~Rvs AJOBUy From 7f33d80eddc23291713e2c42c87508908f5ba1ed Mon Sep 17 00:00:00 2001 From: amyjq Date: Tue, 18 Nov 2025 11:52:08 -0500 Subject: [PATCH 31/84] added .iml file --- bill-splitter-app.iml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 bill-splitter-app.iml diff --git a/bill-splitter-app.iml b/bill-splitter-app.iml new file mode 100644 index 0000000..abe781f --- /dev/null +++ b/bill-splitter-app.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file From 019623647455ac98cca389484a9cc87dab16728a Mon Sep 17 00:00:00 2001 From: amyjq Date: Tue, 18 Nov 2025 11:53:05 -0500 Subject: [PATCH 32/84] added .xml file --- .idea/workspace.xml | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 75bab78..5ede060 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,7 @@ - - - + - + { + "isMigrated": true +} + + + + + + \ No newline at end of file From d41ee0a4ce52fe760f7a64c2c1fe8c466d64c4dc Mon Sep 17 00:00:00 2001 From: Lucy-1123 Date: Tue, 18 Nov 2025 11:53:26 -0500 Subject: [PATCH 33/84] Added a boolean settled attribute + isSettled() method --- src/main/entities/Expense.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/entities/Expense.java b/src/main/entities/Expense.java index 60bdcf5..4de30c0 100644 --- a/src/main/entities/Expense.java +++ b/src/main/entities/Expense.java @@ -9,6 +9,7 @@ public class Expense { private String description; private User paidBy; private List participants; + private boolean settled; public Expense(String id, double amount, String description, User paidBy) { this.id = id; @@ -16,6 +17,7 @@ public Expense(String id, double amount, String description, User paidBy) { this.description = description; this.paidBy = paidBy; this.participants = new ArrayList<>(); + this.settled = false; } // Getters and setters @@ -35,4 +37,8 @@ public double calculateEqualShare() { if (participants.isEmpty()) return 0; return amount / participants.size(); } + + public boolean isSettled() { + return settled; + } } From f73e6cd0bdf807153b1a686e85c6aaf32d4b3af3 Mon Sep 17 00:00:00 2001 From: Lucy-1123 Date: Tue, 18 Nov 2025 11:53:58 -0500 Subject: [PATCH 34/84] Added a getExpense() method --- src/main/entities/Group.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/entities/Group.java b/src/main/entities/Group.java index 254a85e..3d25dc9 100644 --- a/src/main/entities/Group.java +++ b/src/main/entities/Group.java @@ -22,4 +22,8 @@ public Group(String groupId, String groupName) { } + + public List getExpenses() { + return expenses; + } } \ No newline at end of file From cc02b91949159fe88b4b1389329e57880c2684c4 Mon Sep 17 00:00:00 2001 From: amyjq Date: Tue, 18 Nov 2025 12:35:16 -0500 Subject: [PATCH 35/84] expense frame --- .idea/workspace.xml | 41 ++++++++++++++++++++++------------ src/main/entities/Expense.java | 1 + src/main/view/ExpenseDesc.java | 24 +++++++++----------- 3 files changed, 38 insertions(+), 28 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5ede060..8bb1f15 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -22,21 +22,34 @@ "isMigrated": true } - { + "keyToString": { + "Application.CreateGroupFrame.executor": "Run", + "Application.ExpenseDesc.executor": "Run", + "Application.ExpenseFrame.executor": "Run", + "Application.GroupViewFrame.executor": "Run", + "Application.MainFrame.executor": "Run", + "SHARE_PROJECT_CONFIGURATION_FILES": "true", + "git-widget-placeholder": "feat/participants", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)" } -}]]> +} + + + + + + + + diff --git a/src/main/entities/Expense.java b/src/main/entities/Expense.java index 99bbe95..872c969 100644 --- a/src/main/entities/Expense.java +++ b/src/main/entities/Expense.java @@ -10,6 +10,7 @@ public class Expense { private User paidBy; private List participants; private String category; // stores what category the expense should be + private boolean settled; public Expense(String id, double amount, String description, User paidBy) { this.id = id; diff --git a/src/main/view/ExpenseDesc.java b/src/main/view/ExpenseDesc.java index 49418b3..d054667 100644 --- a/src/main/view/ExpenseDesc.java +++ b/src/main/view/ExpenseDesc.java @@ -11,8 +11,6 @@ public ExpenseDesc() { } private void initializeUI() { - - setTitle("Add Expense"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 400); @@ -26,19 +24,16 @@ private void initializeUI() { String[] options = {"Utility", "Food", "Gifts"}; JComboBox comboBox = new JComboBox<>(options); - String[] options = {"Utility", "Food", "Gifts"}; - JComboBox comboBox = new JComboBox<>(options); - JButton submitButton = new JButton("Submit"); // Create checkboxes for participants JLabel participantsLabel = new JLabel("Participants:"); JCheckBox participant1 = new JCheckBox("Amy"); - JCheckBox participant2 = new JCheckBox("Katie"); - JCheckBox participant3 = new JCheckBox("Tan"); + JCheckBox participant2 = new JCheckBox("Tan"); + JCheckBox participant3 = new JCheckBox("Katie"); JCheckBox participant4 = new JCheckBox("Patricia"); - JCheckBox participant5 = new JCheckBox("Lucy"); - JCheckBox participant6 = new JCheckBox("Angela"); + JCheckBox participant5 = new JCheckBox("Angela"); + JCheckBox participant6 = new JCheckBox("Lucy"); // Panel for checkboxes with grid layout JPanel participantsPanel = new JPanel(); @@ -52,7 +47,8 @@ private void initializeUI() { // Main panel with components JPanel panel = new JPanel(); - panel.setLayout(new GridLayout(10, 1, 10, 8)); + panel.setLayout(new GridLayout(0, 1, 10, 8)); + panel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20)); panel.add(titleLabel); panel.add(new JLabel("Expense Name:")); @@ -61,10 +57,10 @@ private void initializeUI() { panel.add(amountField); panel.add(new JLabel("Description:")); panel.add(descField); - panel.add(new JLabel("Participants:")); - panel.add(participantsField); - panel.add(new JLabel("Category")); + panel.add(new JLabel("Category:")); panel.add(comboBox); + panel.add(participantsLabel); + panel.add(participantsPanel); panel.add(submitButton); add(panel); @@ -75,4 +71,4 @@ public static void main(String[] args) { new ExpenseDesc().setVisible(true); }); } -} +} \ No newline at end of file From 65c954be6e2a8dd73a2918e5797936d2450ebaa4 Mon Sep 17 00:00:00 2001 From: Lucy-1123 Date: Tue, 18 Nov 2025 12:41:21 -0500 Subject: [PATCH 36/84] Added a setSettled() method for marking expenses as settled --- src/main/entities/Expense.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/entities/Expense.java b/src/main/entities/Expense.java index 4de30c0..1b9404e 100644 --- a/src/main/entities/Expense.java +++ b/src/main/entities/Expense.java @@ -41,4 +41,8 @@ public double calculateEqualShare() { public boolean isSettled() { return settled; } + + public void setSettled() { + this.settled = true; + } } From a1fb0bc254e5e71d5264e1c4411a4089fc2e1564 Mon Sep 17 00:00:00 2001 From: angelajiang Date: Tue, 18 Nov 2025 12:50:43 -0500 Subject: [PATCH 37/84] AutoSave usecase. --- .idea/Bill-Splitting-App.iml | 4 +- .idea/misc.xml | 4 +- .idea/workspace.xml | 38 +++++++++++++----- .../main/data/AutoSaveGateway.class | Bin 0 -> 208 bytes .../main/data/FileAutoSaveGateway.class | Bin 0 -> 1673 bytes .../main/entities/Expense.class | Bin 0 -> 1698 bytes .../main/entities/Group.class | Bin 0 -> 836 bytes .../main/entities/User.class | Bin 0 -> 994 bytes .../AutoSaveController.class | Bin 0 -> 1145 bytes .../main/usecase/AutoSaveInputBoundary.class | Bin 0 -> 283 bytes .../main/usecase/AutoSaveInteractor.class | Bin 0 -> 1246 bytes .../main/usecase/AutoSaveRequestModel.class | Bin 0 -> 504 bytes .../main/usecase/AutoSaveResponseModel.class | Bin 0 -> 638 bytes .../main/view/AutoSave.class | Bin 0 -> 2014 bytes .../main/view/AutoSaveDemo.class | Bin 0 -> 1472 bytes .../main/view/CreateGroupFrame.class | Bin 0 -> 2257 bytes .../main/view/ExpenseDesc.class | Bin 0 -> 2332 bytes .../main/view/ExpenseFrame$1.class | Bin 0 -> 809 bytes .../main/view/ExpenseFrame.class | Bin 0 -> 2012 bytes .../main/view/GroupViewFrame.class | Bin 0 -> 1758 bytes .../main/view/JoinGroupFrame.class | Bin 0 -> 1908 bytes .../main/view/MainFrame.class | Bin 0 -> 1651 bytes .../main/view/MyGroupFrame.class | Bin 0 -> 3365 bytes .../main/view/SettleUpPanel.class | Bin 0 -> 2569 bytes .../{usecase => data}/AutoSaveGateway.java | 2 +- .../FileAutoSaveGateway.java | 4 +- .../AutoSaveController.java | 6 ++- src/main/usecase/AutoSaveInputBoundary.java | 4 +- src/main/usecase/AutoSaveInteractor.java | 8 ++-- src/main/usecase/AutoSaveRequestModel.java | 2 +- src/main/usecase/AutoSaveResponseModel.java | 2 +- src/main/view/AutoSave.java | 12 +++--- 32 files changed, 57 insertions(+), 29 deletions(-) create mode 100644 out/production/Bill-Splitting-App/main/data/AutoSaveGateway.class create mode 100644 out/production/Bill-Splitting-App/main/data/FileAutoSaveGateway.class create mode 100644 out/production/Bill-Splitting-App/main/entities/Expense.class create mode 100644 out/production/Bill-Splitting-App/main/entities/Group.class create mode 100644 out/production/Bill-Splitting-App/main/entities/User.class create mode 100644 out/production/Bill-Splitting-App/main/interface_adapters/AutoSaveController.class create mode 100644 out/production/Bill-Splitting-App/main/usecase/AutoSaveInputBoundary.class create mode 100644 out/production/Bill-Splitting-App/main/usecase/AutoSaveInteractor.class create mode 100644 out/production/Bill-Splitting-App/main/usecase/AutoSaveRequestModel.class create mode 100644 out/production/Bill-Splitting-App/main/usecase/AutoSaveResponseModel.class create mode 100644 out/production/Bill-Splitting-App/main/view/AutoSave.class create mode 100644 out/production/Bill-Splitting-App/main/view/AutoSaveDemo.class create mode 100644 out/production/Bill-Splitting-App/main/view/CreateGroupFrame.class create mode 100644 out/production/Bill-Splitting-App/main/view/ExpenseDesc.class create mode 100644 out/production/Bill-Splitting-App/main/view/ExpenseFrame$1.class create mode 100644 out/production/Bill-Splitting-App/main/view/ExpenseFrame.class create mode 100644 out/production/Bill-Splitting-App/main/view/GroupViewFrame.class create mode 100644 out/production/Bill-Splitting-App/main/view/JoinGroupFrame.class create mode 100644 out/production/Bill-Splitting-App/main/view/MainFrame.class create mode 100644 out/production/Bill-Splitting-App/main/view/MyGroupFrame.class create mode 100644 out/production/Bill-Splitting-App/main/view/SettleUpPanel.class rename src/main/{usecase => data}/AutoSaveGateway.java (83%) rename src/main/{usecase => data}/FileAutoSaveGateway.java (92%) rename src/main/{usecase => interface_adapters}/AutoSaveController.java (74%) diff --git a/.idea/Bill-Splitting-App.iml b/.idea/Bill-Splitting-App.iml index 819c1a9..bfebd41 100644 --- a/.idea/Bill-Splitting-App.iml +++ b/.idea/Bill-Splitting-App.iml @@ -5,7 +5,9 @@ - + + + diff --git a/.idea/misc.xml b/.idea/misc.xml index 0abcc97..df00c07 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,5 +8,7 @@ - + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index ae5d0c4..96256a6 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,17 +5,16 @@ - - - - - - - - + + + + + + + + + @@ -76,6 +91,11 @@ + + + + + diff --git a/out/production/Bill-Splitting-App/main/data/AutoSaveGateway.class b/out/production/Bill-Splitting-App/main/data/AutoSaveGateway.class new file mode 100644 index 0000000000000000000000000000000000000000..ed5834b1010e21979d817c1f4fdff01f6e52a532 GIT binary patch literal 208 zcmX^0Z`VEs1_oOOZgvJHMh3~;#LPVXl*E!meaF(0{NTj0RQJS^)bhkib_Nzk27#=^ zvPAuy#JqHU|D>$crF$JndL_-r( z5hDXvaDHh~a;jTqPAVgV2%6n`AXC{G85kLufo^4BU;;XYm4S@`!Bw60@yv{y#KIdLLT zph~=$Kx(BjM65Zs*?wNm)F%+fl!9p$3CsvA9%^R0sB4bqB0eNmjaXZnV;pNg3j`0? zM_|%}^81z*qy!S9RG!(UW7rWSF(=#43rzd%FV|%1GJ8$Mdy-t}ST2x}MHL@N`JraZ z>KF>r0y9J2doOJ3Sle&0bO|?9e29+(Vw$ekx<^O0(dihv!2GDv!3v61@bM)YX*}I| za?&)89MftmSP{53Y_r>KJLaJ=$cK>?NN#ErucsX=E&WaFwst^=Zz3lp<^{5&eSL>V zJRfBuH>RlK6MV{DHBQWq({Xq8$1rXQF!{N_?4_X_-Gc+eHuPOX(+yj}7jK#E#Ur?l zxd=*FlXS`yI&|EtpaU|0SH(Tt7YN(LtC(%>XL2PoLe!@&YZt@VxT3seX}YIe!DE4i z;dy!YtUR)GV#j5R?e5{eVeiSEBl(Ke)LM1THsyam7<68k^kAtnM3iUxEmX>ykmf&@ z-qSkw*w|!vRt6yOh`)rqnS3F}_|1ob;}iaS zfFQqsM79T!?L%oKCVGhehRHXK2C&IdJ}BUtAkWhlzf^ApzQR-f6Zjf2AMG#Jgcw`v zBiYFQipd^ktGU%PEacAc{wY%1-W**E<`;rzxSl^hMZDU_%|;@V>tXf$4f&~<#ys!k z0v3_x3}lhVGBc9R4TL#HStaXYtc)@rXGIJJOyUlvT$WjKk#E2^sE~hwRaI=eO4fYl zyNCO}`hQ%HfGw%~ z4254Xp7`u_AEibgw|zUl?BPy@hOAdPJjlIvr&CO9=kl~8cV2P5c(^LPpnx=Gud->5 zSNs;|7&0ikv9ddlS~A0Ik}Fco&$2GXl}T33VjXj?C23li=0o{C>ZH8xTOufa%eTZc jA{4uz^#NCQX<&orOzF~t&;>DQQCtqo{C-B90DkxnhgD}C literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/entities/Expense.class b/out/production/Bill-Splitting-App/main/entities/Expense.class new file mode 100644 index 0000000000000000000000000000000000000000..07522e7546a9d68711ab6adea6657dfece06e4d1 GIT binary patch literal 1698 zcmZ`)>vGdZ7(MGtoQooebF+aaE#+d%fLkst#UV7o0aDCm#*j|=!OX_igat=7(z;Xn z0(}Ph60|dT7|Ki^pby1xRuZu>>L2au(|5jezVq$c|God`UjSEeXBsJ_bI4f8VnX2X zQ~9f`cBHpgy|??+ZE1mtHRUP2E|4yjccw6jsT`&)%)k;@+?UF$x}H{Axj}X7x1Q?- zu0SquweGlW0rAK{Yzv2QSRkbs$~T52P3%RPD_d0t<~##XJmLzm~%n0`nnXU#m`a!}sNjh6?mFjv;O8 zd}-k;92c;9($}h`deYMYjfg~sAd_F4!3mtq;gp5bC<)lZn&z{>WUK3GxX{5u* z##;H2Dd1SB7<5{;+vfeOg>$IVFBNR<_cXhp$zkTV7S7{>KqgSX(@=)D1*V#6&y%|E zGjeK7;964q>otM3Q8lsO^$~$_C<$KPp@8e%Ht7yEl;_^<@9(<)1G(E_B;V+^WM@bE z%Dl(HjDDi%!17qN_+U^?cF)z@JOm4+^5+`ZAwO@#^JmX>8qG+3IQl5%emwIfR!NvT z3CuRNY(2Xpd$Bk3w5!$cNbPPt z@5@f}i8OPZZg%^A%e|qDr&es#Idi&rE+=_AfeAi&eYi`RD-y1}6XD7`5UxDK5V#ob zFENkTllw`=viOeA@A>u;Y1RTN&Kn3PJwVQ>3^41I2AFe-nE@7^Vs?On^A5*;d4rV! zR{stQUgq;Sivcz=EIdUyHU-RM4n^d#%AG@DKQQAW2}yw~sBtwrBVB|$Bi=MrF;|+E z%+55B<@YuI8bvazTupw~d5zh>xJkhXmg_ wiYfmVX9Q1I)_%pexhV3Dz#m;RfQZoi&w#&pHcpOovl5fV6gErVW?Bl350Csg7ytkO literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/entities/Group.class b/out/production/Bill-Splitting-App/main/entities/Group.class new file mode 100644 index 0000000000000000000000000000000000000000..1d10bc94a85b5a8445560d12ede6c32c7c1fdaa2 GIT binary patch literal 836 zcmah{+iuf95IyUpbz@9(YoQb<1xlN^1@p#3N+rZyO3Ona5|5j7m2Q>TkuL~-fdAnk zsss`rz(*m@ZmK3+BxHGZX70u}`-r}BdghcX(3Z+fSy zp9w7P>qut@0)2u%e{xPCb~n%Byf;)fa;GupKcDg6 zo@Q5|_%uFd{pGff)KPAR_*Rm|Y$@)`VOJ*F*yqk-cA`0p)jztkD`sm`S3FoctJu!iV9L8?@oFOS2<2)yYRO_B0}PU zAHa`7%-W$rjginvcYAv~v$JzQe|`S};5iN(sG#b=a#4e=&^Ze~hCvj@v*69-Oiwcf z`?`MLft{bMH8+9GQ%->UoK9yLVILleS9&W=;U2EiJ0k*7Sk{q zhl!Ekr_3?d?%tXS9A zG`mN1AX^khDKt(N7s*t=GNQaLu09qwaX`Z={I@E1`p>8$cIGEtG|KF{0B=o{=+3&{-Y&2Uvktg_dXFIvxPcW1KZ^8k*&|HU*K^Kd%Te;@2m1iI*S@l zevq0JuH(k4bHG!oYW`O^pBYpjt?WG6&Z*s^U`4HPvlQIA3htDGZXeaeF{`z z>_}kriQ_rZGl6uu(#~QGSp%kpaaaP?1L=5m$BR_3D{b{bcH|+~Vf}d=`7L>@)_gAt zeAiWhfZ5HHcH}cyY<8h>sB9Uk^ZX6(FpggMvDcBor-p$^fzrUlZFLl@FxvDx$~7^8 zyl$W%P%JkuT4+UqZ)vL5jQN{#4VD$zU&Arm9K;}aR+w|+_Nx;(lGhks;3y;-cylwUwQn7)2wsJ7J=m< zz4bXk`>1z~MhoPcj;FTbgB=yTkvlGTrkcJj-L?!I9iMGxqK{4}u#&iPrSWJ8j7bhn zV!C1fQ$96FcREl<0t>@TznBcNX0_8V1G!5Zh@-3_qu1vjfo98(16!>-y3N_k1HGyZ zMTr+8#j8Xo^p)T$&GiW8`CMSM&QpDER!<>_rz&r@h2wU)lQJxtbT>Da*C-G-u_RYCv^eSl&9(E65u&~5fxNP zo27&rR#;r%0h>z1zv5eq&uRWsTo-88zT@_1ZY3S)zXx?t&N5c zz1REk1hB#=gvT(w@fB{`f+$_#_A z9m$Z!yUvdz-7IOdS2>C0{1>AuB{h8^cPSLl8D{aHd~{N_&S+Z*Co<`@U$o)@14GYc U1D=cNBS0G!V&E2rVY?&x09Gwia{vGU literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/usecase/AutoSaveInteractor.class b/out/production/Bill-Splitting-App/main/usecase/AutoSaveInteractor.class new file mode 100644 index 0000000000000000000000000000000000000000..80e0c98f78fc2502d2f8a331fbf424d1d3d3a3ee GIT binary patch literal 1246 zcmai!YflqF6o%hv7soEk#mdFD$W^cxrQUA^qoNp+q6sxktflhyR#VMKk*Ov zRTGtl9f@6&FGCrqRj(!+3}#)bC66k( zq;V*lEAK0>DBp4GrCtnSm}A7kC{8h?x|U~11SI>uFP;%=IC~hCt8%0nrn~40nw}fT zmM{}3jA=7ZGmK={k3wl(6BZ`*P7@7J)LMm2Ok;-QjD=au9cV;*J7lF3JlJX~vXVNn z&XMgVXvJ-Y>Yf+6HQ`hCc=jL8=c)|G5?RVHPKIJKDj~!*^m{A5=`yMT&vp zEPa#uGSPL6)Bhgi=$WTzndW2kYvy;r@`X>}A1I2UK+k^41rZD+=wsp>MI-HOoX0#x zw5~-ZjVR(m#9X5lnwidj1TTC>-!4wZ@D-`2hK_cSc~7(L8v4zkEA?TZgP-2xr*RRN zh|6#pS0er!;%jBIn!k&2hH~LM`iVXD7TkCTBfhAsjTNF&@s8~bk>p`yXd`+%lWkB` j&ZP0HxJG3%lyx09NZd`zB9T9l;+Vdph1{Z%7)rkZg`+C5 literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/usecase/AutoSaveRequestModel.class b/out/production/Bill-Splitting-App/main/usecase/AutoSaveRequestModel.class new file mode 100644 index 0000000000000000000000000000000000000000..325db1458094114246e075fe409a7c858ee5deed GIT binary patch literal 504 zcmaiw&rZTX5XQePrIk_v5iuT#7r=x*fPWH0!l`N^hWk=CxTI`jyXCnw(U^Gf0emRq zY^m{piF=rxnf>;+v)|{}`v-t?9D1-&abf$Y!eMAF`I-kYSBv0gz7&yWaL%NX`hua- zAIxglLCuBdqYj^;x8hO-c_t#BiQqEV$&|0ft$55urmvEF5i__^qO?#%YKOn{sZOO@ zoH88rx4VNGgFU9}49!p~ah>h#2cjpvh0x=l zp*sD+_5h@rCV3i(i8N0h{q?hv`3!nwh(%V?T*ea0EXu3crP!cqLbW;fhHqfQlUKOU zg{DcdfeJ+jHe48ETU2#7YU~luEU%z4qV1zoG6UKfomGb~aGxl#U~o>+tQQ!6BPcQC Ia-r&e19l>4!~g&Q literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/usecase/AutoSaveResponseModel.class b/out/production/Bill-Splitting-App/main/usecase/AutoSaveResponseModel.class new file mode 100644 index 0000000000000000000000000000000000000000..7b8cae702253c39176e1fbbe3b97c495885518f7 GIT binary patch literal 638 zcmah`T}uK{5IuKY-Q3o%&8)Pbq6d{|e?T7)LQhtZA>`Y2yVw=o4R_aH)k8rN^w1CJ zM@4g2rAQ$b=FXg*nR905^XvTsz$tc2Xh;~)EhLd*$oKh}I|J_Zoa=61xFJL8M0zqj zV@OnM?KD=9HegyeU|=0p zpS6%fo^aRqLg5jG-Ta|#g(KAQT; z<|C=%8K{R3lBf@w|4Sv(vkUU%Mg5CreU7$eLrsz&xh2C8K4Xj?7z^ETika;0U!x~u|I$64#x(9t( zm?#pmJ1xUHN)%Cpn1;okBGQOp1Di7%hhFtBS$~D`M9#E%Dh4xgLu;BaYsj#LG9gOi R@8Zn!pW?#O;!2#g{S9<;cKiSU literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/view/AutoSave.class b/out/production/Bill-Splitting-App/main/view/AutoSave.class new file mode 100644 index 0000000000000000000000000000000000000000..64994b9647b6f11e37e52c6f2f9173b19e8bb960 GIT binary patch literal 2014 zcma)6?N%FA6y28uCJDn=D5X#-=?5hVAE8xLnzl+HAT^rA_U#Y}OJKQM?KjsszHEm#kVfcIr1y#s`>-ds8(vP4QgR0Ui440dED+G`#NRQ&u zD~V#5=ntE?ijNo~3bi1)toaO=G|iSYnnyZ}YZx^UGjSa^7`j`PEVvcdV`yJq%Vt*@ zde3UqU($-nEfZt7&Co?^EV-U2dv49K82ZmC(uhtJLx>YvfkfU>0w+yOV3HcbEjo~R z=fGaob%Z0+jg-2)$6LFiB(d zMXP%&juaj*N!N>D1|KUmKVi5Q&z+%OK-76ZWk~7>Tb}o1xrz`7R=mME%9)=U(z&Jf}>d&CNYVutT#FL-iJ}6FSA~d^94It%9ukyUAIU1llap+&|PRU(o z!xvuGvZ;EeG(QL0QdU*th=Zm^QcKldYTO$Unsl!u)Ob?%(|MX!)aa(^q&pk*Yg5;h zUXkhPKLDx&9rS!bZ-3G{NdM*JF<9~h#^y1?bwp^{yBUoJj&b=dhLUeE^co{|+)S!v zbi9tl38pAEl{>-A=EO1X=IO}n=HxLxdy9J%b+3+xt5bDkeukNhe)SrU>d6193B07| zU6}OjrR06+K|e-t3F8>R9SmX)SCGLFR*8C%$UmpA+ZY9>6Uhc$Y@tMNbC`w&LB(X~ zn%qX2$}JM&4s0rPmm&th{-zH>1Dyt58JIC>96<;6u-??*CkhSF-l$?dQO7sQXjE65 z{{>z7Wc2B4Y-;X|g8GQ(28F+*^)Sf@+(ZbsXn&l(j8VSZG^KIPHAZm*2*ZJ^n=#sC zO{q{NhD44(Yr}QRH->d&gYJgI(O=s`c0TYycl60JEWmFs+ U>ZsL^I*(d;xIrfwe2pOg0l87=Gynhq literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/view/AutoSaveDemo.class b/out/production/Bill-Splitting-App/main/view/AutoSaveDemo.class new file mode 100644 index 0000000000000000000000000000000000000000..0212635c546a9a6c2d06e029c8ef18483944196c GIT binary patch literal 1472 zcma)6+foxj5IsX63(F!2cTf=&Bng+`{SrhWh$0JE24kU50~ugovzywT1o12U6<@%D zDxWROZ?fzm!GwaMeAwCT?$dqxw)5-H(GLL6uwtSPAp`Xm8W3iP?C=s#I^5k#uB`8f z4aE?ilCD(K453&&+eTiE7Mfs^>=#{zu2|fzI=w5pE?;*<%7ld$16M4xBErz8A)k}M zo}|bbeZE)HkxGhyp;@{mZ&%n{37?@mc2T@|)<7FWTWy>-^FGguMszT=%oLTE;UzIJ zC-R<&D7th--3*Qp?d5xo}raFwAa5Nb|r@}i^Cju(iPg7CSL9u-#~TPS0% zTj<9P27|B}`9&}^#1_bAV33l^bLl2aQtTy9(=aiBkR}hh< zG)axy)Kg>VIEi(-6XjVFR|~I9@-26TqhaUMBAA)+ivEU}m%6OzY1?)A6M98xlV?3o z1)7)_~Qi)UqVd}~&6Qg)- z;i0|&tOeHCv5u}1AOzY7gy|e7DM@ce z?}o%7*f;v9!vvk$OiD6?u9folB<_&ZguA#$8twdu-rCl51Oxbv=4t?a%Yn3w^ix%X zG~qrT01;D{UJ0^K8ENeJF`{d2?T6@GOoR{6lZdjfQT#l>wPOsd9pa{)7(KwP4~hB% zj8uvGH8s(glvyjCy_D}DS};P=7$PU+T|{8w7Ulbxu!Dqnf~Q0uLW<-%Owqkuu5+4n SFELNg0%=Ubyn&5n^!^10Xl*qB literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/view/CreateGroupFrame.class b/out/production/Bill-Splitting-App/main/view/CreateGroupFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..12a58d9414e19d7c140d944a4f7dc7c6d2097036 GIT binary patch literal 2257 zcma)8T~iZR7=8|fB&;ihAZXNTRHz|-#7e7`*wz{pVnd_`vC)1V$PrgJyXo!*{J82} zFMH`-`xkl>Ix^EA(CN?Vb*InS%|N2o=`ifO=RNP|^FC)!{`}|F9{@hV3j+ffOdw`r z2yub*W4S4x7W^&C*(lt)>B*)Nh+nlFEBI7kFgLSmAc^4w3={jb!{Mg1oWiE1whARr z$v`c5ZoAcWG_{{4ZR@$ZTTWs><3~o>&?=j|c>dyy4mfHeg)xDouYwgTu$gosSJAZ; zY{^P$fyaW1QTA~Y2QVRUh{p5kp={eh$##8pyQMrCSgs=w%atSBgC-6kBaonNjb#W7 z<;vZ?BPNdGJ!axw#a$0w?t)NhHn=RK-PQV%xIQ}|N6}hJDBu)tI ztE#Q2ySc1^V>qROof4RQOFOJ1iT4G}2#qSip35eXqjldHR@BqrrlstLfz!zAfD=ia zWes(=?RB9n&u1-Pd!H8=@AJOi4g%Ln;sOU*Yp*q}z`!|N)M3UF`0({smZhU?1GAbH zm%FhF8iEDSYE`xT5{%2rS`@0G-8ElZ+xwhBcs}rNEIM5F_1^bmWHe!eP$h znu*VGoz#+zhCsf@x(D)z3H@`>w7HfhiEo&=i3LXR+MN7kZl;GfciN64*KAcZP{yqU zzA#b25?R}eP)(ElZeZEus`5EP%h`0Fs0zvK?Xe)_;cmQ$U4y!aWfNcGj)1|gS1sRS zI!(a)GpiIOx53qD#d1`&-CR@NiY|wkYr@&9(zEostBeJYEapF2`R_AT6xi>mt&lJw z=>!gh{qCOGP)oCs4Sf(br@D5-4&Or>@#ysX>=KNAiO{b+Pg?pRTO$7OnDqNZYB~(H zG-KYVBjgdcW4akVmj^v_**(wPm)-`O9)HU=d$nbAts$p$j42Y>sFCsO>>~U^y#B#C zucs=Iy6(DxA9%90q=H9o!yk>~i2)nU1RN7CS^_7vY4mN0rd_Cnndl)O%JsnYo{23WcK&Xzr+mxT42ppVX#sQvMAO>;= zaXxEY6)6SfaDE#i-$CLxE(Wl|=LiP*OwwVPPXl+kG9zQG;$CRSyC@1Isz~q;_%)w4 zI~d8wJ4olp#NT7$YzLEh(ZS&z9IL0ZL)$o6316r6>(UNR*OS|rsfM~US~nNl!MS?6 zu#FGqhITMp-^NFC@l1RNm+GlxEM=sOZG7B8F%v)2!Dsg}aputCT%X9qqGe`C%Y23< zmG15JSH(E%-Omn2c&CnHf_LFzq%qBF?gCd=Fo_$y#+GpebzWIEuN5E1@f=zFNI-wW zN&Jjcc!??eLNATaVuV2#pJ}|nSM(K(*TQ|i4KV5k9^h+YdxP>D>SD~WjBoKB$5O`v zzK3K@!&t+5ge@*phC_OVdEj>}?lqx*M*ukv=uF>$8c;yW&=l(i$#v&%?jT7(s|4q^ ojw8ZhM{#BdM4qK>P(Of2uqgG&A5-@OJpQ+-F{s(ZQv#9s7iRY>XaE2J literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/view/ExpenseDesc.class b/out/production/Bill-Splitting-App/main/view/ExpenseDesc.class new file mode 100644 index 0000000000000000000000000000000000000000..390409a04610cdd9ff7b681014d08db4e8971bdb GIT binary patch literal 2332 zcma)8T~iZR7=8|fB&@51AR<^XD%cQ}wD!YF><5A+}!wq8AMvnf9u^>GbFHy3^&o%ftnya{Ol@LG+j^vK&Zn_gV9#{5nrrE3Cw(R|=od))Dp<4vn}G)NWgWk0 zOGd8*9+N0V5eH1{$DqJLD$lBWvS9}^w(F~Fb>+#xavgz0em>G2GI0>Y0x9ZN7+;_# zKi@h#Wa1SZW+a}K-PO?ahO)V?t3_8}sFi`-2#Paqt?oL?37A6)N1g|#ELW7B#!-RE zi%y`t+;q)tI6+Q2)ttt_v+6praDQETfwgMYr4#r$1EV;u@g5U6uuH{EHH8yA>*&Rz z+6?9_WmgT1Bd^T|Qz!@wbZA{@1cB?Maf)55G*)U>U|<51TD?Do*PgH8x^$Fnpr|SE zM$1=G*M7;fs%5$5HfVnaZ)y9ti70W5kSyXI6X!4`(5sOQH3bgE(2HaX(vfS*3%gjv zd6SgWJd)L_Kq00b!#bisX9LpsfYBp>r!;<(Y0QvhF`TE;xG1nUjx;sXIG-iaFPoUh z6$bViWXgg3M2u%Q8jd4ZY*jK)#zG2LOME}O z{|}>(FSm`4K+E%twC#!&s8R+=qOz`;yJ5o8_q;jpILe!`rSB_0g+~J8FMzaLy(xSt zF#2*;-c=DeILe4!oL3+L(gsOBm$)l&6N?U3HA7;iX4f@NbwK&vye5L*jGq4kuCI#fBMC#CJq!t6C*nqUC!pZw{fhzgYo5z zv5i+3+HY6eZ&QgKOe|+lZsYV+&kl;q+jxB{Ih@?VndMA6kukL8n@yY@PM&O{bW5Mm z^ZVPFj<$^0mR@K}PsgOQZRv0#5)b$2wJ^-Q=Waa%VF`mQYA?&&$Io&fcNvTz%P++M zFZcbtsRuEOAzo}F1n3YR;xL&$iYGXNZ;-?HME(aH!%sMlUoeK>X!!?DgkWBd0BeCc zjvsLs9}~_ZzQZT@lx;YNZ}A!5x*6jMKIdD4k=7xx!XDm64Xda!w_YgRiyDEmT*Hn& z#UzLAs&+h>#hPp8^3n$Eyk74RT6_Gl2jm3o9MUc_6kF`vt(x}#w%(ED&q z+R%0)$JE>q$ft+OG#|63KU>uGP(aaz=VKneK>0{cWDrSx5bO<)C`_60L}`_73glYt zfrk>s@=` zVp(7{vm{T`fF`8V;8~ceSof7lNmC-Q(z-0S_JBEC@rZE?eWhvlWIUwgwahN4^y5%Q z1DPnhp9UTKUINRP5StraM#;>;J|*wtWK1K0wN`(o$DZ}uwJro(X#7va*}sZUl90BQ z&3^IkLO!x^zPG2tC^kwTyrlFn9{Fh768N?{N=E7r&fB7(EM)ZHyAI34}mP9b&h>kT~>~wocNWj`Du{+=>KSXbyWiz}=R2$Ym5rfCEWC#^fTA#cGB}7>X0J_Mv-KQdqS;CWl`GkoT<^2 zEKXSJ$|XqUe*Q57*D+2J$@q!b=3PrwEyok99pQ2%9h)JNtMzSf7?{LOh8Wq_2@J!P zTrJp}Ht-hSrcAVFI!)hoO;|J@h;@hIMu31Hs#4WycN|;TiZI0R&cCTLc|%xn+@f{A z!gRn!dQrF{ff?M^3}=Y2OR6F`F}%w#c7gp$S1HGiBgb%cK^}?LKQR-?qM*YiW0)fr zE^k3*K7k_cYP%A{bk4lo%%?Pqc?0j`1BN7TwH`M$ho+sc zVwJKBH$~e0+`t!jOmW;UwR<9$4>_%MZJReNQBI(WCow!Vuz+U_Q(=DVTH_l^k{qS* z7>1>N;Oq;NQ-br>`{Fx`*O%0wu4Bo-moOO;q@7LaNlK?x_aeVZL)B@~Y{ZndSn0MK z!d=&JNE=#Z)+TqQo(GE&wJRzAaP-`#;A>gtl=FTh>R zHL9TrbphnNU*^~}dpB&sGRS(d~ z0wSOjizq#pX;!9@(Ku8%0W0(n`;{gGSfS@N4AL_}4#VVZV3lS@-xy!vYu}Epi6GD~ zWT)+y3Mr$9YlUbJsX}t#d6NCy!$g7gFm;NVtyFsO1heKTvRkS5PLN-oJ4JDelHcj! zUZI%!xQ9;)bEyY3oFgd^3SfkCjS`k5#*xAl-4a=PE71*5#%)xPL5)^4%5)z|fHF&~ zYp4^>5~i_^4XSSloA@R`exF94f>(G1{D#VTVts)EIV!(+q5S9A0!9$0=|tM`tQ+7imZw>>fb)v HaB%Z)TWs_5 literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/view/GroupViewFrame.class b/out/production/Bill-Splitting-App/main/view/GroupViewFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..a56365e8a05be83a21a0170236372476d4d2c60f GIT binary patch literal 1758 zcma)7ZC4XV7`+1_31N9l1PrZ+Hrgekq14uvSX+rjp#iCZAljERkWp7RyE(fXDE(Lc z5_;que?U(^_viHV&h8#bD)saOJ2THbFZbT($?(VDuipUp3O{GihyD~21_qE6$i9>Z z@|Ti-XgSYIYb%~?DuLu}%dvtx0{!M(J%cm`Q^*(?(gEk2(sD`%mO3om_uO`?&Rra4 z=qO9t)~{-NHH~3`k6<*07X zz&T8?D4p-AXR>Vv72EaI!zFf*9OMJ>yC8kYo&il=0tqPsLc5*QA7tRF?D6t4VRzD?;UJA(rH z^~W?YhayFkjfOxmCMgetQpIhyTt_)Uc`jn!Yt%BCS+?uCfg30>gV!e0Ni+5ib$Zlx z9Jyz!at5DZF@;YJ+{9-B)7?yKx~6Uauao;>Kj^22kKJu)wFS=g`iDKx*>oi>+S9X!i}%udPDHsg zuGwi@HuoB`pmP)!C_v3^d;4m|(gbt8bALk%E-<$2x`7{fvbC;)7jDBJP2yn&oA^G3 zM+R!x61aRi=20U`)vyjDMEJEyo7i2@jAVmz2Bk6EBh&-Jz*t7NI!;ZvW0?;2_Gg6I0;E@6EM)UX)&cO=F8MT8XHrfZMwz_D3K+PBtz1t z=&N+5HJLEe-R z*i(MWpJ$vi-8{~0tlGRL7=jDBsk@5|-N{rrj1a;KR1Lk*7)EMbH#4WYILmBUy18as zje0ArH@CgK@}#h`wN_eZV0o1y`!qyk9ZhD`xuO3ecJd+gGeo`6M42)rl5^9uDG49Y za2^&Xv#GKK4{I1foG1}^Ssd|(;pPm>5!-cPb62-a zhCnj!V{d5q2sarN!WM}HLr*eKX9~vO6`{Z@!U*9OkzO%fVJ8l)s+dox7{eW@+Mt5F z3_~5lmBe#*RToB8#RNWGrmvW50E zecUijUNJ;g#XPbK7Brd@GJmw4dr=O^j;kBwqHq{`b@SAECJLMcVi<1s=rW(LJarJl zHyW0ZV^B%{vhL_qPMWiyD$^rJ`Z7ccx+%6AwTiGyk`75yunxIV=C&^1Tblv*M5p?r zh5wqvEM=6AF73ig)X2bljv1~QyjH3537KPJhIA`h4f~K-OI-#!KfGz_6MauhmgPFG z&Fh=OJ+Z1zB#3<#2lzq3j~af$6NcLo>VHYTf0=?;ha&h9KXfho1zB5be|z0-Z7awx zu+Gh@A)JYVWj$-uvsb%p+vx}_y{LOoXA5B zJKn{VH%(#Z4DL9>QEsP@E!`O$RG(^5QxJ4Da=sRTeqidAb0R2rjFs;k< zwnC@!ERsG4OGhJrKuI@o?Kj%$qC+4?0f0(tnATqOQIb{K(fly1Vco;hW!p;m2HjKu zI7r8$O~lf{CWg}e?ALz$)x_up#`a=~bKEXmU}7)*JCt+W+q^(>FGdvZZ(U$&?;M%= zKs+$n#LR9yaNmDS$wxXKXyU={TY7U|PkmH8Lgb@+;wHB7$dlkZJZ`o5ke*Vx@GFAi zCBAq|O8%<@-P&}Qw`mn70wo}-O8;9)k{*)Oyg-QB{))Q$TIOM%_I{pmYAiuC%Cz5w aU3^bZss0}A{R~dOD($GWBXA5I@qYm*HpmbF literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/view/MainFrame.class b/out/production/Bill-Splitting-App/main/view/MainFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..6fd5a0d6053046495b1798f8beffe65b6b78a59b GIT binary patch literal 1651 zcma)6+j0{}5IrLat-P#n^4$rJ40a+f7ePWo5&;PoF^H@ov1A*Pr?EA_gw@X0?#PCG zMSdkOatf;Q0jYcwm7d)#TMjCU2hC_^y8E0y-P`}Xef>9pTX<|EhrES?gEJ^Hlz-y~ z{ADdZl)IIL~bzs$oi4wC!w zcd^|pVU%HhUHX2d75Y+Z5mhc%?nSB>R<2z)@x~oYV3MH}3*DC5C(N0uXQ*|vxb!%AJVwlSq@Izf|sBWkN5oqFI;gkRCm$1xmZddsGsw*m5 zRZeGoCk&TuEa8GtdWB(jNP-!&PaS-QD#^_|9R_zek5r!1TAr0rT<9@$lZqmno6_t` z#lbQm=IHYP3ZN-~BCTK3sZKkieZ)NibNjIVq(cth&^m@Ztu!0Sm1Z8krIV8yliSV2 zj%HvM=q1@1fJ<)K>0`_-_EB~xbB`z4AAQWatdGSvSb9>fx_g4PL^vjT z5u-F$$1sC&ETW86Ows2&onX(V@iXjI^0B$kkDD-jN#9@gnX`FeYxj+KlrTZLyz(zu!;U3*R S#3TA`(Tz<$Eo@^K3;zLybdOp9 literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/view/MyGroupFrame.class b/out/production/Bill-Splitting-App/main/view/MyGroupFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..25e8bd9c3a6305f78f9a10e0c4c25f1ccaea2e3c GIT binary patch literal 3365 zcma)9XAtV&nzTVmO`Wt&*EIdqAJR|#+NbZCkwLO~^7MmrbPBjG$ElQX<`eSHDuKxYj%|XuT|;}%h$!|u7BTaoPrcmP z-pLlUA*16C6FabzT8ozL_Al9Lxqoye!l-#?gm&nt$OjEOB2()DMABReyBI{Y=Y#-v z2=E>aJ2wH2arc?HQ$USb2_~|l<1RW;AJMsSbu}Eel~YXNZVh^*d*qmb{n#eXcbhnf zH{CQ6DQei==-|4EoQ@t1cQn`^EQg`zrjXT;9JHnv4BUebv3%IXz38XqDN184M$>3H z7BluE8d}HHa_8x*CFKT6_P^Q0G1;GX)pAXI6YBvDEqN6(qn#5a(LHYBEuywr3gAmlATd8t>v(P(DRGRAF)=va%hlj4@=%pYS_|qmh}}2Lncn) zG$Cmr*3+=JRu!=j%SJ8NnpJ*I$oI&tdOgx4w zY!|Co)X-bEVaQu7c`g-mb(Fs_HLs?{j*fTKD9|s#4?EuS&E!3fC&b%#5r@f(vNwz= z!I{>O-4vlWh7d~|utH8{Vg|Eh1!Fp0v_oskVUs6&9+OCHmS@=Z0~V|e1s%?<`5qT_ z9WFh+a(fUuN~Bek`MP#a!6!>CO%7p=(RjpeP=>o&XFQK-s%>kXl@QeOSagBzXedSPieoawNhwr4r)#Ud zlU%p_Sq9V4XX~4{I@aP;(drf(-S?3dGx23@kRATCA|aWzw)(5`Ug10GHb_T<(6>sX zDxC9*!S-g{Fz_;7(eZl|f50C#9N6gKm;yYB1&uqb8EZQ9eD-JSV*Tv(`ct&FDF!%W zxkX0>-6Nj2P%h=_4vktcb&`gS<0~aqum1lp#*lBkx4t`SmWM3I$=jjIrP0i+{8>o( z7ZX)^8JTBYSNTJZ6$C2K@plaeZ%fi<@#^@8hW&4>%HuFj4(=vm6I)s5htD2<0wTtG9we*`pTk>U*6T($}=y9T|GX-QPEbrtD&)?UT# zRqW+te<9PE-d@FlRdjKBPa)G=#i3R7#gqG@$54$W?CvZLD55nw2?Ndcv}U7 zYZxwwq>3|DoE^!&i1ZrH7c!&Cbf$_667m{fsRmD50KibE|y%kuO zId&x~D2kv<1oERVTItKoRWMK7g+k&67MpLtDY=o+3XwBgxwR}~+x;1d)L+#>3T^u&?q*FfY_ zM>6wintg#4Xu^;Ay~Mf!Y1Si!3|ep(3_jXgk;7J;!8S~=(pR`L&pNNL!cU`}Cvyj$ z!yfz^dvP86@G5P*&Kvt*IDr44OViM;wcwzZ=3DU~dbQ(x8lJ}?Z32DT6F98R65%IA zJr>uTwtmXl3jU3s;pb$;b9e>6;IAfHn#C{iD@{)X3>_KyDnbVzH; literal 0 HcmV?d00001 diff --git a/out/production/Bill-Splitting-App/main/view/SettleUpPanel.class b/out/production/Bill-Splitting-App/main/view/SettleUpPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..951eca1c505eaadfe37ab90c41dd106207277c2b GIT binary patch literal 2569 zcma)8TUQfT7~O{i62?&=2pX-57Ho)OdeLf)VkJt&2Cyce(N=qs9K*7lUKI=-Cp1HIMj1kh;aLSybVi`4*d!gcRk>!Q7BsP#$_dBO z#Z2u2H-yfhN+*r$+HEm25yfVPPS0XsrY3`Qspv)zL(~>dUL#M2zC>2$PwAYp=NyZQ zNP8K3Rcu8c!*()0BX01z?qqb+7SlChaYr)^hHzrSv)!g*JK_uxvdvL;hW5mSzqeDx zW7tKRXfJD)T-S?2r~87)o79e90bg`d8M9h54PiJ`Lj-%s$t_N9jhR+iSXsVg)*S`A zu~)(umt8%sVh}^rt4!eTGwcim_0}f2!7IXY13$4I^(-$6J&Ivk&($jxVLPHcaDgvX zsT4bc0}MNYEafCu8Pl*GPWuY>V?%JMNxTi%Qd1F3ukC^&{wvZWsRbXvt2G7Ost;In1T;YF#OaN>$2=`2In3P}?NnGhgn@PhO{ zM~WaFcuF{i^D16M)+1_?TNRBYv^CJY=j}2y<@dSLMXqF-x-NCDU=kN(^j%S0q)EvT zN5YCA&(Iqr>HJvTaZDqMS*mr6m*y4Za4Lerdh*@jiQua5pOR`D*UiQITDyW*WV${D zmvLP_4ap}iIV>_H0}ZUQ=VQ87(@_xH?Ku+gT#Sx_8!9T8BNbS60-}En4;Sl(Az@A{ zxQY1)bQM*Q)kYc4IGRpFFKpsRGZxHwk>!NP>Rh>#y%Nux*N{}Bt3sU3YPROF znlZ~nZdX<_#8kan6jt7&J0@pWpXHV&-~Gj~GpAAFc=jPjQktSW@}O}CjM#RiwnD1A zN;aEq_u%n`EaN>y<7B(Z_6C#=Aj-ULZNU3lmwAgsxhDadh_zV~pNtF%v2rc!zzuuZM$yjm>tK^bF^4grPew@PAMlOq(%1<&t8vT26y zG1GJi5MG-U&YW4cyE^chg3s|q1YfH73STqqTgAuYJe76RkO#lPOO9zRQFGPc+dsjR z$#?P+oa07W7xrM*H0SHJ^u{IwD{CC{OEnQR|Nom_%18SKk0n2HhUb$sGrD&sn_$TXBEQp18yvcBL5QwVa_FS1f;zpao-r1%=-Sc$x)+FzB0|r=Z^@Y2 zz?Ni31F>WeyVirh8t6~526iM{*j?yWx|Jpd8ravu{z5DfYT{rvc_5Z*;Hegl6q-0X z*}}2H!3K^uF*-F8YT)^i7S6byp7(eI6BKN+Fw(?y>?PMTSBT9tap`!th0BE&t`x#e zyxhdKJZM5AI?BzY??(nNhEMADP22a0^R>O$OI-8?O_l({zl#fj0@& zW$eRSc$<*DL)n(`4iVCcck!NwC63bFCFLFj@CUTjlI1rT=(8b;p*4iOj}L%uMM}yK zGU)TIwh$#$O~Rli<1m+8X(i)?@DbhH@G(B2yQKG1TDya9==VLXD75kee!|a){|5y~ Bl1Tsn literal 0 HcmV?d00001 diff --git a/src/main/usecase/AutoSaveGateway.java b/src/main/data/AutoSaveGateway.java similarity index 83% rename from src/main/usecase/AutoSaveGateway.java rename to src/main/data/AutoSaveGateway.java index b9c229a..c7e6906 100644 --- a/src/main/usecase/AutoSaveGateway.java +++ b/src/main/data/AutoSaveGateway.java @@ -1,4 +1,4 @@ -package data; +package main.data; public interface AutoSaveGateway { void saveDraft(String content); diff --git a/src/main/usecase/FileAutoSaveGateway.java b/src/main/data/FileAutoSaveGateway.java similarity index 92% rename from src/main/usecase/FileAutoSaveGateway.java rename to src/main/data/FileAutoSaveGateway.java index 1965e7f..f3c2ec7 100644 --- a/src/main/usecase/FileAutoSaveGateway.java +++ b/src/main/data/FileAutoSaveGateway.java @@ -1,4 +1,4 @@ -package data; +package main.data; import java.io.*; @@ -18,7 +18,7 @@ public void saveDraft(String content) { public String loadDraft() { if (!file.exists()) return ""; try (BufferedReader reader = new BufferedReader(new FileReader(file))) { - return read.readLine(); + return reader.readLine(); } catch (IOException e) { throw new RuntimeException("Failed to load draft", e); } diff --git a/src/main/usecase/AutoSaveController.java b/src/main/interface_adapters/AutoSaveController.java similarity index 74% rename from src/main/usecase/AutoSaveController.java rename to src/main/interface_adapters/AutoSaveController.java index 8470036..3803cda 100644 --- a/src/main/usecase/AutoSaveController.java +++ b/src/main/interface_adapters/AutoSaveController.java @@ -1,6 +1,8 @@ -package interface_adapters; +package main.interface_adapters; -import usecase.*; +import main.usecase.AutoSaveInputBoundary; +import main.usecase.AutoSaveRequestModel; +import main.usecase.AutoSaveResponseModel; public class AutoSaveController{ diff --git a/src/main/usecase/AutoSaveInputBoundary.java b/src/main/usecase/AutoSaveInputBoundary.java index d2caeb1..7294fcb 100644 --- a/src/main/usecase/AutoSaveInputBoundary.java +++ b/src/main/usecase/AutoSaveInputBoundary.java @@ -1,6 +1,6 @@ -package usecase; +package main.usecase; public interface AutoSaveInputBoundary { - AutoSaveResponseModel save(AutoSaveRequest Model requestModel); + AutoSaveResponseModel save(AutoSaveRequestModel requestModel); AutoSaveResponseModel load(); } \ No newline at end of file diff --git a/src/main/usecase/AutoSaveInteractor.java b/src/main/usecase/AutoSaveInteractor.java index 582df39..1f150b6 100644 --- a/src/main/usecase/AutoSaveInteractor.java +++ b/src/main/usecase/AutoSaveInteractor.java @@ -1,11 +1,11 @@ -package usecase; +package main.usecase; -import data.AutoSaveGateway; +import main.data.AutoSaveGateway; public class AutoSaveInteractor implements AutoSaveInputBoundary { - private final AutoSaveInteractor gateway; + private final AutoSaveGateway gateway; - public AutoSaveInteractor(AutoSaveInteractor gateway) { + public AutoSaveInteractor(AutoSaveGateway gateway) { this.gateway = gateway; } diff --git a/src/main/usecase/AutoSaveRequestModel.java b/src/main/usecase/AutoSaveRequestModel.java index 7d6a2bc..5c715fa 100644 --- a/src/main/usecase/AutoSaveRequestModel.java +++ b/src/main/usecase/AutoSaveRequestModel.java @@ -1,4 +1,4 @@ -package usecase; +package main.usecase; public class AutoSaveRequestModel { private final String content; diff --git a/src/main/usecase/AutoSaveResponseModel.java b/src/main/usecase/AutoSaveResponseModel.java index 5d3e02a..32a7a9d 100644 --- a/src/main/usecase/AutoSaveResponseModel.java +++ b/src/main/usecase/AutoSaveResponseModel.java @@ -1,4 +1,4 @@ -package usecase; +package main.usecase; public class AutoSaveResponseModel { private final boolean success; diff --git a/src/main/view/AutoSave.java b/src/main/view/AutoSave.java index 41858d6..afaffd4 100644 --- a/src/main/view/AutoSave.java +++ b/src/main/view/AutoSave.java @@ -1,8 +1,9 @@ package main.view; -import interface_adapters.AutoSaveController; -import usecase.AutoSaveInteractor; -import data.FileAutoSaveGateway; +import main.interface_adapters.AutoSaveController; +import main.usecase.AutoSaveInteractor; +import main.data.FileAutoSaveGateway; +import main.data.AutoSaveGateway; import javax.swing.*; import java.awt.*; @@ -10,6 +11,7 @@ public class AutoSave extends JPanel { private JLabel saveStatus; + private AutoSaveController controller; public AutoSave() { setLayout(new BorderLayout()); @@ -18,13 +20,13 @@ public AutoSave() { saveStatus.setForeground(Color.GREEN); add(saveStatus, BorderLayout.SOUTH); - FileAutoSaveGateway gateway = new FileAutoSaveGateway(); + AutoSaveGateway gateway = new FileAutoSaveGateway(); AutoSaveInteractor interactor = new AutoSaveInteractor(gateway); controller = new AutoSaveController(interactor); String draft = controller.loadDraft(); if (!draft.isEmpty()) { - setSaveStatus("Load previous draft.", color.BLUE); + setSaveStatus("Load previous draft.", Color.BLUE); } } From 1476e4ecc6d443712f2c10a8d6c330a1c78ca7d6 Mon Sep 17 00:00:00 2001 From: amyjq Date: Tue, 18 Nov 2025 12:52:04 -0500 Subject: [PATCH 38/84] changed group entity --- src/main/entities/Group.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/entities/Group.java b/src/main/entities/Group.java index 3d25dc9..ad529dd 100644 --- a/src/main/entities/Group.java +++ b/src/main/entities/Group.java @@ -22,8 +22,12 @@ public Group(String groupId, String groupName) { } + public void addMember(User user) { + this.members.add(user); + } public List getExpenses() { return expenses; } + } \ No newline at end of file From 5732af53c0cab93fa65d398e9c0f532aa7a54661 Mon Sep 17 00:00:00 2001 From: angelajiang Date: Tue, 18 Nov 2025 12:57:56 -0500 Subject: [PATCH 39/84] save local changes before merging. --- .idea/workspace.xml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 96256a6..7e25cbc 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,19 +4,7 @@ - - - - - - - - - - - - - + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - + - { + "keyToString": { + "Application.CreateGroupFrame.executor": "Run", + "Application.CreateGroupInteractorTest.executor": "Run", + "Application.ExpenseDesc.executor": "Run", + "Application.ExpenseFrame.executor": "Run", + "Application.GroupViewFrame.executor": "Run", + "Application.JoinGroupFrame.executor": "Run", + "Application.MyGroupFrame.executor": "Run", + "Application.SettleUpPanel.executor": "Run", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", + "RunOnceActivity.git.unshallow": "true", + "SHARE_PROJECT_CONFIGURATION_FILES": "true", + "SONARLINT_PRECOMMIT_ANALYSIS": "true", + "git-widget-placeholder": "group__use-cases", + "kotlin-language-version-configured": "true", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "vue.rearranger.settings.migration": "true" } -}]]> +} + + @@ -186,6 +163,7 @@ 1762785916007 + - + + + + + + + + + + + + + - - - - - + + + + + @@ -209,7 +246,11 @@ - + + + + + - - + \ No newline at end of file diff --git a/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_37_[Changes]/shelved.patch b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_37_[Changes]/shelved.patch new file mode 100644 index 0000000..4e18938 --- /dev/null +++ b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_37_[Changes]/shelved.patch @@ -0,0 +1,19 @@ +Index: bill-splitter-app.iml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n \n \n \n +=================================================================== +diff --git a/bill-splitter-app.iml b/bill-splitter-app.iml +--- a/bill-splitter-app.iml (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/bill-splitter-app.iml (date 1764617151186) +@@ -2,8 +2,9 @@ + + + +- + ++ ++ + + + diff --git a/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_37_[Changes]1/shelved.patch b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_37_[Changes]1/shelved.patch new file mode 100644 index 0000000..638ac4b --- /dev/null +++ b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_37_[Changes]1/shelved.patch @@ -0,0 +1,285 @@ +Index: src/main/java/entities/User.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package entities;\n//changed this entity\npublic class User {\n private String id;\n private String name;\n private String password;\n\n public User(String id, String name, String password) {\n this.id = id;\n this.name = name;\n this.password = password;\n }\n\n // Getters and setters\n public String getId() { return id; }\n public String getName() { return name; }\n public String getPassword() { return password; }\n\n public void setName(String name) { this.name = name; }\n public void setPassword(String email) { this.password = email; }\n\n @Override\n public String toString() {\n return name;\n }\n} +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/main/java/entities/User.java b/src/main/java/entities/User.java +--- a/src/main/java/entities/User.java (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/src/main/java/entities/User.java (date 1764617298787) +@@ -1,26 +1,67 @@ + package entities; + //changed this entity + public class User { +- private String id; +- private String name; ++ private Long id; ++ private String firstName; ++ private String lastName; ++ private String email; + private String password; + +- public User(String id, String name, String password) { ++ // Constructors ++ public User(Long id, String firstName, String lastName, String email) { ++ this.id = id; ++ this.firstName = firstName; ++ this.lastName = lastName; ++ this.email = email; ++ this.password = ""; ++ } ++ ++ public User(Long id, String firstName, String lastName, String email, String password) { + this.id = id; +- this.name = name; ++ this.firstName = firstName; ++ this.lastName = lastName; ++ this.email = email; + this.password = password; + } + +- // Getters and setters +- public String getId() { return id; } +- public String getName() { return name; } +- public String getPassword() { return password; } ++ public User(String firstName, String lastName, String email) { ++ this(null, firstName, lastName, email); ++ } ++ ++ public User() {} ++ ++ public Long getId() { return id; } ++ public String getFirstName() { return firstName; } ++ public String getLastName() { return lastName; } ++ public String getEmail() { return email; } ++ public String getPassword() {return password; } + +- public void setName(String name) { this.name = name; } +- public void setPassword(String email) { this.password = email; } ++ public void setId(Long id) { this.id = id; } ++ public void setFirstName(String firstName) { this.firstName = firstName; } ++ public void setLastName(String lastName) { this.lastName = lastName; } ++ public void setEmail(String email) { this.email = email; } ++ public void setPassword(String password) {this.password = password; } ++ ++ @Override ++ public boolean equals(Object obj) { ++ if (this == obj) return true; ++ if (obj == null || getClass() != obj.getClass()) return false; ++ User user = (User) obj; ++ return id != null && id.equals(user.id); ++ } ++ + + @Override + public String toString() { +- return name; ++ return "User{" + ++ "id=" + id + ++ ", firstName='" + firstName + '\'' + ++ ", lastName='" + lastName + '\'' + ++ ", email='" + email + '\'' + ++ '}'; ++ } ++ ++ public String getDisplayName() { ++ return firstName; + } + } +\ No newline at end of file +Index: src/main/java/entities/Group.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package entities;\n\nimport java.util.*;\n\npublic class Group {\n // Core properties\n private String groupId;\n private String groupName;\n\n // Members and relationships\n private List members;\n private List expenses;\n private Map balances; // Track who owes whom\n\n\n public Group(String groupId, String groupName) {\n this.groupId = groupId;\n this.groupName = groupName;\n this.members = new ArrayList<>();\n this.expenses = new ArrayList<>();\n this.balances = new HashMap<>();\n\n\n }\n public void addMember(User user) {\n this.members.add(user);\n }\n\n public List getExpenses() {\n return expenses;\n }\n\n} +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/main/java/entities/Group.java b/src/main/java/entities/Group.java +--- a/src/main/java/entities/Group.java (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/src/main/java/entities/Group.java (date 1764617343101) +@@ -1,33 +1,49 @@ + package entities; + +-import java.util.*; ++import java.util.ArrayList; ++import java.util.List; + + public class Group { +- // Core properties +- private String groupId; +- private String groupName; +- +- // Members and relationships ++ private Long id; ++ private String name; + private List members; +- private List expenses; +- private Map balances; // Track who owes whom + +- +- public Group(String groupId, String groupName) { +- this.groupId = groupId; +- this.groupName = groupName; ++ public Group(Long id, String name, List members) { ++ this.id = id; ++ this.name = name; ++ this.members = members; ++ } ++ public Group (Long id, String name) { ++ this.id = id; ++ this.name = name; + this.members = new ArrayList<>(); +- this.expenses = new ArrayList<>(); +- this.balances = new HashMap<>(); ++ } + ++ public Group() { ++ this.members = new java.util.ArrayList<>(); ++ } + +- } ++ public Long getId() { return id; } ++ public String getName() { return name; } ++ public List getMembers() { return members; } ++ ++ public void setId(Long id) { this.id = id; } ++ public void setName(String name) { this.name = name; } ++ public void setMembers(List members) { this.members = members; } ++ + public void addMember(User user) { +- this.members.add(user); ++ if (!members.contains(user)) { ++ members.add(user); ++ } + } + +- public List getExpenses() { +- return expenses; ++ public void removeMember(User user) { ++ members.remove(user); ++ } ++ ++ @Override ++ public String toString() { ++ return name; + } + + } +\ No newline at end of file +Index: .idea/workspace.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n "lastFilter": {\n "state": "OPEN",\n "assignee": "angelajj465"\n }\n}\n {\n "selectedUrlAndAccountId": {\n "url": "https://github.com/amyjqian/Bill-Splitting-App.git",\n "accountId": "1fdfdb60-dbec-49a9-89d9-230b5d7fac52"\n }\n}\n {\n "associatedIndex": 3\n}\n \n \n \n {\n "keyToString": {\n "Application.AppBuilder.executor": "Run",\n "Application.Main.executor": "Run",\n "Application.MyGroupFrame.executor": "Run",\n "Application.Unnamed.executor": "Run",\n "JUnit.ViewHistoryInteractorTest.executor": "Run",\n "RunOnceActivity.ShowReadmeOnStart": "true",\n "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",\n "RunOnceActivity.git.unshallow": "true",\n "git-widget-placeholder": "viewHistory",\n "kotlin-language-version-configured": "true",\n "project.structure.last.edited": "Modules",\n "project.structure.proportion": "0.0",\n "project.structure.side.proportion": "0.0"\n }\n}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1762785916007\n \n \n \n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/workspace.xml b/.idea/workspace.xml +--- a/.idea/workspace.xml (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/.idea/workspace.xml (date 1764621205813) +@@ -5,34 +5,11 @@ + + + +- +- +- + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ + + + + ++ + + { +@@ -66,7 +48,6 @@ + } + + +- + { +@@ -82,8 +63,8 @@ + "git-widget-placeholder": "viewHistory", + "kotlin-language-version-configured": "true", + "project.structure.last.edited": "Modules", +- "project.structure.proportion": "0.0", +- "project.structure.side.proportion": "0.0" ++ "project.structure.proportion": "0.15", ++ "project.structure.side.proportion": "0.17011495" + } + } + +@@ -118,4 +99,15 @@ + + + ++ ++ ++ + +\ No newline at end of file +Index: .idea/encodings.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/encodings.xml b/.idea/encodings.xml +--- a/.idea/encodings.xml (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/.idea/encodings.xml (date 1764551747943) +@@ -2,7 +2,7 @@ + + + +- +- ++ ++ + + +\ No newline at end of file diff --git a/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_41_[Changes]/shelved.patch b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_41_[Changes]/shelved.patch new file mode 100644 index 0000000..0473939 --- /dev/null +++ b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_15_41_[Changes]/shelved.patch @@ -0,0 +1,488 @@ +Index: .idea/workspace.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n "lastFilter": {\n "state": "OPEN",\n "assignee": "angelajj465"\n }\n}\n {\n "selectedUrlAndAccountId": {\n "url": "https://github.com/amyjqian/Bill-Splitting-App.git",\n "accountId": "deb1ad0f-e833-4c67-b696-1c96b6953a76"\n }\n}\n {\n "associatedIndex": 3\n}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1762785916007\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n file://$PROJECT_DIR$/src/main/use_case/create_group/CreateGroupPresenter.java\n 19\n \n \n file://$PROJECT_DIR$/src/test/java/use_case/join_group/JoinGroupInteractorTest.java\n 78\n \n \n file://$PROJECT_DIR$/src/main/java/interface_adapter/join_group/JoinGroupController.java\n 23\n \n \n file://$PROJECT_DIR$/src/main/use_case/join_group/JoinGroupOutputBoundary.java\n 4\n \n \n file://$PROJECT_DIR$/src/test/java/use_case/join_group/JoinGroupAPITest.java\n 24\n \n \n file://$PROJECT_DIR$/src/main/java/api/SplitwiseAPIImpl.java\n 90\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/workspace.xml b/.idea/workspace.xml +--- a/.idea/workspace.xml (revision 50ab653ff166807216577bbc9c418a108f3937fb) ++++ b/.idea/workspace.xml (date 1764621560755) +@@ -4,32 +4,9 @@ + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- + + + + + + + + + +- ++ + 1762785916007 + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- file://$PROJECT_DIR$/src/main/use_case/create_group/CreateGroupPresenter.java +- 19 +- +- +- file://$PROJECT_DIR$/src/test/java/use_case/join_group/JoinGroupInteractorTest.java +- 78 +- +- +- file://$PROJECT_DIR$/src/main/java/interface_adapter/join_group/JoinGroupController.java +- 23 +- +- +- file://$PROJECT_DIR$/src/main/use_case/join_group/JoinGroupOutputBoundary.java +- 4 +- +- +- file://$PROJECT_DIR$/src/test/java/use_case/join_group/JoinGroupAPITest.java +- 24 +- +- +- file://$PROJECT_DIR$/src/main/java/api/SplitwiseAPIImpl.java +- 90 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- + +\ No newline at end of file +Index: bill-splitter-app.iml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/bill-splitter-app.iml b/bill-splitter-app.iml +new file mode 100644 +--- /dev/null (date 1764621560746) ++++ b/bill-splitter-app.iml (date 1764621560746) +@@ -0,0 +1,6 @@ ++ ++ ++ ++ ++ +\ No newline at end of file +Index: .idea/misc.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/misc.xml b/.idea/misc.xml +--- a/.idea/misc.xml (revision 50ab653ff166807216577bbc9c418a108f3937fb) ++++ b/.idea/misc.xml (date 1764621560756) +@@ -8,5 +8,5 @@ + + + +- ++ + +\ No newline at end of file diff --git a/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_16_00_[Changes]/shelved.patch b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_16_00_[Changes]/shelved.patch new file mode 100644 index 0000000..40a82e1 --- /dev/null +++ b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_16_00_[Changes]/shelved.patch @@ -0,0 +1,586 @@ +Index: .idea/workspace.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n "lastFilter": {\n "state": "OPEN",\n "assignee": "angelajj465"\n }\n}\n {\n "selectedUrlAndAccountId": {\n "url": "https://github.com/amyjqian/Bill-Splitting-App.git",\n "accountId": "1fdfdb60-dbec-49a9-89d9-230b5d7fac52"\n }\n}\n {\n "associatedIndex": 3\n}\n \n \n \n {\n "keyToString": {\n "Application.AppBuilder.executor": "Run",\n "Application.Main.executor": "Run",\n "Application.MyGroupFrame.executor": "Run",\n "Application.Unnamed.executor": "Run",\n "JUnit.ViewHistoryInteractorTest.executor": "Run",\n "RunOnceActivity.ShowReadmeOnStart": "true",\n "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",\n "RunOnceActivity.git.unshallow": "true",\n "git-widget-placeholder": "viewHistory",\n "kotlin-language-version-configured": "true",\n "project.structure.last.edited": "Modules",\n "project.structure.proportion": "0.0",\n "project.structure.side.proportion": "0.0"\n }\n}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1762785916007\n \n \n \n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/workspace.xml b/.idea/workspace.xml +--- a/.idea/workspace.xml (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/.idea/workspace.xml (date 1764622665058) +@@ -4,35 +4,32 @@ + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- ++ + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + { +- "selectedUrlAndAccountId": { +- "url": "https://github.com/amyjqian/Bill-Splitting-App.git", +- "accountId": "1fdfdb60-dbec-49a9-89d9-230b5d7fac52" +- } +-} ++ "selectedUrlAndAccountId": { ++ "url": "https://github.com/amyjqian/Bill-Splitting-App.git", ++ "accountId": "deb1ad0f-e833-4c67-b696-1c96b6953a76" ++ } ++ } + { +- "associatedIndex": 3 +-} ++ "associatedIndex": 3 ++ } + + + + { + "keyToString": { +- "Application.AppBuilder.executor": "Run", +- "Application.Main.executor": "Run", ++ "Application.CreateGroupAPITest.executor": "Run", ++ "Application.CreateGroupFactory.executor": "Run", ++ "Application.CreateGroupFrame.executor": "Run", ++ "Application.CreateGroupInteractorTest.executor": "Run", ++ "Application.ExpenseDesc.executor": "Run", ++ "Application.ExpenseFrame.executor": "Run", ++ "Application.GroupViewFrame.executor": "Run", ++ "Application.JoinGroupAPITest.executor": "Run", ++ "Application.JoinGroupFrame.executor": "Run", ++ "Application.JoinGroupInteractorTest.executor": "Debug", + "Application.MyGroupFrame.executor": "Run", +- "Application.Unnamed.executor": "Run", +- "JUnit.ViewHistoryInteractorTest.executor": "Run", ++ "Application.SettleUpPanel.executor": "Run", ++ "Application.TestCreateGroupAPI.executor": "Run", ++ "Application.TestJoinGroupAPI.executor": "Run", ++ "Application.view.CreateGroupFrame.executor": "Debug", ++ "JUnit.CreateGroupInteractorTest.createGroupMockTest.executor": "Run", ++ "JUnit.CreateGroupInteractorTest.executor": "Coverage", ++ "JUnit.CreateGroupInteractorTest.mockTest.executor": "Run", ++ "JUnit.JoinGroupInteractorTest.joinGroupMockTest.executor": "Debug", ++ "JUnit.JoinGroupInteractorTest.joinGroupTestWithUI.executor": "Debug", ++ "JUnit.create_group in bill-splitter-app.executor": "Run", ++ "JUnit.use_case in bill-splitter-app.executor": "Run", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", + "RunOnceActivity.git.unshallow": "true", +- "git-widget-placeholder": "viewHistory", ++ "SHARE_PROJECT_CONFIGURATION_FILES": "true", ++ "SONARLINT_PRECOMMIT_ANALYSIS": "true", ++ "git-widget-placeholder": "group__use-cases__without__join", + "kotlin-language-version-configured": "true", +- "project.structure.last.edited": "Modules", +- "project.structure.proportion": "0.0", +- "project.structure.side.proportion": "0.0" ++ "last_opened_file_path": "C:/Users/tutu8/IdeaProjects/Bill-Splitting-App1/src/main/java", ++ "node.js.detected.package.eslint": "true", ++ "node.js.detected.package.tslint": "true", ++ "node.js.selected.package.eslint": "(autodetect)", ++ "node.js.selected.package.tslint": "(autodetect)", ++ "nodejs_package_manager_path": "npm", ++ "project.structure.last.edited": "Libraries", ++ "project.structure.proportion": "0.15", ++ "project.structure.side.proportion": "0.49080458", ++ "settings.editor.selected.configurable": "preferences.pathVariables", ++ "vue.rearranger.settings.migration": "true" + } + } + ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + + + + + + + +- ++ + 1762785916007 + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ file://$PROJECT_DIR$/src/main/use_case/create_group/CreateGroupPresenter.java ++ 19 ++ ++ ++ file://$PROJECT_DIR$/src/test/java/use_case/join_group/JoinGroupInteractorTest.java ++ 78 ++ ++ ++ file://$PROJECT_DIR$/src/main/java/interface_adapter/join_group/JoinGroupController.java ++ 23 ++ ++ ++ file://$PROJECT_DIR$/src/main/use_case/join_group/JoinGroupOutputBoundary.java ++ 4 ++ ++ ++ file://$PROJECT_DIR$/src/test/java/use_case/join_group/JoinGroupAPITest.java ++ 24 ++ ++ ++ file://$PROJECT_DIR$/src/main/java/api/SplitwiseAPIImpl.java ++ 90 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +\ No newline at end of file +Index: .idea/encodings.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/encodings.xml b/.idea/encodings.xml +--- a/.idea/encodings.xml (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/.idea/encodings.xml (date 1764622729385) +@@ -2,7 +2,7 @@ + + + +- +- ++ ++ + + +\ No newline at end of file +Index: .idea/misc.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/misc.xml b/.idea/misc.xml +--- a/.idea/misc.xml (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/.idea/misc.xml (date 1764621737441) +@@ -8,5 +8,5 @@ + + + +- ++ + +\ No newline at end of file +Index: .gitingnore +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>target/\n!.mvn/wrapper/maven-wrapper.jar\n!/src/main//target/\n!/src/test//target/\n\nIntelliJ IDEA\n.idea/*\n.idea/modules.xml\n.idea/jarRepositories.xml\n.idea/compiler.xml\n.idea/libraries/\n*.iws\n*.iml\n*.ipr\n.env\n\nEclipse\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\nNetBeans\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n!/src/main//build/\n!/src/test//build/\n\nVS Code\n.vscode/\n\nMac OS\n.DS_Store\n\nother files\nusers.csv +=================================================================== +diff --git a/.gitingnore b/.gitingnore +--- a/.gitingnore (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/.gitingnore (date 1764622588752) +@@ -1,3 +1,11 @@ ++# Default ignored files ++/shelf/ ++/workspace.xml ++# Editor-based HTTP Client requests ++/httpRequests/ ++# Datasource local storage ignored files ++/dataSources/ ++/dataSources.local.xml + target/ + !.mvn/wrapper/maven-wrapper.jar + !/src/main//target/ +Index: bill-splitter-app.iml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n \n \n \n +=================================================================== +diff --git a/bill-splitter-app.iml b/bill-splitter-app.iml +--- a/bill-splitter-app.iml (revision 41cbba755f39133d93f78b7ee1a86bead7b9b57c) ++++ b/bill-splitter-app.iml (date 1764621722530) +@@ -1,11 +1,5 @@ + + +- +- +- +- +- +- + + diff --git a/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_16_00_[Changes]1/shelved.patch b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_16_00_[Changes]1/shelved.patch new file mode 100644 index 0000000..e69de29 diff --git a/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_16_01_[Changes]/shelved.patch b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_16_01_[Changes]/shelved.patch new file mode 100644 index 0000000..8ab0bd7 --- /dev/null +++ b/.idea/shelf/Uncommitted_changes_before_Checkout_at_1_12_2025,_16_01_[Changes]/shelved.patch @@ -0,0 +1,153 @@ +Index: .idea/workspace.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n "lastFilter": {\n "state": "OPEN",\n "assignee": "angelajj465"\n }\n}\n {\n "selectedUrlAndAccountId": {\n "url": "https://github.com/amyjqian/Bill-Splitting-App.git",\n "accountId": "deb1ad0f-e833-4c67-b696-1c96b6953a76"\n }\n}\n {\n "associatedIndex": 3\n}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n