From b200f1ca7d75572d4a358fd0d78d679d43329f5a Mon Sep 17 00:00:00 2001 From: Sherwin Price Date: Sun, 22 Feb 2026 01:23:41 -0500 Subject: [PATCH] update project. deepcopy on contact. --- .classpath | 26 +++++++---- .../executionHistory/executionHistory.bin | Bin 126274 -> 126274 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/9.3.1/fileHashes/fileHashes.bin | Bin 28597 -> 28697 bytes .gradle/9.3.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .project | 5 --- .settings/org.eclipse.ajdt.core.prefs | 41 ++++++++++++++++++ .settings/org.eclipse.buildship.core.prefs | 12 ++--- .settings/org.eclipse.core.resources.prefs | 1 + .settings/org.eclipse.jdt.core.prefs | 8 +++- META-INF/MANIFEST.MF | 10 ++--- db/deleted.log | 1 + db/sample.db | Bin 12288 -> 12288 bytes db/updated.log | 1 + .../java/edu/bookocontacts/StorageMonitor.aj | 34 ++++++++++++--- .../edu/bookocontacts/ViewController.java | 6 +-- .../java/edu/bookocontacts/model/Contact.java | 34 +++++++++++---- .../java/edu/bookocontacts/model/DATASET.java | 10 +---- .../model/DataRepositoryConfig.java | 9 ++++ .../java/edu/bookocontacts/model/Factory.java | 22 +++++++++- 22 files changed, 165 insertions(+), 55 deletions(-) create mode 100644 .settings/org.eclipse.ajdt.core.prefs create mode 100644 db/deleted.log create mode 100644 db/updated.log create mode 100644 src/main/java/edu/bookocontacts/model/DataRepositoryConfig.java diff --git a/.classpath b/.classpath index ba36a3e..eaef1cb 100644 --- a/.classpath +++ b/.classpath @@ -1,18 +1,28 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/.gradle/9.3.1/executionHistory/executionHistory.bin b/.gradle/9.3.1/executionHistory/executionHistory.bin index 7dec671f129eac18f4a40301f8dc7ba1a5f5a7af..f2d218ad569c36e230407ac2eea15ea665bd6256 100755 GIT binary patch delta 1331 zcmX?fi~Z0o_6;Vxb+Rk7lS-3wib_p0lFf4~%(4>mbF;FHiqcC3BCghMnmeU5_?e>i z&-;d^TNyVe?6zm)XuQ<)__*-_@#*zKj4~`B-t_rGjEbxv*73;>y9^;>zl0c}EPY`{ zvB|lI1i<2x8xP5W8Jia$+8||Hlx$*Vl2~e1UX@%@kXTY)l9!Q{Z&IFTVj^(bBgfI{ zgUri_>6@%?sb8Nffg!RvG1;AE^Yw@KnS^qzT9=hat*g4boUh2{RMaoVWs?n`N=$z6 zq*v(54xL5LOI`)O*T{Sr^`&S6N(C z6Tj~cH?5d2ldC@mVhB#Eke~efv$sTc>A7E#)9xND`p(wTx>$MJ)R!+G9XGx; zZ*$z2`tuGCW@i)?6r`u*WELeQ7o_ADR#jD2CMKt(=9py)WX{-f(U!+tSm4DAzD%i{ z=+EpJLX$tX*lmwK!Z=%uiRb3@hYJ`zwmaNrv||*o^l`Xj{j)AYc=PRy?4#;8RhFti-ZJW`Wt>-~X7@N4xFjU--RJq*jD+(`3V^l9Pj;icH^dhcQv$ z>erm7D-JG7EPO6&KS_G&qV0-z8Fw-YOw2C3m%DJchxgCrHPd^Q7Jy8bnjG+geR|$P z#jLRk~zEhmu`-0J0;O?7*b%KokzTZs}@7=t?Cq4bf3&yF_JsvR%us+_{zTm|4 z*hh@Itc{yM%>GA=(o#_z?KX2t?wyVau4_-5p1$E6NR{!)1jgCZKfYv?aTI)(eo8Ga zJMa9#L%-ct@m5>_%g^Lu>~nDpaSV11(M!%rEG}jcm}bthCH7mBo3u+snG@5-qZ`2r zUs_N1d&Q{6+6&@M4|&X}Za53XH2%fG*yom*T#{c@2{Ykv`?2^BHP>I64M_(W>jU}3*t@Ze!{3BJpsfte#pbjATTN1;Xc2XxzE2y-OGuQPHofuo-j&C zFsWBzoW2aMCUAAinR%?bci_+l6U delta 1325 zcmX?fi~Z0o_6;Vxb+WQ5OmobNlFRbaDovA(Q%%b=%1g>Cic?JlBCghMnmeU5_?e>i z&-;d^TUj?J?6zm)IQ(hiqvOU0#HZH_G0LzU`ZV#;^!Y-JimYJq$qu^=SwO7mzl0c} zEPY`{vB|lI1i<2x8xP5W8Jia$+8{NV@vF2_DR)eh-@OSQoKM?lO=4LktSEpkvN5k7CrKUf)$H={T)$`-b0{pKRm&{MGj`BKlQ}JN=>r0axU(XPj>T>7Qp0iu8 zUp$edbIj9|adP8p<;e~k*(b9<51U^1f{}0Xyu%zq%mShpjGlNbUB4)v!{ATh?nm<` zUwkt|V7~Ja_b-uUH7&E#?#cyo{swDKc*{O{@!K4M>KzYtxjNr0%C&pD{SN2Ushj2B zHLwWIa{tYesN509gKQ##4ky=%(CU5b-`hK2=qkwwE z@A^qqx*wHrUT>FH+sVJG?mVrx<2*capQAyH^+UcKkra58&8Tj z{A{vvldNmQZxhQ`Go?0m-)9p*7n=OB#cq4_5yshKOx!o8KU~1*vEAV|qaCAw!b-tw z|9_v|f9kV2!|AtG9n(L~V{8_%`FUivYW?F5j*I#RmBu~sAW^C58}2glOkXvhF=>0) zJw`)D0SWP~v)L!-wywKzL2UcS^6y|(lLKC`Pj9%-$hv*+ea1~2p-dw)& zW~)_MTE+DEhm6fa!m(E)5*j}wU+AmcsMpmI$+&E?;ycCZy)PK81uCVSFD~9&D_j3M zLdnG>&~19cBgUmHcRo&hG`;a9qug}$$BY6TA3lPT`#gi`2}>9yByy};mz77YtGc_K zugK<9)UVTE*-hcoCoEx96S=ZOXOZ)gSAp*}G9N~LDVneuWR&77Mp20kUeneoCO5ui zU-wSAAgQGkBy-&Oiq7LuqS78f%J2uJs%Zt<90F0}Q{KbtKbiV%ep zC8q~IVN_+^4bnEf`U#_k^mGu@_#qE7gMf2Oku-m!*W6;2kd7M%oxV-q_k>YGVyUv( z#fAXoi_?}UOZ|B@r=kO_VYB-5cTX6#SSNw<|8&`>jIvT%wgn${ef+jf-M9N{+SL>Z zu$1v1QO4<$Cma?NXApRDQ`DBVE05FF;^4H^5e(BNgY`B(Wt0_XlsT?pyVzI#-%iV* zwE`^`U@7C)>Fbs;N(Of9e#^Zl(Uob_?OA4;$0CIw2CsBtW)NtJ&18|{PAD&*{&)V- zN1~IM83e@S_aDE-R`z5@t*`BzPb*rO83bPNoi;wEwd>8rMBa3nyt{sr;xwmwJY%e6 ztew7a9;4Cpe+wA}gqQ^?SBLV?;xp@1G)+8exa2u6B=7%Q$XGai=L5!R+mAnItY!rO Dl-_P$ diff --git a/.gradle/9.3.1/executionHistory/executionHistory.lock b/.gradle/9.3.1/executionHistory/executionHistory.lock index 867e3b93de51d4d038a0110d4a9e83f77f30c00d..364c675e8eb32e599b705c0a2b5569ed6913f7f1 100755 GIT binary patch literal 17 VcmZSXH>umx74fHr0Sp+I0{}J61p@#8 literal 17 UcmZSXH>umx74fHr0Sp)m0X3Hd%>V!Z diff --git a/.gradle/9.3.1/fileHashes/fileHashes.bin b/.gradle/9.3.1/fileHashes/fileHashes.bin index ef1ca86436bf4bc9a68ccc9a23c6bab443e0e998..2044f6eb5fc4887c5ab65c2344428d782c35d89c 100755 GIT binary patch delta 998 zcmdmbpK;~`#tkMCjAu5RN<{DpIM{xF@x9h8fB_8hw@z+VQxI_ew_yEelRLIxF^2r- zo9C)cW??kksQ5#CqrnT7&5j<$BFqUZ87CKp>x1doAU&2EkU&3-p%?=dsgH#y*%&Jo zbXRx3FV9mBW+r~$9d24NUlU{C~Mf$Y+AzappI zJy`Uet)q3Z@;0cBsSq9Kqc+RN6)-AT`Z(ON{#h3xy!m!U_EGg;AXUvLPalS;Qe>OF zHoiU`3~W4?q-2-QVn-kj11hF}v(u?!w(3-anVuOz%}% z09N(bVmCw;%a_e(lU_1{{k${fk;2ulIZsy{T$EV&T-JV)^wLFO)sN&$A*u!MPu`un zBIvK|!`mx2=!sbK@X45~%o74BYGFKD08zxshUx3P34d*P1A7kh=q&GU(VMLT(Q%^= zqC@h)*TdMDpc(*rRkOcqR+3Od|=EdE2y^%pm#=gj@w)7=c!HXWjk#|_h> zD2{fUIVJZ_#{}24r%g}a0M&60qQk&*a&0=;qP>%sr-Ln;HTh<`bYQ$-yo=z&lwFel zs^_-fsRrq4zB`W}qKow&rajZlS+>M}YjTrzsVH+|+ISSCqlNLtMu-mCmy=IsgY9`d zIX?qr&rQb33p4aGS{QHYLX>dq!Zg%P>B&nY*)(q*`KXp3Prhx07z)#&Scs{kWUbJw zSd(utF;?dk*_x*9h3S}Fn{i${k9gK09Is~7kpHhp<&O3kb&~LX@ycHlFEsQrVKyLqu&=vzIbJz*hza20dd21_n(A1_nhC z7Erv={lOvAfpO~_J>hwpN@o}t80XZeW}kv+ICpNdY+M1Og2GC{YyW?r-GAz{Im79< zRUKeejz3;PRLPc1UK?MgARK!&BBAj^@`b+2je1=jkzhqmGXx=ur1orfPRL@K{4h&| zr$(23GDMVFX!F^mmyBR9?M!*3VDt0HY}NY59UK?+4JwU$;=yL_*OO?$oHUubNoVG++>d&h=5FIWR9S|MD zn@q%i5L4>1uIs+Uf{~X;2-)lWX&& zB(!V`KJ5DVZJWAp_tmtkDH2dgp~>EPQWA_Z$2Dvh`>OxjX&JOupv3|zDLi?7p48;~ WNurxiW!_=scd3{QaW2yxkaGbt2=M~| diff --git a/.gradle/9.3.1/fileHashes/fileHashes.lock b/.gradle/9.3.1/fileHashes/fileHashes.lock index dd9c645db1d96e60435d2d89733694f33319474f..d02a896fcbdf0b6c7f9f58f5a9ecdc7e78e6985d 100755 GIT binary patch literal 17 VcmZS1 - - org.eclipse.jdt.core.javabuilder - - - org.eclipse.buildship.core.gradleprojectbuilder diff --git a/.settings/org.eclipse.ajdt.core.prefs b/.settings/org.eclipse.ajdt.core.prefs new file mode 100644 index 0000000..779f1c1 --- /dev/null +++ b/.settings/org.eclipse.ajdt.core.prefs @@ -0,0 +1,41 @@ +eclipse.preferences.version=1 +org.aspectj.ajdt.core.compiler.BuildOptions.showweavemessages=false +org.aspectj.ajdt.core.compiler.lint.BrokeSerialVersionCompatibility=ignore +org.aspectj.ajdt.core.compiler.lint.CannotImplementLazyTJP=ignore +org.aspectj.ajdt.core.compiler.lint.InvalidAbsoluteTypeName=warning +org.aspectj.ajdt.core.compiler.lint.NeedSerialVersionUIDField=ignore +org.aspectj.ajdt.core.compiler.lint.NoInterfaceCtorJoinpoint=warning +org.aspectj.ajdt.core.compiler.lint.ShadowNotInStructure=ignore +org.aspectj.ajdt.core.compiler.lint.TypeNotExposedToWeaver=warning +org.aspectj.ajdt.core.compiler.lint.UnresolvableMember=warning +org.aspectj.ajdt.core.compiler.lint.WildcardTypeName=ignore +org.aspectj.ajdt.core.compiler.lint.adviceDidNotMatch=warning +org.aspectj.ajdt.core.compiler.lint.annotationAsTargetForDecpIgnored=warning +org.aspectj.ajdt.core.compiler.lint.calculatingSerialVersionUID=ignore +org.aspectj.ajdt.core.compiler.lint.cantFindType=error +org.aspectj.ajdt.core.compiler.lint.cantFindTypeAffectingJPMatch=warning +org.aspectj.ajdt.core.compiler.lint.cantMatchArrayTypeOnVarargs=ignore +org.aspectj.ajdt.core.compiler.lint.elementAlreadyAnnotated=warning +org.aspectj.ajdt.core.compiler.lint.enumAsTargetForDecpIgnored=warning +org.aspectj.ajdt.core.compiler.lint.invalidTargetForAnnotation=warning +org.aspectj.ajdt.core.compiler.lint.multipleAdviceStoppingLazyTjp=ignore +org.aspectj.ajdt.core.compiler.lint.noExplicitConstructorCall=warning +org.aspectj.ajdt.core.compiler.lint.noGuardForLazyTjp=ignore +org.aspectj.ajdt.core.compiler.lint.noJoinpointsForBridgeMethods=warning +org.aspectj.ajdt.core.compiler.lint.runtimeExceptionNotSoftened=warning +org.aspectj.ajdt.core.compiler.lint.swallowedExceptionInCatchBlock=ignore +org.aspectj.ajdt.core.compiler.lint.uncheckedAdviceConversion=warning +org.aspectj.ajdt.core.compiler.lint.uncheckedArgument=warning +org.aspectj.ajdt.core.compiler.lint.unmatchedTargetKind=warning +org.aspectj.ajdt.core.compiler.lint.unorderedAdviceAtShadow=ignore +org.aspectj.ajdt.core.compiler.list.UnmatchedSuperTypeInCall=warning +org.aspectj.ajdt.core.compiler.weaver.XHasMember=false +org.aspectj.ajdt.core.compiler.weaver.XNoInline=false +org.aspectj.ajdt.core.compiler.weaver.XNotReweavable=false +org.aspectj.ajdt.core.compiler.weaver.XSerializableAspects=false +org.aspectj.ajdt.core.compiler.weaver.timers=false +org.aspectj.ajdt.core.compiler.weaver.verbose=false +org.aspectj.ajdt.core.complier.lint.aspectExcludedByConfiguration=ignore +org.eclipse.ajdt.core.builder.incrementalCompilationOptimizations=true +org.eclipse.ajdt.core.compiler.nonStandardOptions= +org.eclipse.ajdt.core.compiler.useProjectSettings=true diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index 8e50e0f..e479558 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ -arguments=--init-script /home/sherwinp/.config/VSCodium/User/globalStorage/redhat.java/1.50.0/config_linux/org.eclipse.osgi/58/0/.cp/gradle/init/init.gradle --init-script /home/sherwinp/.config/VSCodium/User/globalStorage/redhat.java/1.50.0/config_linux/org.eclipse.osgi/58/0/.cp/gradle/protobuf/init.gradle -auto.sync=true +arguments= +auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 gradle.user.home= -java.home=/usr/lib/jvm/java-25-openjdk +java.home= jvm.arguments= offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 99f26c0..a296f7d 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 encoding/=UTF-8 +encoding/build.gradle=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index f3fe8c3..be90df2 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,6 +1,12 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=ignore +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=25 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=25 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=enabled +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=25 diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF index f6ccdb8..5667d92 100644 --- a/META-INF/MANIFEST.MF +++ b/META-INF/MANIFEST.MF @@ -1,10 +1,10 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 -Bundle-Name: bookocontacts -Bundle-SymbolicName: bookocontacts +Bundle-Name: edu.bookocontacts +Bundle-SymbolicName: edu.bookocontacts Bundle-Version: 1.0.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-26 -Automatic-Module-Name: bookocontacts -Export-Package: edu.bookocontacts, +Bundle-RequiredExecutionEnvironment: JavaSE-25 +Automatic-Module-Name: edu.bookocontacts +Export-Package: edu.bookocontacts edu.bookocontacts.model, media diff --git a/db/deleted.log b/db/deleted.log new file mode 100644 index 0000000..19fee81 --- /dev/null +++ b/db/deleted.log @@ -0,0 +1 @@ +6,"Jay","Sanders","410-784-8763","","DELETED","Pleasant Place","Largo","MD","20783" diff --git a/db/sample.db b/db/sample.db index f2945d215ba4215c7fc4675cc8bcc14bed442ced..c0a9660422adbeebe1902786c1db4f02ec20783d 100644 GIT binary patch delta 237 zcmZojXh@hK&1gDN#+lJ{W5PmySq26MM*jN@{P+2tV32n&{~rE5JXyR#8w-7SHfPDO zGjj2TG0YPeSJm_snp?B{4TVBe5ve*w8@N+`>}V)WpPCK|z5FZ1Eok{y+S``M>gC2g5xei}?@n zAKI*_FqMDuW_=-RQ3)=j{HAnye delta 212 zcmZojXh@hK&8R(5#+gxjW5PmyS-w>aoV;>OeEhs}eBb!C@`dp`@$Tg<dC|!eWRI}~v9mKyj*<&z&dP1QOu<|Ig@*254^?_uG8&;OhMEB|BuyZqPrPw-#l-@|{1|IlVdg{l0L zH|q;ovq^BVGBYxY@-i?mfEZ#tAd-(AMDntMNFG*@6ax#0&Bh5LIhk0P896xsfu${Y diff --git a/db/updated.log b/db/updated.log new file mode 100644 index 0000000..88e742d --- /dev/null +++ b/db/updated.log @@ -0,0 +1 @@ +0,"Adam","Whare","310-789-5443","","INSTORE","","","","" diff --git a/src/main/java/edu/bookocontacts/StorageMonitor.aj b/src/main/java/edu/bookocontacts/StorageMonitor.aj index ffa1f0a..e3b6159 100644 --- a/src/main/java/edu/bookocontacts/StorageMonitor.aj +++ b/src/main/java/edu/bookocontacts/StorageMonitor.aj @@ -1,20 +1,40 @@ package edu.bookocontacts; +import java.io.File; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import edu.bookocontacts.model.DataRepositoryConfig; +import edu.bookocontacts.model.DATASET; +import edu.bookocontacts.model.Factory; import edu.bookocontacts.model.Contact; + public aspect StorageMonitor { - pointcut save(): execution(public * edu.bookocontacts.model.Factory.*(..)); - Contact around(Contact ct): execution(public * edu.bookocontacts.model.Factory.save(Contact)) && args(ct) && if(ct!=null) { - Contact ob = proceed(ct); + pointcut DELETE(): execution(public * edu.bookocontacts.model.DATASET.*(..)); + before(Contact ct): execution(public * edu.bookocontacts.model.DATASET.DELETE(Contact)) && args(ct) && if(ct!=null) { + + Logger logger = LoggerFactory.getLogger(StorageMonitor.class); - Logger logger = LoggerFactory.getLogger(Contact.class); + logger.info(String.format("AspectJ-Check: %s. ", ct)); - logger.info(String.format("AspectJ-Check: %s. ", ob)); - - return ob; + File file = new File(String.format("%sdeleted.log", DataRepositoryConfig.getPath())); + Factory.write2CSV(file, ct); + } + + pointcut copy(): execution(public * edu.bookocontacts.model.Contact.*(..)); + before(Contact me, Contact other): execution(public * edu.bookocontacts.model.Contact.copy(Contact, Contact)) && args(me, other) && if(me!=null) { + + Logger logger = LoggerFactory.getLogger(StorageMonitor.class); + + logger.info(String.format("AspectJ-Check: %s. ", me)); + + File file = new File(String.format("%supdated.log", DataRepositoryConfig.getPath())); + Factory.write2CSV(file, me); + + } + } diff --git a/src/main/java/edu/bookocontacts/ViewController.java b/src/main/java/edu/bookocontacts/ViewController.java index 7c82360..036059c 100755 --- a/src/main/java/edu/bookocontacts/ViewController.java +++ b/src/main/java/edu/bookocontacts/ViewController.java @@ -101,7 +101,7 @@ public class ViewController implements Initializable { @Override public void handle(javafx.event.ActionEvent t) { - ControlDDXDialog dialog = new ControlDDXDialog(contactView.getSelectionModel().getSelectedItem()); + ControlDDXDialog dialog = new ControlDDXDialog(null); Optional result = dialog.showAndWait(); @@ -154,8 +154,8 @@ public class ViewController implements Initializable { updatedContact.setId(ct.getId()); updatedContact.setStatus(EnumStatus.UPDATED); updatedContact.save(); - ct.copy(updatedContact); - + //ct would be the contact in the observed list in our view. + Contact.copy(ct, updatedContact); } catch (Exception ex) { logger.log(Level.WARNING, ex.getMessage()); } diff --git a/src/main/java/edu/bookocontacts/model/Contact.java b/src/main/java/edu/bookocontacts/model/Contact.java index eacd8a3..b2c572d 100644 --- a/src/main/java/edu/bookocontacts/model/Contact.java +++ b/src/main/java/edu/bookocontacts/model/Contact.java @@ -75,14 +75,15 @@ public class Contact { } } - public void copy(Contact ct){ - this.id = ct.id; - this.first_name = ct.first_name; - this.last_name = ct.last_name; - this.phone_number = ct.phone_number; - this.email_address = ct.email_address; - this.mailing_address = ct.mailing_address; - this.status = ct.status; + public final static void copy(Contact me, Contact other) { + // copy other to me. + me.id = other.id; + me.first_name = other.first_name; + me.last_name = other.last_name; + me.phone_number = other.phone_number; + me.email_address = other.email_address; + me.mailing_address = other.mailing_address; + me.status = other.status; } @Override @@ -97,6 +98,21 @@ public class Contact { return sb.toString(); } + public String toCSVString() { + StringBuilder sb = new StringBuilder(); + sb.append(id).append(","); + sb.append("\"").append(first_name).append("\","); + sb.append("\"").append(last_name).append("\","); + sb.append("\"").append(phone_number).append("\","); + sb.append("\"").append(email_address.getEmail_address()).append("\","); + sb.append("\"").append(status).append("\","); + sb.append("\"").append(mailing_address.street).append("\","); + sb.append("\"").append(mailing_address.city).append("\","); + sb.append("\"").append(mailing_address.state).append("\","); + sb.append("\"").append(mailing_address.zip).append("\""); + return sb.toString(); + } + public void save() throws IOException { Factory.save(this); this.status = EnumStatus.INSTORE; @@ -114,7 +130,7 @@ public class Contact { this.id = id; } - public void setStatus(EnumStatus es){ + public void setStatus(EnumStatus es) { this.status = es; } diff --git a/src/main/java/edu/bookocontacts/model/DATASET.java b/src/main/java/edu/bookocontacts/model/DATASET.java index 51fbccb..5afcd89 100644 --- a/src/main/java/edu/bookocontacts/model/DATASET.java +++ b/src/main/java/edu/bookocontacts/model/DATASET.java @@ -57,14 +57,6 @@ public final class DATASET { 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( @@ -104,7 +96,7 @@ public final class DATASET { } } - static void DELETE(Contact ct) { + public static void DELETE(Contact ct) { try { PreparedStatement stmt = getPreparedStatement(String.format( "DELETE FROM CONTACT WHERE ID=?;")); diff --git a/src/main/java/edu/bookocontacts/model/DataRepositoryConfig.java b/src/main/java/edu/bookocontacts/model/DataRepositoryConfig.java new file mode 100644 index 0000000..5061ecb --- /dev/null +++ b/src/main/java/edu/bookocontacts/model/DataRepositoryConfig.java @@ -0,0 +1,9 @@ +package edu.bookocontacts.model; + +public final 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/model/Factory.java b/src/main/java/edu/bookocontacts/model/Factory.java index 89e359b..e20ab64 100755 --- a/src/main/java/edu/bookocontacts/model/Factory.java +++ b/src/main/java/edu/bookocontacts/model/Factory.java @@ -4,8 +4,12 @@ */ package edu.bookocontacts.model; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -24,12 +28,26 @@ public final class Factory { } public static Contact save(final Contact ct) throws IOException { - if(ct.status==EnumStatus.DELETED){ + if (ct.status == EnumStatus.DELETED) { DATASET.DELETE(ct); - }else{ + } else { DATASET.UPDATESERT(ct); } return ct; } + public final static void write2CSV(File outfile, final Contact ct) { + String NEW_LINE = "\n"; + + try (FileWriter fileWriter = new FileWriter(outfile)) { + + fileWriter.append(ct.toCSVString()); + fileWriter.append(NEW_LINE); + + } catch (IOException e) { + Logger.getLogger(Factory.class.getName()).log(Level.INFO, e.getMessage()); + } + + } + }