update project. deepcopy on contact.

This commit is contained in:
2026-02-22 01:23:41 -05:00
parent f2e335af2e
commit b200f1ca7d
22 changed files with 165 additions and 55 deletions
+18 -8
View File
@@ -1,18 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="src" output="bin/main" path="src/main/resources">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/main" path="src/main/java"> <classpathentry kind="src" output="bin/main" path="src/main/java">
<attributes> <attributes>
<attribute name="gradle_scope" value="main"/> <attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/> <attribute name="gradle_used_by_scope" value="main,test"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-25/"/> <classpathentry kind="src" output="bin/main" path="src/main/resources">
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> <attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-25/">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
<attributes>
<attribute name="org.eclipse.ajdt.inpath.restriction" value="aspectjrt-1.9.25.jar"/>
<attribute name="org.eclipse.ajdt.inpath" value="org.eclipse.ajdt.inpath"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/sherwinp/.gradle/caches/modules-2/files-2.1/org.aspectj/aspectjrt/1.9.25/7f46c0f089601cde5cfbfabf4feee16aeeaf2428/aspectjrt-1.9.25.jar"/>
<classpathentry kind="output" path="bin/default"/> <classpathentry kind="output" path="bin/default"/>
</classpath> </classpath>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-5
View File
@@ -5,11 +5,6 @@
<projects> <projects>
</projects> </projects>
<buildSpec> <buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand> <buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name> <name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments> <arguments>
+41
View File
@@ -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
+6 -6
View File
@@ -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 arguments=
auto.sync=true auto.sync=false
build.scans.enabled=false build.scans.enabled=false
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
connection.project.dir= connection.project.dir=
eclipse.preferences.version=1 eclipse.preferences.version=1
gradle.user.home= gradle.user.home=
java.home=/usr/lib/jvm/java-25-openjdk java.home=
jvm.arguments= jvm.arguments=
offline.mode=false offline.mode=false
override.workspace.settings=true override.workspace.settings=false
show.console.view=true show.console.view=false
show.executions.view=true show.executions.view=false
@@ -1,2 +1,3 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
encoding/<project>=UTF-8 encoding/<project>=UTF-8
encoding/build.gradle=UTF-8
+7 -1
View File
@@ -1,6 +1,12 @@
eclipse.preferences.version=1 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.targetPlatform=25
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=25 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.enablePreviewFeatures=enabled
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=25 org.eclipse.jdt.core.compiler.source=25
+5 -5
View File
@@ -1,10 +1,10 @@
Manifest-Version: 1.0 Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: bookocontacts Bundle-Name: edu.bookocontacts
Bundle-SymbolicName: bookocontacts Bundle-SymbolicName: edu.bookocontacts
Bundle-Version: 1.0.0.qualifier Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-26 Bundle-RequiredExecutionEnvironment: JavaSE-25
Automatic-Module-Name: bookocontacts Automatic-Module-Name: edu.bookocontacts
Export-Package: edu.bookocontacts, Export-Package: edu.bookocontacts
edu.bookocontacts.model, edu.bookocontacts.model,
media media
+1
View File
@@ -0,0 +1 @@
6,"Jay","Sanders","410-784-8763","","DELETED","Pleasant Place","Largo","MD","20783"
BIN
View File
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
0,"Adam","Whare","310-789-5443","","INSTORE","","","",""
@@ -1,20 +1,40 @@
package edu.bookocontacts; package edu.bookocontacts;
import java.io.File;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import edu.bookocontacts.model.DataRepositoryConfig;
import edu.bookocontacts.model.DATASET;
import edu.bookocontacts.model.Factory;
import edu.bookocontacts.model.Contact; import edu.bookocontacts.model.Contact;
public aspect StorageMonitor { public aspect StorageMonitor {
pointcut save(): execution(public * edu.bookocontacts.model.Factory.*(..)); pointcut DELETE(): execution(public * edu.bookocontacts.model.DATASET.*(..));
Contact around(Contact ct): execution(public * edu.bookocontacts.model.Factory.save(Contact)) && args(ct) && if(ct!=null) { before(Contact ct): execution(public * edu.bookocontacts.model.DATASET.DELETE(Contact)) && args(ct) && if(ct!=null) {
Contact ob = proceed(ct);
Logger logger = LoggerFactory.getLogger(Contact.class); Logger logger = LoggerFactory.getLogger(StorageMonitor.class);
logger.info(String.format("AspectJ-Check: %s. ", ob)); logger.info(String.format("AspectJ-Check: %s. ", ct));
File file = new File(String.format("%sdeleted.log", DataRepositoryConfig.getPath()));
Factory.write2CSV(file, ct);
return ob;
} }
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);
}
} }
@@ -101,7 +101,7 @@ public class ViewController implements Initializable {
@Override @Override
public void handle(javafx.event.ActionEvent t) { public void handle(javafx.event.ActionEvent t) {
ControlDDXDialog dialog = new ControlDDXDialog(contactView.getSelectionModel().getSelectedItem()); ControlDDXDialog dialog = new ControlDDXDialog(null);
Optional<Contact> result = dialog.showAndWait(); Optional<Contact> result = dialog.showAndWait();
@@ -154,8 +154,8 @@ public class ViewController implements Initializable {
updatedContact.setId(ct.getId()); updatedContact.setId(ct.getId());
updatedContact.setStatus(EnumStatus.UPDATED); updatedContact.setStatus(EnumStatus.UPDATED);
updatedContact.save(); updatedContact.save();
ct.copy(updatedContact); //ct would be the contact in the observed list in our view.
Contact.copy(ct, updatedContact);
} catch (Exception ex) { } catch (Exception ex) {
logger.log(Level.WARNING, ex.getMessage()); logger.log(Level.WARNING, ex.getMessage());
} }
@@ -75,14 +75,15 @@ public class Contact {
} }
} }
public void copy(Contact ct){ public final static void copy(Contact me, Contact other) {
this.id = ct.id; // copy other to me.
this.first_name = ct.first_name; me.id = other.id;
this.last_name = ct.last_name; me.first_name = other.first_name;
this.phone_number = ct.phone_number; me.last_name = other.last_name;
this.email_address = ct.email_address; me.phone_number = other.phone_number;
this.mailing_address = ct.mailing_address; me.email_address = other.email_address;
this.status = ct.status; me.mailing_address = other.mailing_address;
me.status = other.status;
} }
@Override @Override
@@ -97,6 +98,21 @@ public class Contact {
return sb.toString(); 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 { public void save() throws IOException {
Factory.save(this); Factory.save(this);
this.status = EnumStatus.INSTORE; this.status = EnumStatus.INSTORE;
@@ -114,7 +130,7 @@ public class Contact {
this.id = id; this.id = id;
} }
public void setStatus(EnumStatus es){ public void setStatus(EnumStatus es) {
this.status = es; this.status = es;
} }
@@ -57,14 +57,6 @@ public final class DATASET {
return list; 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) { public static void UPDATESERT(Contact ct) {
try { try {
PreparedStatement stmt = getPreparedStatement(String.format( 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 { try {
PreparedStatement stmt = getPreparedStatement(String.format( PreparedStatement stmt = getPreparedStatement(String.format(
"DELETE FROM CONTACT WHERE ID=?;")); "DELETE FROM CONTACT WHERE ID=?;"));
@@ -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/";
}
}
@@ -4,8 +4,12 @@
*/ */
package edu.bookocontacts.model; package edu.bookocontacts.model;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.List; 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 { public static Contact save(final Contact ct) throws IOException {
if(ct.status==EnumStatus.DELETED){ if (ct.status == EnumStatus.DELETED) {
DATASET.DELETE(ct); DATASET.DELETE(ct);
}else{ } else {
DATASET.UPDATESERT(ct); DATASET.UPDATESERT(ct);
} }
return 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());
}
}
} }