diff --git a/.gradle/9.3.1/executionHistory/executionHistory.bin b/.gradle/9.3.1/executionHistory/executionHistory.bin
index 855f95c..1d8e1c2 100755
Binary files a/.gradle/9.3.1/executionHistory/executionHistory.bin and b/.gradle/9.3.1/executionHistory/executionHistory.bin differ
diff --git a/.gradle/9.3.1/executionHistory/executionHistory.lock b/.gradle/9.3.1/executionHistory/executionHistory.lock
index 169f2c3..cb98617 100755
Binary files a/.gradle/9.3.1/executionHistory/executionHistory.lock and b/.gradle/9.3.1/executionHistory/executionHistory.lock differ
diff --git a/.gradle/9.3.1/fileHashes/fileHashes.bin b/.gradle/9.3.1/fileHashes/fileHashes.bin
index 3db4444..61b8b51 100755
Binary files a/.gradle/9.3.1/fileHashes/fileHashes.bin and b/.gradle/9.3.1/fileHashes/fileHashes.bin differ
diff --git a/.gradle/9.3.1/fileHashes/fileHashes.lock b/.gradle/9.3.1/fileHashes/fileHashes.lock
index d737ca8..8d8daee 100755
Binary files a/.gradle/9.3.1/fileHashes/fileHashes.lock and b/.gradle/9.3.1/fileHashes/fileHashes.lock differ
diff --git a/.gradle/9.3.1/fileHashes/resourceHashesCache.bin b/.gradle/9.3.1/fileHashes/resourceHashesCache.bin
index 6926026..6f49e3e 100755
Binary files a/.gradle/9.3.1/fileHashes/resourceHashesCache.bin and b/.gradle/9.3.1/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 28e5aea..8c66e33 100755
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index e8a51d8..014668a 100755
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
index 796d40a..d3d01cb 100755
Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ
diff --git a/.project b/.project
index 82c52ab..52c68db 100644
--- a/.project
+++ b/.project
@@ -15,8 +15,14 @@
+
+ org.eclipse.ajdt.core.ajbuilder
+
+
+
+ org.eclipse.ajdt.ui.ajnature
org.eclipse.jdt.core.javanature
org.eclipse.buildship.core.gradleprojectnature
diff --git a/build.gradle b/build.gradle
index c39434f..b7f1ebf 100755
--- a/build.gradle
+++ b/build.gradle
@@ -5,6 +5,7 @@
plugins {
id 'application'
+ id("io.freefair.aspectj") version "9.2.0"
id("org.openjfx.javafxplugin") version "0.1.0"
}
@@ -36,7 +37,7 @@ sourceSets {
javafx {
version = "25.0.2"
- modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.graphics' ]
+ modules = [ 'javafx.controls', 'javafx.fxml']
}
dependencies {
diff --git a/db/sample.db b/db/sample.db
index d2a9158..edc5340 100644
Binary files a/db/sample.db and b/db/sample.db differ
diff --git a/src/main/java/edu/bookocontacts/ControlDDXDialog.java b/src/main/java/edu/bookocontacts/ControlDDXDialog.java
index b96c351..1e95899 100644
--- a/src/main/java/edu/bookocontacts/ControlDDXDialog.java
+++ b/src/main/java/edu/bookocontacts/ControlDDXDialog.java
@@ -40,12 +40,13 @@ public class ControlDDXDialog extends Dialog {
@FXML
private TextField tfZip;
- public ControlDDXDialog() {
+ public ControlDDXDialog(Contact ct) {
super();
String fxml = "/media/ControlAddressDDXDialog.fxml";
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getClassLoader().getResource(fxml));
fxmlLoader.setController(this);
fxmlLoader.setLocation(getClass().getResource(fxml));
+
try {
fxmlLoader.load();
} catch (IOException exception) {
@@ -55,12 +56,25 @@ public class ControlDDXDialog extends Dialog {
getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
setTitle("Contact Address Dialog");
setHeaderText(String.format("Enter Contact Details"));
- setPropertyBindings();
+
+ setPropertyBindings(ct);
+
setResultConverter();
}
- private void setPropertyBindings() {
+ private void setPropertyBindings(Contact ct) {
Logger.getLogger(getClass().getName()).log(Level.INFO, "setPropertyBindings called.");
+ if (ct == null) {
+ return;
+ }
+ tfFirstName.setText(ct.getFirst_name());
+ tfLastName.setText(ct.getLast_name());
+ tfPhoneNo.setText(ct.getPhoneNo().getphone_number());
+ tfEmail.setText(ct.getEmail().getEmail_address());
+ tfStreet.setText(ct.getMailing_address().getStreet());
+ tfCity.setText(ct.getMailing_address().getStreet());
+ tfState.setText(ct.getMailing_address().getState());
+ tfZip.setText(ct.getMailing_address().getZip());
}
private void setResultConverter() {
diff --git a/src/main/java/edu/bookocontacts/StorageMonitor.aj b/src/main/java/edu/bookocontacts/StorageMonitor.aj
new file mode 100644
index 0000000..41a2da7
--- /dev/null
+++ b/src/main/java/edu/bookocontacts/StorageMonitor.aj
@@ -0,0 +1,10 @@
+package edu.bookocontacts;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public aspect StorageMonitor {
+
+ pointcut save(): execution(public * edu.bookocontacts.model.Factory.*(..));
+
+}
diff --git a/src/main/java/edu/bookocontacts/ViewController.java b/src/main/java/edu/bookocontacts/ViewController.java
index 9ebe4ab..d90fc71 100755
--- a/src/main/java/edu/bookocontacts/ViewController.java
+++ b/src/main/java/edu/bookocontacts/ViewController.java
@@ -27,6 +27,8 @@ import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.input.PickResult;
/**
* FXML Controller class
@@ -100,7 +102,7 @@ public class ViewController implements Initializable {
@Override
public void handle(javafx.event.ActionEvent t) {
- ControlDDXDialog dialog = new ControlDDXDialog();
+ ControlDDXDialog dialog = new ControlDDXDialog(contactView.getSelectionModel().getSelectedItem());
Optional result = dialog.showAndWait();
@@ -137,6 +139,26 @@ public class ViewController implements Initializable {
updatecontactView();
}
});
+
+ contactView.setOnMouseClicked(e -> {
+
+ PickResult p = e.getPickResult();
+ ControlDDXDialog dialog = new ControlDDXDialog(contactView.getSelectionModel().getSelectedItem());
+ Optional result = dialog.showAndWait();
+ if (result.isPresent()) {
+ log("result is present.");
+ // add to storage
+ Contact ct = (Contact) result.get();
+ try {
+ ct.save();
+ } catch (Exception ex) {
+ log(ex.getMessage());
+ }
+ updatecontactView();
+ }
+
+ });
+
}
private void initializeTable() {
diff --git a/src/main/java/edu/bookocontacts/model/DATASET.java b/src/main/java/edu/bookocontacts/model/DATASET.java
index 50eb400..eae7f71 100644
--- a/src/main/java/edu/bookocontacts/model/DATASET.java
+++ b/src/main/java/edu/bookocontacts/model/DATASET.java
@@ -35,7 +35,8 @@ public interface DATASET {
rs.getString("FIRST_NAME"),
rs.getString("LAST_NAME"),
new EmailAddress(rs.getString("EMAIL_ADDRESS")),
- new PhoneNumber(rs.getString("PHONE_NUMBER")));
+ new PhoneNumber(rs.getString("PHONE_NUMBER")),
+ new MailAddress(rs.getString("MAIL_ADDRESS")));
ct.status = EnumStatus.STORED;
list.add(ct);
}
diff --git a/src/main/java/edu/bookocontacts/model/Factory.java b/src/main/java/edu/bookocontacts/model/Factory.java
index f76550e..89e359b 100755
--- a/src/main/java/edu/bookocontacts/model/Factory.java
+++ b/src/main/java/edu/bookocontacts/model/Factory.java
@@ -10,14 +10,14 @@ import java.util.List;
/**
*
*/
-public interface Factory {
+public final class Factory {
public static List getAll(Contact clazz) {
return DATASET.FINDDATA();
}
static Contact createContact(Integer id, String first_name, String last_name, EmailAddress email,
- PhoneNumber phone_number) {
- Contact c = new Contact(first_name, last_name, email, phone_number, new MailAddress());
+ PhoneNumber phone_number, MailAddress mail) {
+ Contact c = new Contact(first_name, last_name, email, phone_number, mail);
c.setId(id);
return c;
diff --git a/src/main/java/edu/bookocontacts/model/MailAddress.java b/src/main/java/edu/bookocontacts/model/MailAddress.java
index a23da52..cd40f41 100644
--- a/src/main/java/edu/bookocontacts/model/MailAddress.java
+++ b/src/main/java/edu/bookocontacts/model/MailAddress.java
@@ -1,6 +1,8 @@
package edu.bookocontacts.model;
-public final class MailAddress{
+import java.util.Scanner;
+
+public final class MailAddress {
String street;
String city;
@@ -8,7 +10,27 @@ public final class MailAddress{
String zip;
public MailAddress() {
- this("", "", "", "");
+ this("", "", "", "");
+ }
+
+ public MailAddress(String addressline) {
+ this("", "", "", "");
+ if (addressline != null) {
+ try (Scanner scanner = new Scanner(addressline)) {
+ try {
+
+ scanner.useDelimiter(",\\s*");
+ street = scanner.next();
+ city = scanner.next();
+ state = scanner.next();
+ zip = scanner.next();
+
+ } catch (java.util.NoSuchElementException e) {
+ scanner.close();
+ }
+ }
+ }
+
}
public MailAddress(String street, String city, String state, String zip) {
@@ -17,7 +39,7 @@ public final class MailAddress{
this.state = state;
this.zip = zip;
}
-
+
public String getStreet() {
return street;
}
@@ -50,12 +72,12 @@ public final class MailAddress{
this.zip = zip;
}
- public String getMailingAddress(){
- return String.format( "%s %s %s %s", formatField(this.street), formatField(this.city), this.state, this.zip );
+ public String getMailingAddress() {
+ return String.format("%s %s %s %s", formatField(this.street), formatField(this.city), this.state, this.zip);
}
- private String formatField(String field){
- return field == null || field.isBlank()? "": field.trim() + ",";
+ private String formatField(String field) {
+ return field == null || field.isBlank() ? "" : field.trim() + ",";
}
@Override
@@ -112,15 +134,15 @@ public final class MailAddress{
sb.append("}}");
return sb.toString();
}
-
+
public Boolean isBlank() {
- if(street.isBlank() && city.isBlank() && state.isBlank()) {
- return true;
- }
- if( zip == null || zip.isBlank() ) {
- return true;
- }
- return false;
+ if (street.isBlank() && city.isBlank() && state.isBlank()) {
+ return true;
+ }
+ if (zip == null || zip.isBlank()) {
+ return true;
+ }
+ return false;
}
}
\ No newline at end of file