From 3101374e438f56dceee479174b8a50bac81a4f24 Mon Sep 17 00:00:00 2001 From: mudabbir-ahmad Date: Thu, 3 Apr 2025 11:22:46 +0100 Subject: [PATCH] updated write to CSV and Edit dialogue for address, also added attributes to handle CSV format of address and human-readable format for address, so that it is readable on the JRadioButton for humans and saved to the CSV correctly. --- src/main/java/cvbuilder/Main.java | 2 +- src/main/java/cvbuilder/model/Address.java | 94 ++++++++++++++++++++ src/main/java/cvbuilder/model/User.java | 15 ++-- src/main/java/cvbuilder/view/MainViewer.java | 46 +++++++++- 4 files changed, 145 insertions(+), 12 deletions(-) create mode 100644 src/main/java/cvbuilder/model/Address.java diff --git a/src/main/java/cvbuilder/Main.java b/src/main/java/cvbuilder/Main.java index 6c0d809..6856049 100644 --- a/src/main/java/cvbuilder/Main.java +++ b/src/main/java/cvbuilder/Main.java @@ -72,4 +72,4 @@ public class Main { new MainViewer(); } -} \ No newline at end of file +} diff --git a/src/main/java/cvbuilder/model/Address.java b/src/main/java/cvbuilder/model/Address.java new file mode 100644 index 0000000..ba7f19b --- /dev/null +++ b/src/main/java/cvbuilder/model/Address.java @@ -0,0 +1,94 @@ +package cvbuilder.model; + +public class Address { + private String flat; + private String addressLine1; + private String addressLine2; + private String postcode; + + public Address(String address) { + this.flat = ""; // Initialize flat to an empty string + this.addressLine1 = ""; // Initialize addressLine1 to an empty string + this.addressLine2 = ""; // Initialize addressLine2 to an empty string + this.postcode = ""; // Initialize postcode to an empty string + if (address == null || address.isEmpty()) { + this.flat = ""; + this.addressLine1 = ""; + this.addressLine2 = ""; + this.postcode = ""; + } else { + String[] parts = address.split("%%%%"); + if (parts.length == 1) { + this.addressLine1 = parts[0]; + } else if (parts.length == 2) { + this.addressLine1 = parts[0]; + this.postcode = parts[1]; + } else if (parts.length == 3) { + this.addressLine1 = parts[0]; + this.addressLine2 = parts[1]; + this.postcode = parts[2]; + } else { + String[] flatParts = parts[0].split("////"); + if (flatParts.length > 1) { + this.flat = flatParts[0]; + this.addressLine1 = flatParts[1]; + } else { + this.addressLine1 = parts[0]; + } + if (parts.length > 1) this.postcode = parts[1]; + if (parts.length > 2) this.addressLine2 = parts[2]; + } + } + } + + public String getHumanReadableFormat() { + StringBuilder sb = new StringBuilder(); + if (!flat.isEmpty()) sb.append(flat).append(", "); + sb.append(addressLine1); + if (!addressLine2.isEmpty()) sb.append(", ").append(addressLine2); + if (!postcode.isEmpty()) sb.append(", ").append(postcode); + return sb.toString(); + } + + public String getCsvFormat() { + StringBuilder sb = new StringBuilder(); + if (!flat.isEmpty()) sb.append(flat).append("////"); + sb.append(addressLine1); + if (!addressLine2.isEmpty()) sb.append("%%%%").append(addressLine2); + sb.append("%%%%").append(postcode); + return sb.toString(); + } + + // Getters and setters + public String getFlat() { + return flat; + } + + public void setFlat(String flat) { + this.flat = flat; + } + + public String getAddressLine1() { + return addressLine1; + } + + public void setAddressLine1(String addressLine1) { + this.addressLine1 = addressLine1; + } + + public String getAddressLine2() { + return addressLine2; + } + + public void setAddressLine2(String addressLine2) { + this.addressLine2 = addressLine2; + } + + public String getPostcode() { + return postcode; + } + + public void setPostcode(String postcode) { + this.postcode = postcode; + } +} diff --git a/src/main/java/cvbuilder/model/User.java b/src/main/java/cvbuilder/model/User.java index 1fe2ae5..f2dba07 100644 --- a/src/main/java/cvbuilder/model/User.java +++ b/src/main/java/cvbuilder/model/User.java @@ -6,8 +6,11 @@ public class User { private String title; private String email; private String phone; - private String address; + private Address address; + public User() { + this.address = new Address(""); + } public String getUserAttribute(String panelName) { return switch (panelName.toLowerCase()) { @@ -15,20 +18,18 @@ public class User { case "name" -> getName(); case "email" -> getEmail(); case "phone" -> getPhone(); - case "address" -> getAddress(); + case "address" -> getAddress().getHumanReadableFormat(); default -> "method error"; }; } - - //basic getters and setters - public String getAddress() { + public Address getAddress() { return address; } public void setAddress(String address) { - this.address = address; + this.address = new Address(address); } public String getPhone() { @@ -62,6 +63,4 @@ public class User { public void setName(String name) { this.name = name; } - - } diff --git a/src/main/java/cvbuilder/view/MainViewer.java b/src/main/java/cvbuilder/view/MainViewer.java index 5cfba61..51ccc92 100644 --- a/src/main/java/cvbuilder/view/MainViewer.java +++ b/src/main/java/cvbuilder/view/MainViewer.java @@ -1,6 +1,7 @@ package cvbuilder.view; import cvbuilder.controller.CsvExportSettings; +import cvbuilder.model.Address; import cvbuilder.model.User; import cvbuilder.model.UserGroup; @@ -140,7 +141,12 @@ public class MainViewer { JButton editButton = new JButton("Edit"); final int userIndex = i; editButton.addActionListener(e -> { - String newValue = showDialog("Edit " + panelName, value); + String newValue; + if (panelName.equalsIgnoreCase("address")) { + newValue = showAddressDialog("Edit " + panelName, value); + } else { + newValue = showDialog("Edit " + panelName, value); + } if (newValue != null && !newValue.isEmpty()) { // Update the user attribute switch (panelName.toLowerCase()) { @@ -281,6 +287,39 @@ public class MainViewer { return null; } + private String showAddressDialog(String title, String initialValue) { + JTextField flatField = new JTextField(); + JTextField addressLine1Field = new JTextField(); + JTextField addressLine2Field = new JTextField(); + JTextField postcodeField = new JTextField(); + + Address address = new Address(initialValue); + flatField.setText(address.getFlat()); + addressLine1Field.setText(address.getAddressLine1()); + addressLine2Field.setText(address.getAddressLine2()); + postcodeField.setText(address.getPostcode()); + + JPanel panel = new JPanel(new GridLayout(0, 1)); + panel.add(new JLabel("Flat (optional):")); + panel.add(flatField); + panel.add(new JLabel("Address line 1:")); + panel.add(addressLine1Field); + panel.add(new JLabel("Address line 2 (optional):")); + panel.add(addressLine2Field); + panel.add(new JLabel("Postcode:")); + panel.add(postcodeField); + + int result = JOptionPane.showConfirmDialog(null, panel, title, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + if (result == JOptionPane.OK_OPTION) { + String flat = flatField.getText().trim(); + String addressLine1 = addressLine1Field.getText().trim(); + String addressLine2 = addressLine2Field.getText().trim(); + String postcode = postcodeField.getText().trim(); + return (flat.isEmpty() ? "" : flat + "////") + addressLine1 + (addressLine2.isEmpty() ? "" : "%%%%" + addressLine2) + "%%%%" + postcode; + } + return null; + } + private JPanel createFooter(JTabbedPane tabbedPane) { JPanel footer = new JPanel(new BorderLayout()); footer.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); @@ -505,7 +544,7 @@ public class MainViewer { titleData[i] = user.getTitle(); emailData[i] = user.getEmail(); phoneData[i] = user.getPhone(); - addressData[i] = user.getAddress(); + addressData[i] = user.getAddress().getCsvFormat(); } // Process and write each section based on inclusion settings @@ -555,4 +594,5 @@ public class MainViewer { } } -} \ No newline at end of file +} +