From 21f792685cd9305b318c9d3903ab97d79cfa7337 Mon Sep 17 00:00:00 2001 From: Sherwin Price Date: Thu, 19 Feb 2026 18:48:06 -0500 Subject: [PATCH] update project. --- .../executionHistory/executionHistory.bin | Bin 115665 -> 115665 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/9.3.1/fileHashes/fileHashes.bin | Bin 25797 -> 25947 bytes .gradle/9.3.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.3.1/fileHashes/resourceHashesCache.bin | Bin 19891 -> 20673 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .settings/org.eclipse.buildship.core.prefs | 12 +- .vscode/launch.json | 2 +- build.gradle | 2 +- db/sample.db | Bin 0 -> 12288 bytes readme.txt | 21 +++ .../java/edu/bookocontacts/AppSceneView.java | 1 + .../edu/bookocontacts/ControlDDXDialog.java | 30 ++-- src/main/java/edu/bookocontacts/DATASET.java | 38 ----- .../edu/bookocontacts/ViewController.java | 131 +++++++++--------- .../java/edu/bookocontacts/model/Contact.java | 30 ++-- .../java/edu/bookocontacts/model/DATASET.java | 105 ++++++++++++++ .../edu/bookocontacts/model/EmailAddress.java | 18 ++- .../edu/bookocontacts/model/EnumStatus.java | 5 + .../java/edu/bookocontacts/model/Factory.java | 64 +++------ .../model/{Address.java => MailAddress.java} | 38 +++-- .../java/edu/bookocontacts/model/Person.java | 47 ------- .../media/ControlAddressDDXDialog.fxml | 16 +-- src/main/resources/media/TableView.fxml | 20 +-- 25 files changed, 315 insertions(+), 265 deletions(-) delete mode 100644 src/main/java/edu/bookocontacts/DATASET.java create mode 100644 src/main/java/edu/bookocontacts/model/DATASET.java create mode 100644 src/main/java/edu/bookocontacts/model/EnumStatus.java rename src/main/java/edu/bookocontacts/model/{Address.java => MailAddress.java} (67%) delete mode 100755 src/main/java/edu/bookocontacts/model/Person.java diff --git a/.gradle/9.3.1/executionHistory/executionHistory.bin b/.gradle/9.3.1/executionHistory/executionHistory.bin index 2828a91a00205c2b45b5a6b4a2bf9614a6bed067..855f95c985714aac800ae4adeff4a192a4a1bb43 100755 GIT binary patch delta 2562 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 P2P*vTuU`l${5}Ezxj%uj diff --git a/.gradle/9.3.1/executionHistory/executionHistory.lock b/.gradle/9.3.1/executionHistory/executionHistory.lock index acffcc0a3f0f70355e552b3c36cfe56166ea2447..169f2c3e6cd2619ab90f1c4cce9522d707c03fa3 100755 GIT binary patch literal 17 UcmZSXH>umx74fHr0Sp+$0X01Ya{vGU literal 17 UcmZSXH>umx74fHr0RpZ705$jpF8}}l diff --git a/.gradle/9.3.1/fileHashes/fileHashes.bin b/.gradle/9.3.1/fileHashes/fileHashes.bin index bbb97af412203bc27413d838f48ef97c2134fe05..3db444475ba1842a647d5846243154bd967f6d82 100755 GIT binary patch delta 1517 zcmX?llJWK_#tkMCj8i9@N*D+QfL(JG1D;0D{ zYE`kCyv6_O`*|LY0_qW9>n9nSLUb^EWnf^?GiG35&}3j>Py}It?^X+DYaX2L<55*Q z<%LC75LAZ;M8`JW$+B^3EM+aZ3X|RA^mxiza&;jxyeg9olSRZPMK9Jn8pA!wIr76Z z@$F#EExGNJSI0>y6eet2$8u)B?{ohg)8}yuAVJZRUj@?7m=Req`DxsW`p>FA7IX$$ zKVALC-@WIc3oF=!d673jiWnHAOfVfhCGNVa{~n7)>;d0d|0%?u0PCoUbcN_(U5u$i zX`-Zo`_;(norV+hHaNbp0O=_HyKpT71A{pO0|RRurk1t8^gfu~vNd(SusMC}yKYC2 zma>k2Cn1(d+@0*4pvF>WD=9cRHz9$gY?49E?tEMqvr2lI z&0Lx9t}B0-W~V{5tb}M`ubv#}D_pN0Ett7^c2DMCfrGAk?RuzcSkp0$m7Bu%i9M{V zY2oh1Zz9FK&QKkzAf`%w$J8Md=5P90n`t7qmxbky8@i9cI;Kf}0O??1U|=~p`D{{I zkY?FZY3`PXQ;z=g_f+z5``ng`RfRfOX6l zE`;dd1e5SE{a&AHbh%tTg#RRGPq*K!K54X?IO3)VNZeS+$k57EIs6H~|QUp-qk#|s`RYnXLH zbmB86sE%bIpD-{mu+N!nm@F(Wvg63B8qFGw(~tG8?)Lo*QPjiwyqQ2 z6|K_yvg*6q-O7elPEZ}ZART%P46LA(jb_P$Rz~eELy=C#_=aZNpXYM^UQ}|=1t~&AH_uK?W5sN4J>@)f>p;bp`gg6{Pdo?f zIMWDH$-uzCX*GFjGB|-;nY=$4l+zn;PyU#!S6_Ul@eaghw%3@3Zq&cm9>*ss7W8_( z{JrFis52-EVATRIV<1`p DT{@U4 diff --git a/.gradle/9.3.1/fileHashes/fileHashes.lock b/.gradle/9.3.1/fileHashes/fileHashes.lock index 61d6feed55f9a9684804efe3531c5c770c8f20ea..d737ca8b422d907eccbfe331de15426bae641509 100755 GIT binary patch literal 17 VcmZS1 diff --git a/.gradle/9.3.1/fileHashes/resourceHashesCache.bin b/.gradle/9.3.1/fileHashes/resourceHashesCache.bin index 96cd4c24952f96a7a0c26d6bc884a2f03ba969d9..692602614823990d8c2484ff1c2926cbd5673dc0 100755 GIT binary patch delta 1337 zcmdlyoAKa6#tkMCjt(78GynMd+xjqof%oM9P|)@2i&Ch#f(cld!Ji!}{J*=i|Ag>v zHW#RP?qpYq27&pDe6{EC&RhZ!446N8uS9^rvcub_y*TIQ01@;%JegI}LSU`F)#amm zmS2Jh28d5Kl~fSe7dBmQwyI(RM9{x~vajR@fv4WnFQsZEvqJ>^7Eb;uX`%61n9uBh z(Ay-4U_dR*RbPXrO3v6eQv)LIyLqyzl!Cx7&f`%5Q7@-J1+PxFl~NF3Pd#@!Kc|1H@j(TxVaAFuo?d;$MZ*gs?!R&JR;d61m3K`${Ac`vIxN6) z@?R+h0nLZ}%YUqyQUOsJ5ItE`+Co5g$=OaRp-V3yf`0XrU8ODgza$;;OIe=*5%a%1 zxl~#~!=W%)`}X6_eNaJ7nEj3x21V6=x&lz~uakSF12p2-eVF+4kOwpf{k>s|6P4TU zt<9>t2vO`8JNc@#g-wN@XU;jM*EgVoPhpBHe%9SM^83$1h`8@}m^h4PU|&tJ0L*Cws6L~h;6frO`psBd%mD(~XKYp2*wr~A}HUB?> zA_z^1O#i!sg$Hjh%@i<*=H1?HjcEwi^C^i}Pu$rsA#swyl!K?PVX7!w%QMk?)7F^cc0#)(IRVDANz=ogklc(qGxhIco2vkM*i@jTR{5RgaQ*l{$$M5tiOf&ZXWdHy2 z(*6Ucj#;%ArlikjV5morn`cv)^R<`j1|MGVWWMD8$ImbgSu9t%^KZ)Ss=dYsUI}Z4 zf)XZLrkagdt=sQpNoozQi-#CP6#`cT#*_HFdkNf4;`d`?>Xril5!bKR delta 117 zcmX@Oka6>D#tkMCf|?ypGynMd+xjqof%oLer4kL3c_lq2=Smt(-YO|E`KjcJ$xEdS zCbLRQOg5F4n4Bt|F!`&r$K+5MiOH=p29wXq7)}oNJNtO3t|C}3b7U}R))P*7lCVBlh4U|?oI07eD|1{MUD0mMh*Vr6nM z==J{M<^RFJ#P^wj?=$~Ntg1!@M?+vV1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON zfchcO7|h5nE-lU2R9ljml#}Z0?-%0e90H}7oP%5)LtGU?9G!ez6`+C|TnbR&>7w8l z>g(hhq!19~>FXF2so?DzsRNgG^9%|OiT88#byWy)jR-+V_&8!05Ag8!bB%`@iK@lb z*U{4_-qFP+$Tc_^%{UAxE=^q~HgQL3MuyD1l+=pi!ko;K)cC~Gl6){f9_o>JLns5( zujc>-Eid0G26oi-Qw$aw?5X40J6lEOd=c3=9kvJW`8N6DQ z3>-4@OL7x4b3m3FS{f*XXCxM-Dg@-98EIr}Vrpu|#?B}$uFBxZ>zkjEn46dqoSRva z0dkSKxw)>TrKP2@v9W?{POd_5iH?F#Vo`cN$T>!a=0;}xVGOc3<3*MOzIlf}+jX)IitF+{^?l0FO0u0|NsEkHpgAR0W?r9fg3@{DPcR1?S9?N*!N69R*_( z14{#KMs`MVNmW$_j-bR`P%@~>&x06gXrOBWP6<_T1G)I$GqCetWZ=KZ|C|3S|4aVI z{CD}U^IyjqlA{u%Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Uh0!0<6r8 kjO-jBl8+rk^0I+Q9##;^4O+g>#>EU`b270oGjehO0M4cDL;wH) literal 0 HcmV?d00001 diff --git a/readme.txt b/readme.txt index 17eab94..ca77a40 100644 --- a/readme.txt +++ b/readme.txt @@ -21,6 +21,27 @@ Tests with ASPECTJ: schema +------- +CREATE TABLE CONTACT( + ID NUMBER PRIMARY KEY, + FIRST_NAME TEXT, + LAST_NAME TEXT, + PHONE_NUMBER TEXT, + EMAIL_ADDRESS TEXT, + MAIL_ADDRESS TEXT +); +------- + +INSERT INTO CONTACT (ID, FIRST_NAME, LAST_NAME, PHONE_NUMBER, EMAIL_ADDRESS, MAIL_ADDRESS) +VALUES + (8,"Ramon", "Razone", "443-310-8764","Raz@home.com",NULL), + (9,"Manny", "Zonie", "443-350-6764","Zonie@home.com","7000 Hause Ln, People City,MN, 34090"), + (10,"Von", "Ray", "443-210-9764","RayVon@home.com",""); + +UPDATE CONTACT SET MAIL_ADDRESS=NULL WHERE ID=8; + + +------- CREATE TABLE contact ( contact_id NUMBER PRIMARY KEY, first_name TEXT, diff --git a/src/main/java/edu/bookocontacts/AppSceneView.java b/src/main/java/edu/bookocontacts/AppSceneView.java index 7b79ba8..3baeb05 100755 --- a/src/main/java/edu/bookocontacts/AppSceneView.java +++ b/src/main/java/edu/bookocontacts/AppSceneView.java @@ -4,6 +4,7 @@ import java.io.InputStream; import java.util.logging.Level; import java.util.logging.Logger; +import edu.bookocontacts.model.DATASET; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.fxml.JavaFXBuilderFactory; diff --git a/src/main/java/edu/bookocontacts/ControlDDXDialog.java b/src/main/java/edu/bookocontacts/ControlDDXDialog.java index aa7262e..b96c351 100644 --- a/src/main/java/edu/bookocontacts/ControlDDXDialog.java +++ b/src/main/java/edu/bookocontacts/ControlDDXDialog.java @@ -11,11 +11,15 @@ import javafx.scene.control.Dialog; import javafx.scene.control.TextField; import javafx.util.Callback; -import edu.bookocontacts.model.Address; +import edu.bookocontacts.model.MailAddress; import edu.bookocontacts.model.Contact; import edu.bookocontacts.model.EmailAddress; import edu.bookocontacts.model.PhoneNumber; +/** + * FXML Controller class + * + */ public class ControlDDXDialog extends Dialog { @FXML @@ -60,55 +64,51 @@ public class ControlDDXDialog extends Dialog { } private void setResultConverter() { - Logger.getLogger(getClass().getName()).log(Level.INFO, "setResultConverter called."); Callback aRC = (buttonType) -> { if (buttonType == ButtonType.OK) { if (getFirstName().isBlank() && (getEmail().isBlank() || getPhoneNo().isBlank())) { return null; } - if (getFirstName().isBlank() || getStreet().isEmpty() || getCity().isEmpty() || getState().isEmpty() - || getZip().isEmpty()) { - return null; - } return new Contact(getFirstName(), getLastName(), new EmailAddress(getEmail()), - new PhoneNumber(getPhoneNo()), new Address(getStreet(), getCity(), getState(), getZip())); + new PhoneNumber(getPhoneNo()), new MailAddress(getStreet(), getCity(), getState(), getZip())); } return null; }; setResultConverter(aRC); + Logger.getLogger(getClass().getName()).log(Level.INFO, "setResultConverter called."); } private String getFirstName() { - return ""; + return String.format( "%s", tfFirstName.getText()); } private String getLastName() { - return ""; + return String.format("%s", tfLastName.getText()); } private String getPhoneNo() { - return ""; + return String.format("%s", tfPhoneNo.getText()); } private String getEmail() { - return ""; + return String.format("%s", tfEmail.getText()); } private String getZip() { - return tfZip.getText(); + return String.format("%s", tfZip.getText()); } private String getState() { - return tfState.getText(); + return String.format("%s", tfState.getText()); } private String getCity() { - return tfCity.getText(); + return String.format("%s", tfCity.getText()); } private String getStreet() { - return tfStreet.getText(); + return String.format("%s", tfStreet.getText()); } } diff --git a/src/main/java/edu/bookocontacts/DATASET.java b/src/main/java/edu/bookocontacts/DATASET.java deleted file mode 100644 index 4d27d93..0000000 --- a/src/main/java/edu/bookocontacts/DATASET.java +++ /dev/null @@ -1,38 +0,0 @@ -package edu.bookocontacts; - -import java.io.File; -import java.io.PrintWriter; -import java.nio.file.Files; -import java.util.ListIterator; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.sqlite.SQLiteDataSource; - -import edu.bookocontacts.model.Contact; - -public final class DATASET { - public final static ListIterator FINDDATA() { - try { - File rootDir = new File(String.format("%s", DataRepositoryConfig.getPath())); - Files.createDirectories(rootDir.toPath()); - - SQLiteDataSource dataSource = new SQLiteDataSource(); - dataSource.setUrl(String.format("jdbc:sqlite:%ssample.db", DataRepositoryConfig.getPath())); - - dataSource.getConnection(); - } catch (Exception ex) { - Logger.getLogger(DATASET.class.getName()).log(Level.SEVERE, null, ex); - } - - return null; - } - - public final static class DataRepositoryConfig { - public final static String getPath() { - String home = System.getenv("HOME") != null ? System.getenv("HOME") - : System.getenv("HOMEDRIVE") + System.getenv("HOMEPATH"); - return home.replace('\\', '/') + "/workspace/bookocontacts/db/"; - } - } -} diff --git a/src/main/java/edu/bookocontacts/ViewController.java b/src/main/java/edu/bookocontacts/ViewController.java index 81eb11e..9ebe4ab 100755 --- a/src/main/java/edu/bookocontacts/ViewController.java +++ b/src/main/java/edu/bookocontacts/ViewController.java @@ -4,20 +4,17 @@ */ package edu.bookocontacts; -import java.util.logging.Level; -import java.util.logging.Logger; - -import edu.bookocontacts.model.Factory; -import edu.bookocontacts.model.Person; -import edu.bookocontacts.model.Address; -import edu.bookocontacts.model.PhoneNumber; -import edu.bookocontacts.model.Contact; - import java.net.URL; import java.util.Collections; import java.util.Comparator; import java.util.Optional; import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; + +import edu.bookocontacts.model.Contact; +import edu.bookocontacts.model.Factory; +import edu.bookocontacts.model.PhoneNumber; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; @@ -27,12 +24,9 @@ import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.Pagination; import javafx.scene.control.TableColumn; -import javafx.scene.control.TableColumn.SortType; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; /** * FXML Controller class @@ -43,29 +37,29 @@ public class ViewController implements Initializable { Logger logger = Logger.getLogger(getClass().getName()); @FXML - private TableView personView = new TableView<>(); + private TableView contactView = new TableView<>(); @FXML - private TableColumn personViewIdCol; + private TableColumn contactViewIdCol; @FXML - private TableColumn personViewNameCol; + private TableColumn contactViewNameCol; @FXML - private TableColumn personViewPhoneNoCol; + private TableColumn contactViewPhoneNoCol; @FXML Pagination pagination; @FXML - private Button save; - - private Button id = new Button("ID"); - - private ImageView upImg = new ImageView(new Image("/media/up.png")); - private ImageView downImg = new ImageView(new Image("/media/down.png")); + private Button btnAdd; + @FXML + private Button btnDel; + @FXML + private Button btnSrch; + @FXML + private TextField txtSrch; private ObservableList contacts = null; private int pageCount = 5; private int itemsPerPage = 4; private int currentPageIndex = 0; - private boolean order = true; private void log(String message) { logger.log(Level.INFO, message); @@ -76,8 +70,11 @@ public class ViewController implements Initializable { */ public void initialize(URL location, ResourceBundle resources) { log("initialize"); + btnSrch.setDisable(true); + txtSrch.setDisable(true); + contacts = FXCollections.observableArrayList(Factory.getAll(new Contact())); - log(String.format("Person size: %d", contacts.size())); + log(String.format("Contact List size: %d", contacts.size())); sort(); initializeTable(); @@ -89,13 +86,17 @@ public class ViewController implements Initializable { pagination.currentPageIndexProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Number oldValue, Number newValue) { - log("Pagination Changed from " + oldValue + " , to " + newValue); + log(String.format("Pagination Changed from %d to %d", oldValue, newValue)); currentPageIndex = newValue.intValue(); - updatePersonView(); + try { + updatecontactView(); + } catch (IllegalArgumentException ex) { + log(ex.getMessage()); + } } }); - save.setOnAction(new javafx.event.EventHandler() { + btnAdd.setOnAction(new javafx.event.EventHandler() { @Override public void handle(javafx.event.ActionEvent t) { @@ -106,33 +107,53 @@ public class ViewController implements Initializable { if (result.isPresent()) { log("result is present."); // add to storage - // contacts.add((Address) result.get()); - // bind to model - // tvInventory.refresh(); - // - // sort(); - // updatePersonView(); - + Contact ct = (Contact) result.get(); + ct.setId(contacts.size()); + contacts.add(ct); + try { + ct.save(); + } catch (Exception ex) { + log(ex.getMessage()); + } + updatecontactView(); } } }); - id.setOnAction(new javafx.event.EventHandler() { + btnDel.setOnAction(new javafx.event.EventHandler() { @Override public void handle(javafx.event.ActionEvent t) { - sort(); - if (order) { - Collections.reverse(contacts); + Contact ct = contactView.getSelectionModel().getSelectedItem(); + log(String.format("%s", ct)); + contacts.remove(ct); + pagination.setPageCount(getPageCount(contacts.size(), itemsPerPage)); + try { + // delete from storage + ct.markDeleted(); + ct.save(); + } catch (Exception ex) { + log(ex.getMessage()); } - log(" order = " + order + "; data = " + contacts); - order = !order; - id.setGraphic((order) ? upImg : downImg); - updatePersonView(); - log(" comparator called"); + updatecontactView(); } }); } + private void initializeTable() { + + contactViewIdCol.setCellValueFactory(new PropertyValueFactory("Id")); + contactViewNameCol.setCellValueFactory(new PropertyValueFactory("Name")); + + contactViewPhoneNoCol.setCellValueFactory(new PropertyValueFactory("PhoneNo")); + contactViewPhoneNoCol.setSortable(false); + + if (contacts.size() < itemsPerPage) { + contactView.getItems().setAll(contacts.subList(0, contacts.size())); + } else { + contactView.getItems().setAll(contacts.subList(0, itemsPerPage)); + } + } + private void sort() { Collections.sort(contacts, new Comparator() { @Override @@ -143,35 +164,15 @@ public class ViewController implements Initializable { }); } - public void updatePersonView() { + public void updatecontactView() throws IllegalArgumentException { log("update View"); - personView.getItems() + contactView.getItems() .setAll(contacts.subList(currentPageIndex * itemsPerPage, ((currentPageIndex * itemsPerPage + itemsPerPage <= contacts.size()) ? currentPageIndex * itemsPerPage + itemsPerPage : contacts.size()))); } - private void initializeTable() { - personViewIdCol.setCellValueFactory(new PropertyValueFactory("Id")); - id.setGraphic(upImg); - personViewIdCol.setGraphic(id); - personViewIdCol.setSortable(false); - personViewNameCol.setCellValueFactory(new PropertyValueFactory("Name")); - personViewNameCol.sortTypeProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue paramObservableValue, SortType paramT1, - SortType paramT2) { - log("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2); - id.setGraphic(null); - } - }); - personViewPhoneNoCol.setCellValueFactory(new PropertyValueFactory("PhoneNo")); - personViewPhoneNoCol.setText("PhoneNo"); - personViewPhoneNoCol.setSortable(false); - personView.getItems().setAll(contacts.subList(0, itemsPerPage)); - } - public int getItemsPerPage() { return itemsPerPage; } diff --git a/src/main/java/edu/bookocontacts/model/Contact.java b/src/main/java/edu/bookocontacts/model/Contact.java index 2d858d8..f8e015f 100644 --- a/src/main/java/edu/bookocontacts/model/Contact.java +++ b/src/main/java/edu/bookocontacts/model/Contact.java @@ -12,7 +12,8 @@ public class Contact { private String last_name = null; private PhoneNumber phone_number; private EmailAddress email_address; - private Address mailing_address; + private MailAddress mailing_address; + EnumStatus status = EnumStatus.STORED; public Contact() { this("", ""); @@ -24,7 +25,7 @@ public class Contact { } public Contact(String first_name, String last_name, EmailAddress email_address, PhoneNumber phone_number, - Address mailing_address) + MailAddress mailing_address) throws IllegalArgumentException { this.phone_number = phone_number; this.mailing_address = mailing_address; @@ -33,8 +34,9 @@ public class Contact { this.first_name = first_name; this.last_name = last_name; - if (this.first_name==null && (email_address.isBlank() || phone_number.isBlank())){ - throw new IllegalArgumentException(String.format("%s %s", "Contact: requires Phone Number or Email Address")); + if (this.first_name == null && (email_address.isBlank() || phone_number.isBlank())) { + throw new IllegalArgumentException( + String.format("%s %s", "Contact: requires Phone Number or Email Address")); } this.phone_number = phone_number; @@ -42,7 +44,7 @@ public class Contact { this.email_address = email_address; } - public Contact(PhoneNumber phone_number, Address mailing_address, EmailAddress email_address) + public Contact(PhoneNumber phone_number, MailAddress mailing_address, EmailAddress email_address) throws IllegalArgumentException { this.phone_number = phone_number; this.mailing_address = mailing_address; @@ -76,16 +78,20 @@ public class Contact { public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("{ \"Account\":{"); - sb.append("\"account_number\": \"").append(id).append("\","); + sb.append("{\"id\": \"").append(id).append("\","); sb.append("\"phone_number\": \"").append(phone_number).append("\","); - sb.append("\"mailing_address\": ").append(mailing_address).append(","); sb.append("\"email_address\": ").append(email_address).append(","); - sb.append("}}"); + sb.append("}"); return sb.toString(); } - public static void Write(Contact acct) throws IOException { + public void save() throws IOException { + Factory.save(this); + this.status = EnumStatus.STORED; + } + + public void markDeleted() { + this.status = EnumStatus.DELETED; } public Integer getId() { @@ -124,11 +130,11 @@ public class Contact { this.phone_number = phone_number; } - public Address getMailing_address() { + public MailAddress getMailing_address() { return mailing_address; } - public void setMailing_address(Address mailing_address) { + public void setMailing_address(MailAddress mailing_address) { this.mailing_address = mailing_address; } diff --git a/src/main/java/edu/bookocontacts/model/DATASET.java b/src/main/java/edu/bookocontacts/model/DATASET.java new file mode 100644 index 0000000..50eb400 --- /dev/null +++ b/src/main/java/edu/bookocontacts/model/DATASET.java @@ -0,0 +1,105 @@ +package edu.bookocontacts.model; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.sqlite.SQLiteDataSource; + +public interface DATASET { + public static PreparedStatement getPreparedStatement(String sql) throws SQLException, IOException { + File rootDir = new File(String.format("%s", DataRepositoryConfig.getPath())); + Files.createDirectories(rootDir.toPath()); + + SQLiteDataSource dataSource = new SQLiteDataSource(); + dataSource.setUrl(String.format("jdbc:sqlite:%ssample.db", DataRepositoryConfig.getPath())); + return dataSource.getConnection().prepareStatement(sql); + } + + public static List FINDDATA() { + ArrayList list = new ArrayList(); + try { + PreparedStatement stmt = getPreparedStatement(String.format( + "SELECT ID, FIRST_NAME, LAST_NAME, EMAIL_ADDRESS, PHONE_NUMBER, MAIL_ADDRESS FROM CONTACT;")); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Contact ct = Factory.createContact(rs.getInt("ID"), + rs.getString("FIRST_NAME"), + rs.getString("LAST_NAME"), + new EmailAddress(rs.getString("EMAIL_ADDRESS")), + new PhoneNumber(rs.getString("PHONE_NUMBER"))); + ct.status = EnumStatus.STORED; + list.add(ct); + } + + } catch (Exception ex) { + Logger.getLogger(DATASET.class.getName()).log(Level.SEVERE, null, ex); + } + return list; + } + + public interface DataRepositoryConfig { + public static String getPath() { + String home = System.getenv("HOME") != null ? System.getenv("HOME") + : System.getenv("HOMEDRIVE") + System.getenv("HOMEPATH"); + return home.replace('\\', '/') + "/workspace/bookocontacts/db/"; + } + } + + public static void UPDATESERT(Contact ct) { + try { + PreparedStatement stmt = getPreparedStatement(String.format( + "SELECT ID, FIRST_NAME, LAST_NAME, EMAIL_ADDRESS, PHONE_NUMBER, MAIL_ADDRESS FROM CONTACT WHERE ID=?;")); + stmt.setInt(1, ct.getId()); + ResultSet rs = stmt.executeQuery(); + if (rs.next()) { + stmt.close(); + stmt = getPreparedStatement(String.format( + "UPDATE CONTACT SET FIRST_NAME=?, LAST_NAME=?, EMAIL_ADDRESS=?, PHONE_NUMBER=?, MAIL_ADDRESS=? WHERE ID=?;")); + stmt.setString(1, ct.getFirst_name()); + stmt.setString(2, ct.getLast_name()); + stmt.setString(3, ct.getEmail().getEmail_address()); + stmt.setString(4, ct.getPhoneNo().getphone_number()); + stmt.setString(5, ct.getMailing_address().getMailingAddress()); + stmt.setInt(6, ct.getId()); + stmt.execute(); + stmt.close(); + } else { + stmt.close(); + stmt = getPreparedStatement(String.format( + "INSERT INTO CONTACT(ID, FIRST_NAME, LAST_NAME, EMAIL_ADDRESS, PHONE_NUMBER, MAIL_ADDRESS) " + + "VALUES(?,?,?,?,?,?);")); + stmt.setInt(1, ct.getId()); + stmt.setString(2, ct.getFirst_name()); + stmt.setString(3, ct.getLast_name()); + stmt.setString(4, ct.getEmail().getEmail_address()); + stmt.setString(5, ct.getPhoneNo().getphone_number()); + stmt.setString(6, ct.getMailing_address().getMailingAddress()); + stmt.execute(); + stmt.close(); + } + } catch (Exception ex) { + Logger.getLogger(DATASET.class.getName()).log(Level.SEVERE, null, ex); + } + } + + static void DELETE(Contact ct){ + try { + PreparedStatement stmt = getPreparedStatement(String.format( + "DELETE FROM CONTACT WHERE ID=?;")); + stmt.setInt(1, ct.getId()); + stmt.execute(); + stmt.close(); + } catch (Exception ex) { + Logger.getLogger(DATASET.class.getName()).log(Level.SEVERE, null, ex); + } + } +} diff --git a/src/main/java/edu/bookocontacts/model/EmailAddress.java b/src/main/java/edu/bookocontacts/model/EmailAddress.java index 95705ac..d022dc7 100644 --- a/src/main/java/edu/bookocontacts/model/EmailAddress.java +++ b/src/main/java/edu/bookocontacts/model/EmailAddress.java @@ -2,8 +2,15 @@ package edu.bookocontacts.model; public class EmailAddress{ String email_address; - + public EmailAddress(){ + this(""); + } + public EmailAddress(String email_address) { + if (email_address == null) { + email_address = ""; + return; + } this.email_address = email_address; } @@ -43,15 +50,14 @@ public class EmailAddress{ @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("{ \"EmailAddress\":{"); - sb.append("\"email\": \"" + email_address + "\""); - sb.append("}}"); + + sb.append("{\"email\": \"" + email_address + "\""); + sb.append("}"); return sb.toString(); } public boolean isBlank() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'isBlank'"); + return this.email_address == null || this.email_address.isBlank(); } } diff --git a/src/main/java/edu/bookocontacts/model/EnumStatus.java b/src/main/java/edu/bookocontacts/model/EnumStatus.java new file mode 100644 index 0000000..cf0f340 --- /dev/null +++ b/src/main/java/edu/bookocontacts/model/EnumStatus.java @@ -0,0 +1,5 @@ +package edu.bookocontacts.model; + +public enum EnumStatus { + STORED,NEW,DELETED; +} diff --git a/src/main/java/edu/bookocontacts/model/Factory.java b/src/main/java/edu/bookocontacts/model/Factory.java index 2d35951..f76550e 100755 --- a/src/main/java/edu/bookocontacts/model/Factory.java +++ b/src/main/java/edu/bookocontacts/model/Factory.java @@ -4,62 +4,32 @@ */ package edu.bookocontacts.model; -import java.util.ArrayList; +import java.io.IOException; import java.util.List; /** * */ -public class Factory { - static int id=0; - - public static List getAll(Person clazz){ - return getAllPersons(); +public interface Factory { + public static List getAll(Contact clazz) { + return DATASET.FINDDATA(); } - public static List getAll(Contact clazz){ - return getAllContacts(); - } - - public static List getAllPersons() { - ArrayList list = new ArrayList<>(); - list.add(createPerson("John", 40)); - list.add(createPerson("Daisy", 21)); - list.add(createPerson("Martha", 34)); - list.add(createPerson("Frodo", 16)); - list.add(createPerson("Mickey", 22)); - list.add(createPerson("Minnie", 19)); - list.add(createPerson("Donald", 30)); - list.add(createPerson("Goofy", 32)); - list.add(createPerson("Pokoyo", 12)); - list.add(createPerson("Dora", 16)); - list.add(createPerson("Tintin", 25)); - list.add(createPerson("John", 52)); - list.add(createPerson("Daisy", 29)); - list.add(createPerson("Martha Has a very Long Name", 18)); - return list; - } - - static Person createPerson(String _name, int _age) { - return new Person(Integer.toString(id++),_name, _age); - } - - public static List getAllContacts() { - ArrayList list = new ArrayList<>(); - list.add(createContact(1, "Jose", "Cezone", "cezon50@yahoo.com", "410-456-9876")); - list.add(createContact(2,"Jack", "Bolt", "jbolt100@hotmail.com", "443-266-9776")); - list.add(createContact(3,"David", "Rossi", null, "210-356-9876")); - list.add(createContact(4, "Sheila", "Philster", null, "410-356-5876")); - list.add(createContact(5, "Adam", "Zhaine", null, "410-456-1876")); - list.add(createContact(6, "Amanda", "Kelstone", null, "410-456-2876")); - - return list; - } - - static Contact createContact(Integer id, String first_name, String last_name, String email, String phone_number) { - Contact c = new Contact(first_name, last_name, new EmailAddress(email), new PhoneNumber(phone_number), (Address)null); + 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()); c.setId(id); + return c; } + public static Contact save(final Contact ct) throws IOException { + if(ct.status==EnumStatus.DELETED){ + DATASET.DELETE(ct); + }else{ + DATASET.UPDATESERT(ct); + } + return ct; + } + } diff --git a/src/main/java/edu/bookocontacts/model/Address.java b/src/main/java/edu/bookocontacts/model/MailAddress.java similarity index 67% rename from src/main/java/edu/bookocontacts/model/Address.java rename to src/main/java/edu/bookocontacts/model/MailAddress.java index 8d7e86c..a23da52 100644 --- a/src/main/java/edu/bookocontacts/model/Address.java +++ b/src/main/java/edu/bookocontacts/model/MailAddress.java @@ -1,16 +1,17 @@ package edu.bookocontacts.model; -public final class Address{ +public final class MailAddress{ String street; String city; String state; String zip; - public Address() { + public MailAddress() { + this("", "", "", ""); } - public Address(String street, String city, String state, String zip) { + public MailAddress(String street, String city, String state, String zip) { this.street = street; this.city = city; this.state = state; @@ -49,14 +50,22 @@ public final class Address{ this.zip = 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() + ","; + } + @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((street == null) ? 0 : street.hashCode()); - result = prime * result + ((city == null) ? 0 : city.hashCode()); - result = prime * result + ((state == null) ? 0 : state.hashCode()); - result = prime * result + ((zip == null) ? 0 : zip.hashCode()); + result = prime * result + ((street.isBlank()) ? 0 : street.hashCode()); + result = prime * result + ((city.isBlank()) ? 0 : city.hashCode()); + result = prime * result + ((state.isBlank()) ? 0 : state.hashCode()); + result = prime * result + ((zip.isBlank()) ? 0 : zip.hashCode()); return result; } @@ -68,7 +77,7 @@ public final class Address{ return false; if (getClass() != obj.getClass()) return false; - Address other = (Address) obj; + MailAddress other = (MailAddress) obj; if (street == null) { if (other.street != null) return false; @@ -95,7 +104,7 @@ public final class Address{ @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("{ \"Address\":{"); + sb.append("{ \"MailAddress\":{"); sb.append("\"street\": \"" + street + "\","); sb.append("\"city\": \"" + city + "\","); sb.append("\"state\": \"" + state + "\","); @@ -103,4 +112,15 @@ public final class Address{ 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; + } } \ No newline at end of file diff --git a/src/main/java/edu/bookocontacts/model/Person.java b/src/main/java/edu/bookocontacts/model/Person.java deleted file mode 100755 index 930c91c..0000000 --- a/src/main/java/edu/bookocontacts/model/Person.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package edu.bookocontacts.model; - -/** - * - */ -public class Person { - String Id; String Name; int Age; - - public Person(final String Id, final String Name, final int Age) { - this.Id=Id; - this.Name = Name; - this.Age = Age; - } - - public Person() { - this("", "", 0); - } - - public String getId() { - return Id; - } - - public void setId(final String id) { - Id = id; - } - - public String getName() { - return Name; - } - - public void setName(final String name) { - Name = name; - } - - public int getAge() { - return Age; - } - - public void setAge(final int age) { - Age = age; - } - -} \ No newline at end of file diff --git a/src/main/resources/media/ControlAddressDDXDialog.fxml b/src/main/resources/media/ControlAddressDDXDialog.fxml index 97fec28..bc5f94f 100644 --- a/src/main/resources/media/ControlAddressDDXDialog.fxml +++ b/src/main/resources/media/ControlAddressDDXDialog.fxml @@ -29,30 +29,30 @@ diff --git a/src/main/resources/media/TableView.fxml b/src/main/resources/media/TableView.fxml index 7185c3a..7bce109 100755 --- a/src/main/resources/media/TableView.fxml +++ b/src/main/resources/media/TableView.fxml @@ -12,25 +12,25 @@ - + - - - + + + - + - + -