diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..1a99fc8
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..5edc1ee
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+
+
+ coding-competition
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000..d4313d4
--- /dev/null
+++ b/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b33f257
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,16 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+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.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/feedback.txt b/feedback.txt
index b931d50..4b6e18b 100644
--- a/feedback.txt
+++ b/feedback.txt
@@ -1,5 +1,5 @@
-Your team (name of each individual participating):
-How many JUnits were you able to get to pass?
+Your team (name of each individual participating): Huong Nguyen
+How many JUnits were you able to get to pass? 2
Document and describe any enhancements included to help the judges properly grade your submission.
Step 1:
@@ -7,3 +7,4 @@ Document and describe any enhancements included to help the judges properly grad
Feedback for the coding competition? Things you would like to see in future events?
+Challenging problems. I'll try my best next time!
diff --git a/pom.xml b/pom.xml
index 21d55bf..8e7181f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,11 +21,17 @@
4.12
test
-
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-csv
+ 2.11.2
+
+
- com.fasterxml.jackson.dataformat
- jackson-dataformat-csv
- 2.11.2
+ com.opencsv
+ opencsv
+ 4.1
diff --git a/src/main/java/sf/codingcompetition2020/CodingCompCsvUtil.java b/src/main/java/sf/codingcompetition2020/CodingCompCsvUtil.java
index 58267da..ce03cfd 100644
--- a/src/main/java/sf/codingcompetition2020/CodingCompCsvUtil.java
+++ b/src/main/java/sf/codingcompetition2020/CodingCompCsvUtil.java
@@ -1,147 +1,285 @@
package sf.codingcompetition2020;
+import java.io.FileNotFoundException;
import java.io.FileReader;
-import java.io.Reader;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.MappingIterator;
-import com.fasterxml.jackson.databind.ObjectReader;
-import com.fasterxml.jackson.dataformat.csv.CsvMapper;
-import com.fasterxml.jackson.dataformat.csv.CsvSchema;
+import com.opencsv.CSVReader;
+import com.opencsv.bean.CsvToBean;
+import com.opencsv.bean.HeaderColumnNameMappingStrategy;
import sf.codingcompetition2020.structures.Agent;
-import sf.codingcompetition2020.structures.Claim;
import sf.codingcompetition2020.structures.Customer;
import sf.codingcompetition2020.structures.Vendor;
public class CodingCompCsvUtil {
-
- /* #1
- * readCsvFile() -- Read in a CSV File and return a list of entries in that file.
+
+ /*
+ * #1 readCsvFile() -- Read in a CSV File and return a list of entries in that
+ * file.
+ *
* @param filePath -- Path to file being read in.
+ *
* @param classType -- Class of entries being read in.
+ *
* @return -- List of entries being returned.
*/
public List readCsvFile(String filePath, Class classType) {
+ HeaderColumnNameMappingStrategy strategy = new HeaderColumnNameMappingStrategy();
+ strategy.setType(classType);
+
+ CSVReader csvReader = null;
+ try {
+ csvReader = new CSVReader(new FileReader(filePath));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ CsvToBean csvToBean = new CsvToBean();
+
+ // call the parse method of CsvToBean
+ // pass strategy, csvReader to parse method
+ List list = csvToBean.parse(strategy, csvReader);
+
+ return list;
}
-
- /* #2
- * getAgentCountInArea() -- Return the number of agents in a given area.
+ /*
+ * #2 getAgentCountInArea() -- Return the number of agents in a given area.
+ *
* @param filePath -- Path to file being read in.
+ *
* @param area -- The area from which the agents should be counted.
+ *
* @return -- The number of agents in a given area
*/
- public int getAgentCountInArea(String filePath,String area) {
+ public int getAgentCountInArea(String filePath, String area) {
+ List agents = new ArrayList<>();
+ agents = readCsvFile(filePath, Agent.class);
+ int count = 0;
+
+ for (int i = 0; i < agents.size(); i++) {
+ if (agents.get(i).getArea().equals(area)) {
+ count++;
+ }
+
+ }
+
+ return count;
}
-
- /* #3
- * getAgentsInAreaThatSpeakLanguage() -- Return a list of agents from a given area, that speak a certain language.
+ /*
+ * #3 getAgentsInAreaThatSpeakLanguage() -- Return a list of agents from a given
+ * area, that speak a certain language.
+ *
* @param filePath -- Path to file being read in.
+ *
* @param area -- The area from which the agents should be counted.
+ *
* @param language -- The language spoken by the agent(s).
+ *
* @return -- The number of agents in a given area
*/
public List getAgentsInAreaThatSpeakLanguage(String filePath, String area, String language) {
+ List agents = new ArrayList<>();
+ agents = readCsvFile(filePath, Agent.class);
+
+ List newAgents = new ArrayList<>();
+
+ for (int i = 0; i < agents.size(); i++) {
+ if (agents.get(i).getArea().equals(area) && agents.get(i).getLanguage().equals(language)) {
+ newAgents.add(agents.get(i));
+ }
+
+ }
+
+ return newAgents;
}
-
-
- /* #4
- * countCustomersFromAreaThatUseAgent() -- Return the number of individuals from an area that use a certain agent.
+
+ /*
+ * #4 countCustomersFromAreaThatUseAgent() -- Return the number of individuals
+ * from an area that use a certain agent.
+ *
* @param filePath -- Path to file being read in.
+ *
* @param customerArea -- The area from which the customers should be counted.
+ *
* @param agentFirstName -- First name of agent.
+ *
* @param agentLastName -- Last name of agent.
+ *
* @return -- The number of customers that use a certain agent in a given area.
*/
- public short countCustomersFromAreaThatUseAgent(Map csvFilePaths, String customerArea, String agentFirstName, String agentLastName) {
-
+ public short countCustomersFromAreaThatUseAgent(Map csvFilePaths, String customerArea,
+ String agentFirstName, String agentLastName) {
+ List agents = new ArrayList<>();
+ agents = readCsvFile(csvFilePaths.get("agentList"), Agent.class);
+
+ List customers = new ArrayList<>();
+ customers = readCsvFile(csvFilePaths.get("customerList"), Customer.class);
+
+ short count = 0;
+ int agentId = 0;
+
+ for (int i = 0; i < customers.size(); i++) {
+ for (int j = 0; j < agents.size(); j++) {
+ if (agents.get(j).getFirstName().equals(agentFirstName)
+ && agents.get(j).getLastName().equals(agentLastName)) {
+ agentId = agents.get(j).getAgentId();
+
+ }
+
+ if (customers.get(i).getArea().equals(customerArea) && customers.get(i).getAgentId() == agentId) {
+ count++;
+ }
+
+ }
+
+ }
+
+ return count;
+
}
-
- /* #5
- * getCustomersRetainedForYearsByPlcyCostAsc() -- Return a list of customers retained for a given number of years, in ascending order of their policy cost.
+ /*
+ * #5 getCustomersRetainedForYearsByPlcyCostAsc() -- Return a list of customers
+ * retained for a given number of years, in ascending order of their policy
+ * cost.
+ *
* @param filePath -- Path to file being read in.
+ *
* @param yearsOfServeice -- Number of years the person has been a customer.
- * @return -- List of customers retained for a given number of years, in ascending order of policy cost.
+ *
+ * @return -- List of customers retained for a given number of years, in
+ * ascending order of policy cost.
*/
public List getCustomersRetainedForYearsByPlcyCostAsc(String customerFilePath, short yearsOfService) {
+ return null;
}
-
- /* #6
- * getLeadsForInsurance() -- Return a list of individuals who’ve made an inquiry for a policy but have not signed up.
- * *HINT* -- Look for customers that currently have no policies with the insurance company.
+ /*
+ * #6 getLeadsForInsurance() -- Return a list of individuals who’ve made an
+ * inquiry for a policy but have not signed up. *HINT* -- Look for customers
+ * that currently have no policies with the insurance company.
+ *
* @param filePath -- Path to file being read in.
- * @return -- List of customers who’ve made an inquiry for a policy but have not signed up.
+ *
+ * @return -- List of customers who’ve made an inquiry for a policy but have not
+ * signed up.
*/
public List getLeadsForInsurance(String filePath) {
+ return null;
}
-
- /* #7
- * getVendorsWithGivenRatingThatAreInScope() -- Return a list of vendors within an area and include options to narrow it down by:
- a. Vendor rating
- b. Whether that vendor is in scope of the insurance (if inScope == false, return all vendors in OR out of scope, if inScope == true, return ONLY vendors in scope)
+ /*
+ * #7 getVendorsWithGivenRatingThatAreInScope() -- Return a list of vendors
+ * within an area and include options to narrow it down by: a. Vendor rating b.
+ * Whether that vendor is in scope of the insurance (if inScope == false, return
+ * all vendors in OR out of scope, if inScope == true, return ONLY vendors in
+ * scope)
+ *
* @param filePath -- Path to file being read in.
+ *
* @param area -- Area of the vendor.
+ *
* @param inScope -- Whether or not the vendor is in scope of the insurance.
+ *
* @param vendorRating -- The rating of the vendor.
- * @return -- List of vendors within a given area, filtered by scope and vendor rating.
+ *
+ * @return -- List of vendors within a given area, filtered by scope and vendor
+ * rating.
*/
- public List getVendorsWithGivenRatingThatAreInScope(String filePath, String area, boolean inScope, int vendorRating) {
+ public List getVendorsWithGivenRatingThatAreInScope(String filePath, String area, boolean inScope,
+ int vendorRating) {
+ List vendors = new ArrayList<>();
+ vendors = readCsvFile(filePath, Vendor.class);
- }
+ List newVendors = new ArrayList<>();
+
+ List result = new ArrayList<>();
+
+ for (int i = 0; i < vendors.size(); i++) {
+ if(vendors.get(i).getArea().equals(area)) {
+ newVendors.add(vendors.get(i));
+ }
+ }
+
+ for (int j = 0; j < newVendors.size(); j++) {
+ if(inScope) {
+ if(newVendors.get(j).getVendorRating() == vendorRating && newVendors.get(j).isInScope()) {
+ result.add(newVendors.get(j));
+ }
+
+ } else {
+ if(newVendors.get(j).getVendorRating() == vendorRating) {
+ result.add(newVendors.get(j));
+ }
+ }
+ }
+
+
+ return result;
- /* #8
- * getUndisclosedDrivers() -- Return a list of customers between the age of 40 and 50 years (inclusive), who have:
- a. More than X cars
- b. less than or equal to X number of dependents.
+ }
+
+ /*
+ * #8 getUndisclosedDrivers() -- Return a list of customers between the age of
+ * 40 and 50 years (inclusive), who have: a. More than X cars b. less than or
+ * equal to X number of dependents.
+ *
* @param filePath -- Path to file being read in.
+ *
* @param vehiclesInsured -- The number of vehicles insured.
+ *
* @param dependents -- The number of dependents on the insurance policy.
- * @return -- List of customers filtered by age, number of vehicles insured and the number of dependents.
+ *
+ * @return -- List of customers filtered by age, number of vehicles insured and
+ * the number of dependents.
*/
public List getUndisclosedDrivers(String filePath, int vehiclesInsured, int dependents) {
+ return null;
- }
-
+ }
- /* #9
- * getAgentIdGivenRank() -- Return the agent with the given rank based on average customer satisfaction rating.
- * *HINT* -- Rating is calculated by taking all the agent rating by customers (1-5 scale) and dividing by the total number
- * of reviews for the agent.
+ /*
+ * #9 getAgentIdGivenRank() -- Return the agent with the given rank based on
+ * average customer satisfaction rating. *HINT* -- Rating is calculated by
+ * taking all the agent rating by customers (1-5 scale) and dividing by the
+ * total number of reviews for the agent.
+ *
* @param filePath -- Path to file being read in.
+ *
* @param agentRank -- The rank of the agent being requested.
+ *
* @return -- Agent ID of agent with the given rank.
*/
public int getAgentIdGivenRank(String filePath, int agentRank) {
-
- }
+ return agentRank;
+
+ }
-
- /* #10
- * getCustomersWithClaims() -- Return a list of customers who’ve filed a claim within the last (inclusive).
+ /*
+ * #10 getCustomersWithClaims() -- Return a list of customers who’ve filed a
+ * claim within the last (inclusive).
+ *
* @param filePath -- Path to file being read in.
+ *
* @param monthsOpen -- Number of months a policy has been open.
- * @return -- List of customers who’ve filed a claim within the last .
+ *
+ * @return -- List of customers who’ve filed a claim within the last
+ * .
*/
- public List getCustomersWithClaims(Map csvFilePaths, short monthsOpen) {
+ public List getCustomersWithClaims(Map csvFilePaths, short monthsOpen) {
+ return null;
- }
+ }
}
diff --git a/src/main/java/sf/codingcompetition2020/structures/Agent.java b/src/main/java/sf/codingcompetition2020/structures/Agent.java
index e2e6f93..01bad39 100644
--- a/src/main/java/sf/codingcompetition2020/structures/Agent.java
+++ b/src/main/java/sf/codingcompetition2020/structures/Agent.java
@@ -1,11 +1,51 @@
package sf.codingcompetition2020.structures;
public class Agent {
-
+
private int agentId;
private String area;
private String language;
private String firstName;
private String lastName;
-
+
+ public int getAgentId() {
+ return agentId;
+ }
+
+ public void setAgentId(int agentId) {
+ this.agentId = agentId;
+ }
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getLanguage() {
+ return language;
+ }
+
+ public void setLanguage(String language) {
+ this.language = language;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
}
diff --git a/src/main/java/sf/codingcompetition2020/structures/Claim.java b/src/main/java/sf/codingcompetition2020/structures/Claim.java
index 581140a..aed23ca 100644
--- a/src/main/java/sf/codingcompetition2020/structures/Claim.java
+++ b/src/main/java/sf/codingcompetition2020/structures/Claim.java
@@ -5,5 +5,37 @@ public class Claim {
private int customerId;
private boolean closed;
private int monthsOpen;
-
+
+ public int getClaimId() {
+ return claimId;
+ }
+
+ public void setClaimId(int claimId) {
+ this.claimId = claimId;
+ }
+
+ public int getCustomerId() {
+ return customerId;
+ }
+
+ public void setCustomerId(int customerId) {
+ this.customerId = customerId;
+ }
+
+ public boolean isClosed() {
+ return closed;
+ }
+
+ public void setClosed(boolean closed) {
+ this.closed = closed;
+ }
+
+ public int getMonthsOpen() {
+ return monthsOpen;
+ }
+
+ public void setMonthsOpen(int monthsOpen) {
+ this.monthsOpen = monthsOpen;
+ }
+
}
diff --git a/src/main/java/sf/codingcompetition2020/structures/Customer.java b/src/main/java/sf/codingcompetition2020/structures/Customer.java
index f151906..6f3e4eb 100644
--- a/src/main/java/sf/codingcompetition2020/structures/Customer.java
+++ b/src/main/java/sf/codingcompetition2020/structures/Customer.java
@@ -1,27 +1,173 @@
package sf.codingcompetition2020.structures;
-import java.util.ArrayList;
import java.util.List;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.opencsv.bean.CsvBindByName;
public class Customer {
+ @CsvBindByName(column = "customerId")
private int customerId;
+
+ @CsvBindByName(column = "firstName")
private String firstName;
+
+ @CsvBindByName(column = "lastName")
private String lastName;
+
+ @CsvBindByName(column = "age")
private int age;
+
+ @CsvBindByName(column = "area")
private String area;
+
+ @CsvBindByName(column = "agentId")
private int agentId;
+
+ @CsvBindByName(column = "agentRating")
private short agentRating;
+
+ @CsvBindByName(column = "primaryLanguage")
private String primaryLanguage;
+
+ @CsvBindByName(column = "dependents")
private List dependents;
+
+ @CsvBindByName(column = "homePolicy")
private boolean homePolicy;
+
+ @CsvBindByName(column = "autoPolicy")
private boolean autoPolicy;
+
+ @CsvBindByName(column = "rentersPolicy")
private boolean rentersPolicy;
+
+ @CsvBindByName(column = "totalMonthlyPremium")
private String totalMonthlyPremium;
+
+ @CsvBindByName(column = "yearsOfService")
private short yearsOfService;
+
+ @CsvBindByName(column = "vehiclesInsured")
private Integer vehiclesInsured;
+ public int getCustomerId() {
+ return customerId;
+ }
+
+ public void setCustomerId(int customerId) {
+ this.customerId = customerId;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public int getAgentId() {
+ return agentId;
+ }
+
+ public void setAgentId(int agentId) {
+ this.agentId = agentId;
+ }
+
+ public short getAgentRating() {
+ return agentRating;
+ }
+
+ public void setAgentRating(short agentRating) {
+ this.agentRating = agentRating;
+ }
+
+ public String getPrimaryLanguage() {
+ return primaryLanguage;
+ }
+
+ public void setPrimaryLanguage(String primaryLanguage) {
+ this.primaryLanguage = primaryLanguage;
+ }
+
+ public List getDependents() {
+ return dependents;
+ }
+
+ public void setDependents(List dependents) {
+ this.dependents = dependents;
+ }
+
+ public boolean isHomePolicy() {
+ return homePolicy;
+ }
+
+ public void setHomePolicy(boolean homePolicy) {
+ this.homePolicy = homePolicy;
+ }
+
+ public boolean isAutoPolicy() {
+ return autoPolicy;
+ }
+
+ public void setAutoPolicy(boolean autoPolicy) {
+ this.autoPolicy = autoPolicy;
+ }
+
+ public boolean isRentersPolicy() {
+ return rentersPolicy;
+ }
+
+ public void setRentersPolicy(boolean rentersPolicy) {
+ this.rentersPolicy = rentersPolicy;
+ }
+
+ public String getTotalMonthlyPremium() {
+ return totalMonthlyPremium;
+ }
+
+ public void setTotalMonthlyPremium(String totalMonthlyPremium) {
+ this.totalMonthlyPremium = totalMonthlyPremium;
+ }
+
+ public short getYearsOfService() {
+ return yearsOfService;
+ }
+
+ public void setYearsOfService(short yearsOfService) {
+ this.yearsOfService = yearsOfService;
+ }
+
+ public Integer getVehiclesInsured() {
+ return vehiclesInsured;
+ }
+
+ public void setVehiclesInsured(Integer vehiclesInsured) {
+ this.vehiclesInsured = vehiclesInsured;
+ }
+
}
diff --git a/src/main/java/sf/codingcompetition2020/structures/Dependent.java b/src/main/java/sf/codingcompetition2020/structures/Dependent.java
index d4deb1a..e5d7cb6 100644
--- a/src/main/java/sf/codingcompetition2020/structures/Dependent.java
+++ b/src/main/java/sf/codingcompetition2020/structures/Dependent.java
@@ -4,4 +4,20 @@ public class Dependent {
private String firstName;
private String lastName;
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
}
diff --git a/src/main/java/sf/codingcompetition2020/structures/Vendor.java b/src/main/java/sf/codingcompetition2020/structures/Vendor.java
index 6b6fb76..31314e3 100644
--- a/src/main/java/sf/codingcompetition2020/structures/Vendor.java
+++ b/src/main/java/sf/codingcompetition2020/structures/Vendor.java
@@ -5,5 +5,37 @@ public class Vendor {
private String area;
private int vendorRating;
private boolean inScope;
-
+
+ public int getVendorId() {
+ return vendorId;
+ }
+
+ public void setVendorId(int vendorId) {
+ this.vendorId = vendorId;
+ }
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public int getVendorRating() {
+ return vendorRating;
+ }
+
+ public void setVendorRating(int vendorRating) {
+ this.vendorRating = vendorRating;
+ }
+
+ public boolean isInScope() {
+ return inScope;
+ }
+
+ public void setInScope(boolean inScope) {
+ this.inScope = inScope;
+ }
+
}
diff --git a/target/classes/META-INF/MANIFEST.MF b/target/classes/META-INF/MANIFEST.MF
index e2a1a34..e2b362d 100644
--- a/target/classes/META-INF/MANIFEST.MF
+++ b/target/classes/META-INF/MANIFEST.MF
@@ -1,5 +1,5 @@
Manifest-Version: 1.0
-Built-By: yc1d
-Build-Jdk: 1.8.0_201
+Built-By: killiannguyen
+Build-Jdk: 11.0.2
Created-By: Maven Integration for Eclipse
diff --git a/target/classes/META-INF/maven/sf.codingcompetition2020/coding-competition/pom.properties b/target/classes/META-INF/maven/sf.codingcompetition2020/coding-competition/pom.properties
index fe569e3..ffa17e4 100644
--- a/target/classes/META-INF/maven/sf.codingcompetition2020/coding-competition/pom.properties
+++ b/target/classes/META-INF/maven/sf.codingcompetition2020/coding-competition/pom.properties
@@ -1,7 +1,7 @@
#Generated by Maven Integration for Eclipse
-#Thu Oct 08 09:27:33 MST 2020
-version=1.0.0-SNAPSHOT
-groupId=sf.codingcompetition2020
+#Sat Oct 10 22:42:01 CDT 2020
+m2e.projectLocation=/Users/killiannguyen/Documents/Git/Alice/AliceCodingSF/2020-StateFarm-CodingCompetitionProblem
m2e.projectName=coding-competition
-m2e.projectLocation=/Users/yc1d/Development/coding-competition/problem/online-competition
+groupId=sf.codingcompetition2020
artifactId=coding-competition
+version=1.0.0-SNAPSHOT
diff --git a/target/classes/META-INF/maven/sf.codingcompetition2020/coding-competition/pom.xml b/target/classes/META-INF/maven/sf.codingcompetition2020/coding-competition/pom.xml
index 21d55bf..8e7181f 100644
--- a/target/classes/META-INF/maven/sf.codingcompetition2020/coding-competition/pom.xml
+++ b/target/classes/META-INF/maven/sf.codingcompetition2020/coding-competition/pom.xml
@@ -21,11 +21,17 @@
4.12
test
-
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-csv
+ 2.11.2
+
+
- com.fasterxml.jackson.dataformat
- jackson-dataformat-csv
- 2.11.2
+ com.opencsv
+ opencsv
+ 4.1
diff --git a/target/classes/sf/codingcompetition2020/CodingCompCsvUtil.class b/target/classes/sf/codingcompetition2020/CodingCompCsvUtil.class
index 00daba9..738f62e 100644
Binary files a/target/classes/sf/codingcompetition2020/CodingCompCsvUtil.class and b/target/classes/sf/codingcompetition2020/CodingCompCsvUtil.class differ
diff --git a/target/classes/sf/codingcompetition2020/structures/Agent.class b/target/classes/sf/codingcompetition2020/structures/Agent.class
index 26bf31f..7d4891e 100644
Binary files a/target/classes/sf/codingcompetition2020/structures/Agent.class and b/target/classes/sf/codingcompetition2020/structures/Agent.class differ
diff --git a/target/classes/sf/codingcompetition2020/structures/Claim.class b/target/classes/sf/codingcompetition2020/structures/Claim.class
index 1ce796d..ed4ef8b 100644
Binary files a/target/classes/sf/codingcompetition2020/structures/Claim.class and b/target/classes/sf/codingcompetition2020/structures/Claim.class differ
diff --git a/target/classes/sf/codingcompetition2020/structures/Customer.class b/target/classes/sf/codingcompetition2020/structures/Customer.class
index 844ea29..e350094 100644
Binary files a/target/classes/sf/codingcompetition2020/structures/Customer.class and b/target/classes/sf/codingcompetition2020/structures/Customer.class differ
diff --git a/target/classes/sf/codingcompetition2020/structures/Dependent.class b/target/classes/sf/codingcompetition2020/structures/Dependent.class
index 3ee505f..473fbc6 100644
Binary files a/target/classes/sf/codingcompetition2020/structures/Dependent.class and b/target/classes/sf/codingcompetition2020/structures/Dependent.class differ
diff --git a/target/classes/sf/codingcompetition2020/structures/Vendor.class b/target/classes/sf/codingcompetition2020/structures/Vendor.class
index fdbca9b..4f8e17b 100644
Binary files a/target/classes/sf/codingcompetition2020/structures/Vendor.class and b/target/classes/sf/codingcompetition2020/structures/Vendor.class differ
diff --git a/target/test-classes/sf/codingcompetition2020/CodingCompCsvUtilTest.class b/target/test-classes/sf/codingcompetition2020/CodingCompCsvUtilTest.class
index 765ac60..66d8453 100644
Binary files a/target/test-classes/sf/codingcompetition2020/CodingCompCsvUtilTest.class and b/target/test-classes/sf/codingcompetition2020/CodingCompCsvUtilTest.class differ