From 71c5d657c8e7398f134fd02eab7227b270cf81eb Mon Sep 17 00:00:00 2001 From: Giovanna Stern Date: Sat, 10 Oct 2020 21:31:55 -0700 Subject: [PATCH] coding challenge submission with 3 tests passing --- .classpath | 49 +++++ .project | 23 +++ .settings/org.eclipse.jdt.apt.core.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 118 +++++++++++ .settings/org.eclipse.m2e.core.prefs | 4 + ...framework.ide.eclipse.xml.namespaces.prefs | 5 + feedback.txt | 11 +- .../CodingCompCsvUtil.java | 185 +++++++++++++++++- .../structures/Agent.java | 26 +++ .../structures/Claim.java | 12 ++ .../structures/Customer.java | 80 ++++++++ .../structures/Vendor.java | 7 + target/classes/META-INF/MANIFEST.MF | 4 +- .../coding-competition/pom.properties | 8 +- .../CodingCompCsvUtil.class | Bin 3251 -> 8014 bytes .../structures/Agent.class | Bin 428 -> 983 bytes .../structures/Claim.class | Bin 397 -> 608 bytes .../structures/Customer.class | Bin 806 -> 2824 bytes .../structures/Dependent.class | Bin 384 -> 384 bytes .../structures/Vendor.class | Bin 419 -> 567 bytes .../CodingCompCsvUtilTest.class | Bin 3972 -> 5230 bytes 21 files changed, 515 insertions(+), 19 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.apt.core.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 .settings/org.springframework.ide.eclipse.xml.namespaces.prefs 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..14a0591 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + 2020-StateFarm-CodingCompetitionProblem + + + + + + 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..c5689c2 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,118 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +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.APILeak=warning +org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 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/.settings/org.springframework.ide.eclipse.xml.namespaces.prefs b/.settings/org.springframework.ide.eclipse.xml.namespaces.prefs new file mode 100644 index 0000000..fc1e3b8 --- /dev/null +++ b/.settings/org.springframework.ide.eclipse.xml.namespaces.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.springframework.ide.eclipse.xml.namespaces.default.version.check.classpath=true +org.springframework.ide.eclipse.xml.namespaces.enable.project.preferences=false +org.springframework.ide.eclipse.xml.namespaces.loadNamespaceHandlerFromClasspath=true +org.springframework.ide.eclipse.xml.namespaces.use.https.for.new.namespace.locations=false diff --git a/feedback.txt b/feedback.txt index b931d50..57dc7e4 100644 --- a/feedback.txt +++ b/feedback.txt @@ -1,9 +1,14 @@ -Your team (name of each individual participating): -How many JUnits were you able to get to pass? +Your team (name of each individual participating): Giovanna Stern +How many JUnits were you able to get to pass? Three of my tests passed. I completed writing methods for 1, 2, 3, 6, 8 and partially 5. +Please note: None of my tests related to customers pass because I could not determine how to read in the dependent array. Instead, I adjusted some customer fields to constants for purposes of working on the program. +I also was not able to complete any methods dealing with maps because I ran out of time to learn what they are. Document and describe any enhancements included to help the judges properly grade your submission. - Step 1: + Step 1: Step 2: Feedback for the coding competition? Things you would like to see in future events? +Although I didn't get all tests to pass, I thought this was a great experience. I enjoyed that the problem was centered around a real-world scenario so that is something I would continue to do. +I am currently a Freshman/Sophomore level in my studies so it gave me better insight on how I would apply what I am currently learning. +I would also highly recommend future competitors to work in a team. \ No newline at end of file diff --git a/src/main/java/sf/codingcompetition2020/CodingCompCsvUtil.java b/src/main/java/sf/codingcompetition2020/CodingCompCsvUtil.java index 58267da..7254d0b 100644 --- a/src/main/java/sf/codingcompetition2020/CodingCompCsvUtil.java +++ b/src/main/java/sf/codingcompetition2020/CodingCompCsvUtil.java @@ -1,6 +1,9 @@ package sf.codingcompetition2020; +import java.io.File; +import java.io.FileNotFoundException; import java.io.FileReader; + import java.io.Reader; import java.util.ArrayList; import java.util.HashMap; @@ -20,6 +23,7 @@ import sf.codingcompetition2020.structures.Claim; import sf.codingcompetition2020.structures.Customer; import sf.codingcompetition2020.structures.Vendor; +import java.util.Scanner; public class CodingCompCsvUtil { @@ -30,7 +34,103 @@ public class CodingCompCsvUtil { * @return -- List of entries being returned. */ public List readCsvFile(String filePath, Class classType) { - + File file; + Scanner inputFile; + try { + file = new File(filePath); + inputFile = new Scanner(file); + } + catch (FileNotFoundException e) { + return null; + } + + + // Determine Class Type and add appropriate entries to list + String header = inputFile.nextLine(); + String[] tokens = header.split(","); + + if (tokens[0].equals("agentId")) { + List agentList = new ArrayList(); + + while(inputFile.hasNextLine()) { + String currentLine = inputFile.nextLine(); + + String[] aT = currentLine.split(","); + //use constructor to set Agent + int id = Integer.parseInt(aT[0]); + Agent currAgent = new Agent(id, aT[1], aT[2], aT[3], aT[4]); + agentList.add(currAgent); + + } + inputFile.close(); + return (List) agentList; + } + else if(tokens[0].equals("claimId")) { + List claimList = new ArrayList(); + + while(inputFile.hasNextLine()) { + String currentLine = inputFile.nextLine(); + + String[] param = currentLine.split(","); + //use constructor to set Claim + int claimID = Integer.parseInt(param[0]); + int custID = Integer.parseInt(param[1]); + boolean closed = Boolean.parseBoolean(param[2]); + int months = Integer.parseInt(param[3]); + + Claim currClaim = new Claim(claimID, custID, closed, months); + claimList.add(currClaim); + + } + inputFile.close(); + return (List) claimList; + + } + else if(tokens[0].equals("customerId")){ + List customerList = new ArrayList(); + + while(inputFile.hasNextLine()) { + String currentLine = inputFile.nextLine(); + + String[] param = currentLine.split(","); + //Need to figure out how to read in dependent list + int custID = Integer.parseInt(param[0]); + int age = Integer.parseInt(param[3]); + int agentID = Integer.parseInt(param[5]); + short rating = Short.parseShort(param[6]); + boolean closed = Boolean.parseBoolean(param[2]); + + //use constructor to set Customer + Customer currCustomer = new Customer(custID, param[1], param[2], age, param[4],agentID, rating, param[7]); + customerList.add(currCustomer); + } + inputFile.close(); + return (List) customerList; + + } + else if(tokens[0].equals("vendorId")) { + List vendorList = new ArrayList(); + + while(inputFile.hasNextLine()) { + String currentLine = inputFile.nextLine(); + String[] param = currentLine.split(","); + int vendorId = Integer.parseInt(param[0]); + int rating = Integer.parseInt(param[2]); + boolean inScope = Boolean.parseBoolean(param[3]); + + //use constructor to set vendor + Vendor currVendor = new Vendor(vendorId, param[1], rating, inScope); + vendorList.add(currVendor); + + } + inputFile.close(); + return (List) vendorList; + + } + + inputFile.close(); + return null; + } @@ -41,7 +141,16 @@ public List readCsvFile(String filePath, Class classType) { * @return -- The number of agents in a given area */ public int getAgentCountInArea(String filePath,String area) { - + List allAgentsList = readCsvFile(filePath, Agent.class); + + int count = 0; + + for(int i = 0; i < allAgentsList.size(); ++i) { + if(allAgentsList.get(i).getArea().equals(area)) { + count++; + } + } + return count; } @@ -53,6 +162,18 @@ public int getAgentCountInArea(String filePath,String area) { * @return -- The number of agents in a given area */ public List getAgentsInAreaThatSpeakLanguage(String filePath, String area, String language) { + + List allAgentsList = readCsvFile(filePath, Agent.class); + + List agentList = new ArrayList(); + + for(int i = 0; i < allAgentsList.size(); ++i) { + if(allAgentsList.get(i).getArea().equals(area) && allAgentsList.get(i).getLanguage().equals(language)) { + // need if statement for dependents and cars + agentList.add(allAgentsList.get(i)); + } + } + return agentList; } @@ -66,7 +187,8 @@ public List getAgentsInAreaThatSpeakLanguage(String filePath, String area * @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) { - + //method not complete + return 0; } @@ -76,8 +198,21 @@ public short countCustomersFromAreaThatUseAgent(Map csvFilePaths, * @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. */ - public List getCustomersRetainedForYearsByPlcyCostAsc(String customerFilePath, short yearsOfService) { - + public List getCustomersRetainedForYearsByPlcyCostAsc(String customerFilePath, short yearsOfService){ + List allCustomersList = readCsvFile(customerFilePath, Customer.class); + + List custRetainedForYearsByPlcyCostAscList = new ArrayList(); + + for(int i = 0; i < allCustomersList.size(); ++i) { + if(allCustomersList.get(i).getYearsOfService() == yearsOfService) { + custRetainedForYearsByPlcyCostAscList.add(allCustomersList.get(i)); + } + } + + //TODO sort list by ascending order of policy cost + + return custRetainedForYearsByPlcyCostAscList; + } @@ -88,7 +223,19 @@ public List getCustomersRetainedForYearsByPlcyCostAsc(String customerF * @return -- List of customers who’ve made an inquiry for a policy but have not signed up. */ public List getLeadsForInsurance(String filePath) { - + + List allCustomersList = readCsvFile(filePath, Customer.class); + + List customerLeadsList = new ArrayList(); + + for(int i = 0; i < allCustomersList.size(); ++i) { + if(allCustomersList.get(i).getHomePolicy() == false && allCustomersList.get(i).getRentersPolicy() == false && + allCustomersList.get(i).getAutoPolicy() == false) { + customerLeadsList.add(allCustomersList.get(i)); + } + } + + return customerLeadsList; } @@ -103,7 +250,10 @@ b. Whether that vendor is in scope of the insurance (if inScope == false, return * @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) { - + //Method not complete + List vendors = readCsvFile(filePath, Vendor.class); + + return vendors; } @@ -117,7 +267,18 @@ public List getVendorsWithGivenRatingThatAreInScope(String filePath, Str * @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) { - + List customers = readCsvFile(filePath, Customer.class); + + List undisclosedList = new ArrayList(); + + for(int i = 0; i < customers.size(); ++i) { + if(customers.get(i).getAge() >= 40 && customers.get(i).getAge() <= 50) { + // need if statement for dependents and cars + undisclosedList.add(customers.get(i)); + } + } + + return undisclosedList; } @@ -130,7 +291,8 @@ public List getUndisclosedDrivers(String filePath, int vehiclesInsured * @return -- Agent ID of agent with the given rank. */ public int getAgentIdGivenRank(String filePath, int agentRank) { - + //method not complete + return 0; } @@ -141,7 +303,10 @@ public int getAgentIdGivenRank(String filePath, int agentRank) { * @return -- List of customers who’ve filed a claim within the last . */ public List getCustomersWithClaims(Map csvFilePaths, short monthsOpen) { - + //method not complete + List customers = readCsvFile(csvFilePaths.get(0), Customer.class); + + return customers; } } diff --git a/src/main/java/sf/codingcompetition2020/structures/Agent.java b/src/main/java/sf/codingcompetition2020/structures/Agent.java index e2e6f93..9133bd8 100644 --- a/src/main/java/sf/codingcompetition2020/structures/Agent.java +++ b/src/main/java/sf/codingcompetition2020/structures/Agent.java @@ -8,4 +8,30 @@ public class Agent { private String firstName; private String lastName; + public Agent(int agentId, String area, String language, String firstName, String lastName) { + this.agentId = agentId; + this.area = area; + this.language = language; + this.firstName = firstName; + this.lastName = lastName; + } + + public String getFirstName() { + // TODO Auto-generated method stub + return this.firstName; + } + public int getAgentId() { + // TODO Auto-generated method stub + return this.agentId; + } + + public String getArea() { + return this.area; + } + + public String getLanguage() { + return this.language; + } + + } diff --git a/src/main/java/sf/codingcompetition2020/structures/Claim.java b/src/main/java/sf/codingcompetition2020/structures/Claim.java index 581140a..be7f419 100644 --- a/src/main/java/sf/codingcompetition2020/structures/Claim.java +++ b/src/main/java/sf/codingcompetition2020/structures/Claim.java @@ -6,4 +6,16 @@ public class Claim { private boolean closed; private int monthsOpen; + public Claim(int claimId, int customerId, boolean closed, int monthsOpen) { + this.claimId = claimId; + this.customerId = customerId; + this.closed = closed; + this.monthsOpen = monthsOpen; + } + + public int getClaimId() { + // TODO Auto-generated method stub + return this.claimId; + } + } diff --git a/src/main/java/sf/codingcompetition2020/structures/Customer.java b/src/main/java/sf/codingcompetition2020/structures/Customer.java index f151906..d7f7edb 100644 --- a/src/main/java/sf/codingcompetition2020/structures/Customer.java +++ b/src/main/java/sf/codingcompetition2020/structures/Customer.java @@ -23,5 +23,85 @@ public class Customer { private String totalMonthlyPremium; private short yearsOfService; private Integer vehiclesInsured; + + //Constructor with fields until those after dependents + public Customer (int customerId, String firstName, String lastName, int age, String area, int agentId, short agentRating, + String primaryLanguage) { + this.customerId = customerId; + this.firstName = firstName; + this.lastName = lastName; + this.age = age; + this.area = area; + this.agentId = agentId; + this.agentRating = agentRating; + this.primaryLanguage = primaryLanguage; + // Set below values to default values for testing because could not determine how to read in dependents + this.dependents = null; + this.homePolicy = false; + this.autoPolicy = true; + this.rentersPolicy = false; + this.totalMonthlyPremium = "100"; + this.yearsOfService = 10; + this.vehiclesInsured = 2; + } + + //overloaded constructor + public Customer (int customerId, String firstName, String lastName, int age, String area, int agentId, short agentRating, + String primaryLanguage, List dependents, boolean homePolicy, boolean autoPolicy, boolean rentersPolicy, String totalMonthlyPremium, + short yearsOfService, Integer vehiclesInsured) { + this.customerId = customerId; + this.firstName = firstName; + this.lastName = lastName; + this.age = age; + this.area = area; + this.agentId = agentId; + this.agentRating = agentRating; + this.primaryLanguage = primaryLanguage; + this.dependents = dependents; + this.homePolicy = homePolicy; + this.autoPolicy = autoPolicy; + this.rentersPolicy = rentersPolicy; + this.totalMonthlyPremium = totalMonthlyPremium; + this.yearsOfService = yearsOfService; + this.vehiclesInsured = vehiclesInsured; + } + + + public String getFirstName() { + // TODO Auto-generated method stub + return this.firstName; + } + public int getCustomerId() { + // TODO Auto-generated method stub + return this.customerId; + } + public short getYearsOfService() { + // TODO Auto-generated method stub + return this.yearsOfService; + } + public String getTotalMonthlyPremium() { + // TODO Auto-generated method stub + return this.totalMonthlyPremium; + } + public String getLastName() { + // TODO Auto-generated method stub + return this.lastName; + } + public int getAge() { + return this.age; + } + + public boolean getHomePolicy() { + return this.homePolicy; + } + + public boolean getRentersPolicy() { + return this.rentersPolicy; + } + + public boolean getAutoPolicy() { + return this.autoPolicy; + } + } diff --git a/src/main/java/sf/codingcompetition2020/structures/Vendor.java b/src/main/java/sf/codingcompetition2020/structures/Vendor.java index 6b6fb76..fdee75d 100644 --- a/src/main/java/sf/codingcompetition2020/structures/Vendor.java +++ b/src/main/java/sf/codingcompetition2020/structures/Vendor.java @@ -6,4 +6,11 @@ public class Vendor { private int vendorRating; private boolean inScope; + public Vendor(int vendorId, String area, int vendorRating, boolean inScope) { + this.vendorId = vendorId; + this.area = area; + this.vendorRating = vendorRating; + this.inScope = inScope; + } + } diff --git a/target/classes/META-INF/MANIFEST.MF b/target/classes/META-INF/MANIFEST.MF index e2a1a34..d3b3e37 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: temp +Build-Jdk: 14.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..1e2eb52 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 +#Sat Oct 10 18:20:54 MST 2020 +m2e.projectLocation=/Users/temp/dev/2020-StateFarm-CodingCompetitionProblem +m2e.projectName=2020-StateFarm-CodingCompetitionProblem groupId=sf.codingcompetition2020 -m2e.projectName=coding-competition -m2e.projectLocation=/Users/yc1d/Development/coding-competition/problem/online-competition artifactId=coding-competition +version=1.0.0-SNAPSHOT diff --git a/target/classes/sf/codingcompetition2020/CodingCompCsvUtil.class b/target/classes/sf/codingcompetition2020/CodingCompCsvUtil.class index 00daba9d49249e6950fa6b4b75732ac294bb504b..1af1ce871a343d57c9f349bca5cec7a80000cb0b 100644 GIT binary patch literal 8014 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 literal 3251 zcmb`JU2_{X6o!x7q;a-|mb3}wdmH)@x1~-)OG|7#6I=qGF$8KmrMXjf6YW-y&%b{C9RTh@Z3zklZt0_PBx5eR zk?aqc;f71GwYjxfu4kil9Ifl)j^W7?ED*T(oF3D1LPfW{clew|hQQe>7u?hcoY^St z6Ij3(Spa8X`8+JbSppZDT(ED_{vlIsdYCW*D@_^EWS=T-??;0RrpGmbJI(xxDg@3c zMq?DX%Psi9MsuRCWfZ1WnHs4lRO?DskUoD04wmOwf_o%RgZF8r%PRCcDhWMx=e*> zh#hp2z)er|lp7;YON}DDOJHw~(z!4Jfp9EJ4+XV*)U*bSzGz~{rL>Fn`6`z}kLKC3 zr*lG8U){6Xs5G*TrOTPw*dRr?O5o`nt;?#O(Q9bodSvTa$2O6Dru43oeOp@VWJj|s zY+_Yy`ty@-ljx)_wb{`Tf$N^eX?fO_PM)}Y-7}V!HPCGW2XnL_YoPH5Y!6*V zFPgZpYRtbObgHO`aOz$2q~poDog?gjCyh%JirQx)mP$Y6ruQX3X5tC1m7;5V8+*JV zT9F)}&PN^rvpsmw@Mu3e<*WJf8OqN}_%VU+=Uu`f-WG5bz3PaV>nM?$#g7%5rSR{1 z!;@aa=fi%kz)RrYd5?eaYI)X6mlp3cyvsT@&uc0M6kR?w0Vlgm+~;6Fe{8dI`l} z@S*?#9_?d*D;NxLei(q~*YJ+O>u>?1F5-0o-pC;L5pChYZ?N)g5d`y+cgA%#<< zz>(g9w~=RM{FCsGhj80Vcn{upT0U^31*awSkREzT>+qo?U2~*GN4oAIJ@%4r!iFQ2 z9BJYYIz8jho|kk7K60eHj#O}(e53;}sSKNrbkC6{*=>0=aWCmUJaD8>9BJaXPty-x g(nENZyZS$Q37^8Y(^7F-{@dxFy`(C7T7b{~2FpNm>;M1& diff --git a/target/classes/sf/codingcompetition2020/structures/Agent.class b/target/classes/sf/codingcompetition2020/structures/Agent.class index 26bf31f236fb6fb54997543cc9d682faad0ab137..ab5fdfcb87a38788127839668aca02838f6fc71c 100644 GIT binary patch literal 983 zcmbVK+iuf96r4@$IB`vrrfI1ur773MTwGPWfhr-SN|CJcP?YzL;|5oWjqEjF!e{UR z5*88F+l==Z7OWxVzGqW>i{qxuN9{`?XV4)^3%+LKWoyN&5Oc(DX6{|Q+ zjt-9w{aj^5sERDg{a3RnQ5Fn=&V~FS{kcqL{+r1~6e zsf^@b2sD{jP`g0uJkD};Di?&Q{0BB(#!0M>1%kooy2AfehGTN|I-N!~>gYIdupv+% z496`9Y&tN}V6^4HLX*)=2dyP?9oS2>>tGE{fp!ol(P^=mMA=(8nUni&kcM(TmRZdE z%c7y)#ks)a;Gd^U<8fw@I=LE4Z!o+bSiq((eIGn=ia|5CxTMFvMkx3@Wcw^FvM@S{ z*{7{Z&-hw!Kq>3=6PT!Rd_px2uUCq$R|>9IicPCY3qi*(lM*+d&II@res_UP;JQj>c3X-DeX zo6v~e)ih#%?7h!dLwbzZBRlNtWbDwV9WzbuD|S8;sDW)Xba6``=PVm8j}y3ydsJB^ hcR#I=-AeNP%9DGmC+}5~A5@aJSIGyJJ7=%CXZZ_=3gggk47mqG+Lz5ds2<-)eM1znLAtVqDJv5XQ;S7{CNUV@3 zH~^>MBvHn@Y3#8*|2N~;@IOlbRzJVMgp+0Za$X%}*=07K8KUXKe325eW2w7Sv*efu5a(Nc`=*4nX{)rjv7|$wlbdygo2*? zrtbPVO*hDCyJ1epb)ua8PrU|oy@yz9LL_`5MqQM)C|#+ZUM3}pJ_DV+UnP~}l}d^t rb>Um;Oa4+V1v3me+|)VM?guLFi{^(!nOss@MT&1O!zRUWRJe}U{)ZnR delta 120 zcmaFB(#yff$?3=9m03}O?xT1A;PG{YDfSe)}yQn?tI8Tfe^xEXjRUW=dX!RX|{ z$iN8V0!dz=4t*fa2&7rHwlnZ;1TvTy1b`$PSdf`P5Xc581u9?=Vh{$>j0_?`l8HeS E00G4gT>t<8 diff --git a/target/classes/sf/codingcompetition2020/structures/Customer.class b/target/classes/sf/codingcompetition2020/structures/Customer.class index 844ea29474f5bc9dd328dee078d97b0567ad1de8..af91640d7cbff361784d51da833e8775817fb2aa 100644 GIT binary patch literal 2824 zcmcIl+fo}x5Iu_kA+g*MiDDIoG>~y48Aqb&1BIm7m__wm zA)2orNF8g?QW_#Bwo`St&61^IIDHAoxDIbx*3eTl8~Y)%z*C*3W0@MlT$EjL)2p;S z(hhLI#x9gi$w9+<+xANO zeKLRExL|pe{-UR3VYgDW^A`*$OM_W+D-A=R!$2&j+E|ac71u1jtd!l;;>E6GmF!wc zL;r$?mIHN4 z-?aoBN@d(~h6nTDaus;YCO<2hcigwD-k&DuH9FqTM7wj|u3Qv80Q;}cvX`Dwds zZP!Xima}gj75N;)=}O)#9+-|T>$zu);Mr`pCB1qf zv_5eoV|n90{?AZ8yqP{I_OYvPa&gvp7rkJ)o0p?zG|~Fr&0*8WQ;kQF(ZcHHj2fc# zOO_!(>n#%_nyJ*BytQdd z;q^5_oRP}LEmmoWgL(iR(u34Gqyv>?|0&7tQBs)(@_MMXKIwje2^fs*Y5&B{0 zDV=?%B)d*YwwjV`G$q+0l)c1W$EW;$256(iM`+C&zu|^)&BM4c;Z%KvXE>xqxcbqLyUA6q$yH9(pl~I8`dsCjT;-Zv z<>XgDag}Rwm8)|lSgA;vQKGJlTwvA8Qk==OG}(jNAHAow5ff$?3=9m04C))Xb}))EYiNcsGO#%3r=)T*Ff%CdFvu{-PUc}woZQ2@ z%!84E5yS_QazH)$K$;OqvubT;klzSoFfk|sNj9(`7lRUz%>z-upv<5Go&j E07XL&WdHyG diff --git a/target/classes/sf/codingcompetition2020/structures/Dependent.class b/target/classes/sf/codingcompetition2020/structures/Dependent.class index 3ee505f7dda4d5aad7c64d98dd9748ea80a0698b..5e7c6a09c798b51e49f76b94856d428adb87ba6d 100644 GIT binary patch delta 28 kcmZo*ZeSKT^>5cc1_lNb24QvvCPoI`i5GP@+B!1=0CzbDmH+?% delta 28 kcmZo*ZeSKT^>5cc1_lO024QvvCPoI`i5GP@+B!1=0Cx!olK=n! diff --git a/target/classes/sf/codingcompetition2020/structures/Vendor.class b/target/classes/sf/codingcompetition2020/structures/Vendor.class index fdbca9b6e0183e880547b8ff174552c31967ec4f..b5bb5e222a1a14c4430b922f3298523a3edbe05c 100644 GIT binary patch delta 251 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