diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e66dbc4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Intellij +.idea/ +*.iml +*.iws + +# Mac +.DS_Store + +# Maven +log/ +target/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..12c87ac --- /dev/null +++ b/pom.xml @@ -0,0 +1,25 @@ + + 4.0.0 + + zygmundfelt.dan.mesolabstrings + mesolabstrings + 1.0-SNAPSHOT + jar + + mesolabstrings + http://maven.apache.org + + + UTF-8 + + + + + + junit + junit + 4.12 + + + diff --git a/src/main/java/zygmundfelt/dan/mesolabstrings/Address.java b/src/main/java/zygmundfelt/dan/mesolabstrings/Address.java new file mode 100644 index 0000000..e191096 --- /dev/null +++ b/src/main/java/zygmundfelt/dan/mesolabstrings/Address.java @@ -0,0 +1,52 @@ +package zygmundfelt.dan.mesolabstrings; + +public class Address { + + private String streetAddress; + private String city; + private String state; + private String zipCode; + + Address(String streetAddress, String city, String state, String zipCode) { + this.streetAddress = streetAddress; + this.city = city; + this.state = state; + this.zipCode = zipCode; + } + + public String toStringForCSV() { + return streetAddress + "," + city + "," + state + "," + zipCode; + } + + public String getStreetAddress() { + return streetAddress; + } + + public void setStreetAddress(String streetAddress) { + this.streetAddress = streetAddress; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getZipCode() { + return zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } +} diff --git a/src/main/java/zygmundfelt/dan/mesolabstrings/FormatNotAcceptedException.java b/src/main/java/zygmundfelt/dan/mesolabstrings/FormatNotAcceptedException.java new file mode 100644 index 0000000..9cdf99a --- /dev/null +++ b/src/main/java/zygmundfelt/dan/mesolabstrings/FormatNotAcceptedException.java @@ -0,0 +1,6 @@ +package zygmundfelt.dan.mesolabstrings; + +import java.io.IOException; + +public final class FormatNotAcceptedException extends IOException { +} diff --git a/src/main/java/zygmundfelt/dan/mesolabstrings/Name.java b/src/main/java/zygmundfelt/dan/mesolabstrings/Name.java new file mode 100644 index 0000000..fe68ee1 --- /dev/null +++ b/src/main/java/zygmundfelt/dan/mesolabstrings/Name.java @@ -0,0 +1,43 @@ +package zygmundfelt.dan.mesolabstrings; + + +public class Name { + + private String firstName; + private String lastName; + private String middleName; + + Name(String last, String first, String middle) { + lastName = last; + firstName = first; + middleName = middle; + } + + public String toStringForCSV() { + return lastName + "," + firstName + "," + middleName; + } + + 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 String getMiddleName() { + return middleName; + } + + public void setMiddleName(String middleName) { + this.middleName = middleName; + } +} diff --git a/src/main/java/zygmundfelt/dan/mesolabstrings/PADriversLicense.java b/src/main/java/zygmundfelt/dan/mesolabstrings/PADriversLicense.java new file mode 100644 index 0000000..fa9746e --- /dev/null +++ b/src/main/java/zygmundfelt/dan/mesolabstrings/PADriversLicense.java @@ -0,0 +1,203 @@ +package zygmundfelt.dan.mesolabstrings; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PADriversLicense { + + private String licenseNumber; + private String lastName; + private String firstName; + private String middleName; + private String address; + private String city; + private String state; + private String zipCode; + private String dateOfBirth; + private String issued; + private String expires; + private String sex; + private String eyes; + private String height; + private String organDonor; + private String licenseClass; + + public PADriversLicense(String licenseNumber, String lastName, String firstName, String middleName, String address, String city, String state, String zipCode, String dateOfBirth, String issued, String expires, String sex, String eyes, String height, String organDonor, String licenseClass) { + this.licenseNumber = licenseNumber; + this.lastName = lastName; + this.firstName = firstName; + this.middleName = middleName; + this.address = address; + this.city = city; + this.state = state; + this.zipCode = zipCode; + this.dateOfBirth = dateOfBirth; + this.issued = issued; + this.expires = expires; + this.sex = sex; + this.eyes = eyes; + this.height = height; + this.organDonor = organDonor; + this.licenseClass = licenseClass; + } + + private PADriversLicense(String[] arr) { + licenseNumber = arr[0]; + lastName = arr[1]; + firstName = arr[2]; + middleName = arr[3]; + address = arr[4]; + city = arr[5]; + state = arr[6]; + zipCode = arr[7]; + dateOfBirth = arr[8]; + issued = arr[9]; + expires = arr[10]; + sex = arr[11]; + eyes = arr[12]; + height = arr[13]; + organDonor = arr[14]; + licenseClass = arr[15]; + } + + /* + Can be used for CSV or JSON. + */ + public static String fileToString(File file) throws IOException { + FileReader fReader = new FileReader(file); + BufferedReader bReader = new BufferedReader(fReader); + String output = ""; + for (String line; (line = bReader.readLine()) != null; output += line + "\n"); + return output; + } + + //TODO - check input to ensure valid header + public static List deserializeFromCSV(String string) { + List list = new ArrayList(); + String[] lineBreaks = string.split("\n"); + for(int i = 1; i < lineBreaks.length; i++) { + String[] arr = lineBreaks[i].split(","); + list.add(new PADriversLicense(arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9],arr[10],arr[11],arr[12],arr[13],arr[14],arr[15])); + } + return list; + } + + public static String getCSVHeader() { + return "licenseNumber,lastName,firstName,middleName,address,city,state,zipCode,dateOfBirth,issued,expires,sex,eyes,height,organDonor,licenseClass\n"; + } + + public static String serializeToCSV(List list) { + StringBuilder sb = new StringBuilder(); + sb.append(getCSVHeader()); + for(PADriversLicense license : list) { + sb.append(license.toStringForCSV()); + } + return sb.toString(); + } + + public String toStringForCSV() { + return licenseNumber + "," + + lastName + "," + + firstName + "," + + middleName + "," + + address + "," + + city + "," + + state + "," + + zipCode + "," + + dateOfBirth + "," + + issued + "," + + expires + "," + + sex + "," + + eyes + "," + + height + "," + + organDonor + "," + + licenseClass + "\n"; + } + + /* + Split into individual records. + */ + private static List splitToIndividualRecords(String string) { + Pattern pattern = Pattern.compile("\\{(\\s)+(\"[a-zA-Z0-9]+\": (\"([a-zA-Z0-9/' ]+)\"|\"\"),?\\s+)+}"); + Matcher m = pattern.matcher(string); + ArrayList matches = new ArrayList(); + while(m.find()) { + matches.add(m.group()); + } + //for(String s : matches) System.out.println(s); + return matches; + } + + /* + Put every field of an individual record into an array. + */ + public static String[] individualRecordToArray(String string) { + Pattern pattern = Pattern.compile("\"([a-zA-Z0-9/' ]*)\""); + Matcher m = pattern.matcher(string); + String[] individualRecord = new String[16]; + int i = 0; + while(m.find()) { + m.find(); + individualRecord[i] = m.group().replaceAll("\"",""); + i++; + } + return individualRecord; + } + + + public static List deserializeFromJSON(String string) { + List list = new ArrayList(); + List stringList = splitToIndividualRecords(string); + for(String record : stringList) { + String[] fieldArray = individualRecordToArray(record); + list.add(new PADriversLicense(fieldArray)); + } + return list; + } + + public static String serializeToJSON(List list) { + StringBuilder sb = new StringBuilder(); + sb.append("[\n"); + for(PADriversLicense license : list) { + sb.append(toStringForJSON(license)); + } + sb.replace(sb.length() - 2, sb.length(),""); + sb.append("\n]"); + return sb.toString(); + } + + public static String toStringForJSON(PADriversLicense license) { + return " {\n" + + " \"licenseNumber\": \"" + license.licenseNumber + "\",\n" + + " \"lastName\": \"" + license.lastName + "\",\n" + + " \"firstName\": \"" + license.firstName + "\",\n" + + " \"middleName\": \"" + license.middleName + "\",\n" + + " \"address\": \"" + license.address + "\",\n" + + " \"city\": \"" + license.city + "\",\n" + + " \"state\": \"" + license.state + "\",\n" + + " \"zipCode\": \"" + license.zipCode + "\",\n" + + " \"dateOfBirth\": \"" + license.dateOfBirth + "\",\n" + + " \"issued\": \"" + license.issued + "\",\n" + + " \"expires\": \"" + license.expires + "\",\n" + + " \"sex\": \"" + license.sex + "\",\n" + + " \"eyes\": \"" + license.eyes + "\",\n" + + " \"height\": \"" + license.height + "\",\n" + + " \"organDonor\": \"" + license.organDonor + "\",\n" + + " \"licenseClass\": \"" + license.licenseClass + "\"\n" + + " },\n"; + } + + public static List deserialize(String fileText, String desiredFormat) throws FormatNotAcceptedException { + if(desiredFormat.equalsIgnoreCase("CSV")) { + return deserializeFromCSV(fileText); + } else if(desiredFormat.equalsIgnoreCase("JSON")) { + return deserializeFromJSON(fileText); + } else { + throw new FormatNotAcceptedException(); + } + } + +} diff --git a/src/test/java/zygmundfelt/dan/mesolabstrings/TestAddress.java b/src/test/java/zygmundfelt/dan/mesolabstrings/TestAddress.java new file mode 100644 index 0000000..8c02d8e --- /dev/null +++ b/src/test/java/zygmundfelt/dan/mesolabstrings/TestAddress.java @@ -0,0 +1,26 @@ +package zygmundfelt.dan.mesolabstrings; + +import org.junit.*; + +public class TestAddress { + + @Test + public void toStringForCSVTest() { + Address address = new Address("100 Emoji Blvd", "Philadelphia", "PA", "19100"); + String expected = "100 Emoji Blvd,Philadelphia,PA,19100"; + + String actual = address.toStringForCSV(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void toStringForCSVEmptyTest() { + Address address = new Address("", "", "", ""); + String expected = ",,,"; + + String actual = address.toStringForCSV(); + + Assert.assertEquals(expected, actual); + } +} diff --git a/src/test/java/zygmundfelt/dan/mesolabstrings/TestName.java b/src/test/java/zygmundfelt/dan/mesolabstrings/TestName.java new file mode 100644 index 0000000..b923401 --- /dev/null +++ b/src/test/java/zygmundfelt/dan/mesolabstrings/TestName.java @@ -0,0 +1,36 @@ +package zygmundfelt.dan.mesolabstrings; + +import org.junit.*; + +public class TestName { + + @Test + public void toStringForCSVTest() { + Name name = new Name("Zygmund-Felt", "Daniel", "C"); + String expected = "Zygmund-Felt,Daniel,C"; + + String actual = name.toStringForCSV(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void toStringForCSVNoMiddleTest() { + Name name = new Name("Zygmund-Felt", "Daniel", ""); + String expected = "Zygmund-Felt,Daniel,"; + + String actual = name.toStringForCSV(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void toStringForCSVEmptyTest() { + Name name = new Name("", "", ""); + String expected = ",,"; + + String actual = name.toStringForCSV(); + + Assert.assertEquals(expected, actual); + } +} diff --git a/src/test/java/zygmundfelt/dan/mesolabstrings/TestPADriversLicense.java b/src/test/java/zygmundfelt/dan/mesolabstrings/TestPADriversLicense.java new file mode 100644 index 0000000..159c883 --- /dev/null +++ b/src/test/java/zygmundfelt/dan/mesolabstrings/TestPADriversLicense.java @@ -0,0 +1,410 @@ +package zygmundfelt.dan.mesolabstrings; + +import org.junit.*; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class TestPADriversLicense { + + @Test + public void getCSVHeaderTest() { + String expected = "licenseNumber,lastName,firstName,middleName,address,city,state,zipCode,dateOfBirth,issued,expires,sex,eyes,height,organDonor,licenseClass\n"; + + String actual = PADriversLicense.getCSVHeader(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void toStringForCSVTest() { + PADriversLicense dan = new PADriversLicense("001","Zygmund-Felt","Dan","C","123 Skidoo Ln","philadelphia","PA","19020","09/09/2009","12/12/2012", "12/12/2018","M","Brown","5'8","Yes", "D"); + String expected = "001,Zygmund-Felt,Dan,C,123 Skidoo Ln,philadelphia,PA,19020,09/09/2009,12/12/2012,12/12/2018,M,Brown,5'8,Yes,D\n"; + } + + @Test + public void serializeToCSVSingleRecordTest() { + List list = new ArrayList(); + list.add(new PADriversLicense("001","Zygmund-Felt","Dan","C","123 Skidoo Ln","philadelphia","PA","19020","09/09/2009","12/12/2012", "12/12/2018","M","Brown","5'8","Yes", "D")); + String expected = "licenseNumber,lastName,firstName,middleName,address,city,state,zipCode,dateOfBirth,issued,expires,sex,eyes,height,organDonor,licenseClass\n" + + "001,Zygmund-Felt,Dan,C,123 Skidoo Ln,philadelphia,PA,19020,09/09/2009,12/12/2012,12/12/2018,M,Brown,5'8,Yes,D\n"; + + String actual = PADriversLicense.serializeToCSV(list); + + Assert.assertEquals(expected, actual); + } + + @Test + public void deserializeFromCSVTest() { + String string = "licenseNumber,lastName,firstName,middleName,address,city,state,zipCode,dateOfBirth,issued,expires,sex,eyes,height,organDonor,licenseClass\n" + + "L098886498494,Lomax,Kevin,,9234 High St,Wilmington,MI,11111,9/3/1940,8/8/2008,8/8/2018,M,BRO,6'0'',YES,D\n" + + "L234234598495,Wick,John,Dogshead,2190 Badass Alley,Brooklyn,NY ,12321,6/6/1977,3/3/2000,1/1/2010,M,GRN,6'0'',YES,D\n" + + "L234235236253,Wyler,Alex,,234 Lake House St,Oswego,NY,32123,7/8/2000,4/8/2017,4/8/2027,M,BRO,5'11,YES,D\n" + + "L223523438497,Utah,Johnny,Salt,932 PointBreak Rd,Encino,CA,65456,2/5/1988,4/4/2000,4/4/2010,M,BRO,5'11,NO,D\n" + + "L101234101010,Starr,Patrick,,101 UnderTheSea Ct,Wilmington,HI,77777,10/07/1987,02-30-2010,02/30/2010,M,BRO,6'1,NO,D\n" + + "L101234107890,Zach,Leon,L,1234 BadAtSmash Ln,Wilmington,DE,99909,1/2/3456,3/3/2000,5/19/2107,M,BRO,4'3,NO,D"; + int expected = 6; + + List list = PADriversLicense.deserializeFromCSV(string); + int actual = list.size(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void individualRecordToArrayForJSONTest() { + String string = "{\n" + + " \"licenseNumber\": \"L234252352391\",\n" + + " \"lastName\": \"Reeves\",\n" + + " \"firstName\": \"Keanu\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"876 Zion Dr\",\n" + + " \"city\": \"White Plains\",\n" + + " \"state\": \"NY\",\n" + + " \"zipCode\": \"44444\",\n" + + " \"dateOfBirth\": \"6/6/1955\",\n" + + " \"issued\": \"6/9/2005\",\n" + + " \"expires\": \"6/9/2010\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"GRN\",\n" + + " \"height\": \"5'11\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " }"; + String[] expected = {"L234252352391","Reeves","Keanu","","876 Zion Dr","White Plains","NY","44444","6/6/1955","6/9/2005","6/9/2010","M","GRN","5'11","YES","D"}; + + String[] actual = PADriversLicense.individualRecordToArray(string); + + for(int i = 0; i < 16; i++) { + Assert.assertEquals(expected[i], actual[i]); + } + } + + @Test + public void toStringForJSONTest() { + PADriversLicense dan = new PADriversLicense("001","Zygmund-Felt","Dan","C","123 Skidoo Ln","philadelphia","PA","19020","09/09/2009","12/12/2012", "12/12/2018","M","Brown","5'8","Yes", "D"); + String expected = " {\n" + + " \"licenseNumber\": \"001\",\n" + + " \"lastName\": \"Zygmund-Felt\",\n" + + " \"firstName\": \"Dan\",\n" + + " \"middleName\": \"C\",\n" + + " \"address\": \"123 Skidoo Ln\",\n" + + " \"city\": \"philadelphia\",\n" + + " \"state\": \"PA\",\n" + + " \"zipCode\": \"19020\",\n" + + " \"dateOfBirth\": \"09/09/2009\",\n" + + " \"issued\": \"12/12/2012\",\n" + + " \"expires\": \"12/12/2018\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"Brown\",\n" + + " \"height\": \"5'8\",\n" + + " \"organDonor\": \"Yes\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n"; + + String actual = PADriversLicense.toStringForJSON(dan); + + Assert.assertEquals(expected, actual); + } + + @Test + public void deserializeFromJSONTest() { + List list = PADriversLicense.deserializeFromJSON("{\n" + + " \"licenseNumber\": \"L364856498487\",\n" + + " \"lastName\": \"Long\",\n" + + " \"firstName\": \"Aaron\",\n" + + " \"middleName\": \"C\",\n" + + " \"address\": \"456 Street Dr\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"NJ\",\n" + + " \"zipCode\": \"12345\",\n" + + " \"dateOfBirth\": \"06/17/1993\",\n" + + " \"issued\": \"06/17/2014\",\n" + + " \"expires\": \"06/30/2018\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"GRN\",\n" + + " \"height\": \"6'2\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L364856423452\",\n" + + " \"lastName\": \"Kim\",\n" + + " \"firstName\": \"Chris\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"820 District Dr\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"DE\",\n" + + " \"zipCode\": \"54321\",\n" + + " \"dateOfBirth\": \"12/11/1980\",\n" + + " \"issued\": \"08/12/2013\",\n" + + " \"expires\": \"12/11/2018\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"6'5\",\n" + + " \"organDonor\": \"NO\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L363345398489\",\n" + + " \"lastName\": \"Stamatelos\",\n" + + " \"firstName\": \"Jarryd\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"123 Main St\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"NJ\",\n" + + " \"zipCode\": \"21334\",\n" + + " \"dateOfBirth\": \"3/17/1988\",\n" + + " \"issued\": \"3/17/2016\",\n" + + " \"expires\": \"3/20/2020\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"7'0''\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L809239899490\",\n" + + " \"lastName\": \"Cage\",\n" + + " \"firstName\": \"Nick\",\n" + + " \"middleName\": \"Treasure\",\n" + + " \"address\": \"362 Fancy St\",\n" + + " \"city\": \"Los Angeles\",\n" + + " \"state\": \"CA\",\n" + + " \"zipCode\": \"55555\",\n" + + " \"dateOfBirth\": \"02/02/1970\",\n" + + " \"issued\": \"02/02/2000\",\n" + + " \"expires\": \"02/02/2006\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"6'0''\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L234252352391\",\n" + + " \"lastName\": \"Reeves\",\n" + + " \"firstName\": \"Keanu\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"876 Zion Dr\",\n" + + " \"city\": \"White Plains\",\n" + + " \"state\": \"NY\",\n" + + " \"zipCode\": \"44444\",\n" + + " \"dateOfBirth\": \"6/6/1955\",\n" + + " \"issued\": \"6/9/2005\",\n" + + " \"expires\": \"6/9/2010\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"GRN\",\n" + + " \"height\": \"5'11\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " }"); + int expected = 5; + + int actual = list.size(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void serializeToJSONTest() { + List list = PADriversLicense.deserializeFromJSON("{\n" + + " \"licenseNumber\": \"L364856498487\",\n" + + " \"lastName\": \"Long\",\n" + + " \"firstName\": \"Aaron\",\n" + + " \"middleName\": \"C\",\n" + + " \"address\": \"456 Street Dr\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"NJ\",\n" + + " \"zipCode\": \"12345\",\n" + + " \"dateOfBirth\": \"06/17/1993\",\n" + + " \"issued\": \"06/17/2014\",\n" + + " \"expires\": \"06/30/2018\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"GRN\",\n" + + " \"height\": \"6'2\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L364856423452\",\n" + + " \"lastName\": \"Kim\",\n" + + " \"firstName\": \"Chris\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"820 District Dr\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"DE\",\n" + + " \"zipCode\": \"54321\",\n" + + " \"dateOfBirth\": \"12/11/1980\",\n" + + " \"issued\": \"08/12/2013\",\n" + + " \"expires\": \"12/11/2018\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"6'5\",\n" + + " \"organDonor\": \"NO\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L363345398489\",\n" + + " \"lastName\": \"Stamatelos\",\n" + + " \"firstName\": \"Jarryd\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"123 Main St\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"NJ\",\n" + + " \"zipCode\": \"21334\",\n" + + " \"dateOfBirth\": \"3/17/1988\",\n" + + " \"issued\": \"3/17/2016\",\n" + + " \"expires\": \"3/20/2020\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"7'0''\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L809239899490\",\n" + + " \"lastName\": \"Cage\",\n" + + " \"firstName\": \"Nick\",\n" + + " \"middleName\": \"Treasure\",\n" + + " \"address\": \"362 Fancy St\",\n" + + " \"city\": \"Los Angeles\",\n" + + " \"state\": \"CA\",\n" + + " \"zipCode\": \"55555\",\n" + + " \"dateOfBirth\": \"02/02/1970\",\n" + + " \"issued\": \"02/02/2000\",\n" + + " \"expires\": \"02/02/2006\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"6'0''\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L234252352391\",\n" + + " \"lastName\": \"Reeves\",\n" + + " \"firstName\": \"Keanu\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"876 Zion Dr\",\n" + + " \"city\": \"White Plains\",\n" + + " \"state\": \"NY\",\n" + + " \"zipCode\": \"44444\",\n" + + " \"dateOfBirth\": \"6/6/1955\",\n" + + " \"issued\": \"6/9/2005\",\n" + + " \"expires\": \"6/9/2010\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"GRN\",\n" + + " \"height\": \"5'11\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " }"); + String expected = "[\n" + + " {\n" + + " \"licenseNumber\": \"L364856498487\",\n" + + " \"lastName\": \"Long\",\n" + + " \"firstName\": \"Aaron\",\n" + + " \"middleName\": \"C\",\n" + + " \"address\": \"456 Street Dr\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"NJ\",\n" + + " \"zipCode\": \"12345\",\n" + + " \"dateOfBirth\": \"06/17/1993\",\n" + + " \"issued\": \"06/17/2014\",\n" + + " \"expires\": \"06/30/2018\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"GRN\",\n" + + " \"height\": \"6'2\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L364856423452\",\n" + + " \"lastName\": \"Kim\",\n" + + " \"firstName\": \"Chris\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"820 District Dr\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"DE\",\n" + + " \"zipCode\": \"54321\",\n" + + " \"dateOfBirth\": \"12/11/1980\",\n" + + " \"issued\": \"08/12/2013\",\n" + + " \"expires\": \"12/11/2018\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"6'5\",\n" + + " \"organDonor\": \"NO\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L363345398489\",\n" + + " \"lastName\": \"Stamatelos\",\n" + + " \"firstName\": \"Jarryd\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"123 Main St\",\n" + + " \"city\": \"Wilmington\",\n" + + " \"state\": \"NJ\",\n" + + " \"zipCode\": \"21334\",\n" + + " \"dateOfBirth\": \"3/17/1988\",\n" + + " \"issued\": \"3/17/2016\",\n" + + " \"expires\": \"3/20/2020\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"7'0''\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L809239899490\",\n" + + " \"lastName\": \"Cage\",\n" + + " \"firstName\": \"Nick\",\n" + + " \"middleName\": \"Treasure\",\n" + + " \"address\": \"362 Fancy St\",\n" + + " \"city\": \"Los Angeles\",\n" + + " \"state\": \"CA\",\n" + + " \"zipCode\": \"55555\",\n" + + " \"dateOfBirth\": \"02/02/1970\",\n" + + " \"issued\": \"02/02/2000\",\n" + + " \"expires\": \"02/02/2006\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"BRO\",\n" + + " \"height\": \"6'0''\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " },\n" + + " {\n" + + " \"licenseNumber\": \"L234252352391\",\n" + + " \"lastName\": \"Reeves\",\n" + + " \"firstName\": \"Keanu\",\n" + + " \"middleName\": \"\",\n" + + " \"address\": \"876 Zion Dr\",\n" + + " \"city\": \"White Plains\",\n" + + " \"state\": \"NY\",\n" + + " \"zipCode\": \"44444\",\n" + + " \"dateOfBirth\": \"6/6/1955\",\n" + + " \"issued\": \"6/9/2005\",\n" + + " \"expires\": \"6/9/2010\",\n" + + " \"sex\": \"M\",\n" + + " \"eyes\": \"GRN\",\n" + + " \"height\": \"5'11\",\n" + + " \"organDonor\": \"YES\",\n" + + " \"licenseClass\": \"D\"\n" + + " }\n" + + "]"; + + String actual = PADriversLicense.serializeToJSON(list); + + Assert.assertEquals(expected, actual); + } + + @Test (expected = FormatNotAcceptedException.class) + public void deserializeNotAcceptedPDFTest() throws FormatNotAcceptedException { + PADriversLicense.deserialize("thisisthetextfromafile","PDF"); + } + + @Test (expected = FormatNotAcceptedException.class) + public void deserializeNotAcceptedCVSTest() throws FormatNotAcceptedException { + PADriversLicense.deserialize("heyitssomemorefiletext","CVS"); + } + +} diff --git a/src/test/resources/sample.csv b/src/test/resources/sample.csv new file mode 100644 index 0000000..bdadfdb --- /dev/null +++ b/src/test/resources/sample.csv @@ -0,0 +1,14 @@ +licenseNumber,lastName,firstName,middleName,address,city,state,zipCode,dateOfBirth,issued,expires,sex,eyes,height,organDonor,licenseClass +L364856498487,Long,Aaron,C,456 Street Dr,Wilmington,NJ,12345,06/17/1993,06/17/2014,06/30/2018,M,GRN,6'2,YES,D +L364856423452,Kim,Chris,,820 District Dr,Wilmington,DE,54321,12/11/1980,08/12/2013,12/11/2018,M,BRO,"6'5""",NO,D +L363345398489,Stamatelos,Jarryd,,123 Main St ,Wilmington,NJ,21334,3/17/1988,3/17/2016,3/20/2020,M,BRO,7'0'',YES,D +L809239899490,Cage,Nick,Treasure,362 Fancy St,Los Angeles,CA,55555,02/02/1970,02/02/2000,02/02/2006,M,BRO,6'0'',YES,D +L234252352391,Reeves,Keanu,,876 Zion Dr,White Plains,NY,44444,6/6/1955,6/9/2005,6/9/2010,M,GRN,5'11,YES,D +L364235898492,Anderson,John,Neo,2959 57th St,Manhattan,NY,33333,8/6/1980,7/7/1999,7/7/2009,M,BRO,5'11,NO,D +L323523423193,Traven,Jack,V,25 Speed Ln,Hollywood,CA,22222,2/20/1994,2/20/217,2/20/2027,M,BRO,5'11,YES,D +L098886498494,Lomax,Kevin,,9234 High St,Wilmington,MI,11111,9/3/1940,8/8/2008,8/8/2018,M,BRO,6'0'',YES,D +L234234598495,Wick,John,Dogshead,2190 Badass Alley,Brooklyn,NY ,12321,6/6/1977,3/3/2000,1/1/2010,M,GRN,6'0'',YES,D +L234235236253,Wyler,Alex,,234 Lake House St,Oswego,NY,32123,7/8/2000,4/8/2017,4/8/2027,M,BRO,5'11,YES,D +L223523438497,Utah,Johnny,Salt,932 PointBreak Rd,Encino,CA,65456,2/5/1988,4/4/2000,4/4/2010,M,BRO,5'11,NO,D +L101234101010,Starr,Patrick,,101 UnderTheSea Ct,Wilmington,HI,77777,10/07/1987,02-30-2010,02/30/2010,M,BRO,6'1,NO,D +L101234107890,Zach,Leon,L,1234 BadAtSmash Ln,Wilmington,DE,99909,1/2/3456,3/3/2000,5/19/2107,M,BRO,4'3,NO,D \ No newline at end of file diff --git a/src/test/resources/sample.json b/src/test/resources/sample.json new file mode 100644 index 0000000..bb31453 --- /dev/null +++ b/src/test/resources/sample.json @@ -0,0 +1,236 @@ +[ + { + "licenseNumber": "L364856498487", + "lastName": "Long", + "firstName": "Aaron", + "middleName": "C", + "address": "456 Street Dr", + "city": "Wilmington", + "state": "NJ", + "zipCode": "12345", + "dateOfBirth": "06/17/1993", + "issued": "06/17/2014", + "expires": "06/30/2018", + "sex": "M", + "eyes": "GRN", + "height": "6'2", + "organDonor": "YES", + "licenseClass": "D" + }, + { + "licenseNumber": "L364856423452", + "lastName": "Kim", + "firstName": "Chris", + "middleName": "", + "address": "820 District Dr", + "city": "Wilmington", + "state": "DE", + "zipCode": "54321", + "dateOfBirth": "12/11/1980", + "issued": "08/12/2013", + "expires": "12/11/2018", + "sex": "M", + "eyes": "BRO", + "height": "6'5", + "organDonor": "NO", + "licenseClass": "D" + }, + { + "licenseNumber": "L363345398489", + "lastName": "Stamatelos", + "firstName": "Jarryd", + "middleName": "", + "address": "123 Main St", + "city": "Wilmington", + "state": "NJ", + "zipCode": "21334", + "dateOfBirth": "3/17/1988", + "issued": "3/17/2016", + "expires": "3/20/2020", + "sex": "M", + "eyes": "BRO", + "height": "7'0''", + "organDonor": "YES", + "licenseClass": "D" + }, + { + "licenseNumber": "L809239899490", + "lastName": "Cage", + "firstName": "Nick", + "middleName": "Treasure", + "address": "362 Fancy St", + "city": "Los Angeles", + "state": "CA", + "zipCode": "55555", + "dateOfBirth": "02/02/1970", + "issued": "02/02/2000", + "expires": "02/02/2006", + "sex": "M", + "eyes": "BRO", + "height": "6'0''", + "organDonor": "YES", + "licenseClass": "D" + }, + { + "licenseNumber": "L234252352391", + "lastName": "Reeves", + "firstName": "Keanu", + "middleName": "", + "address": "876 Zion Dr", + "city": "White Plains", + "state": "NY", + "zipCode": "44444", + "dateOfBirth": "6/6/1955", + "issued": "6/9/2005", + "expires": "6/9/2010", + "sex": "M", + "eyes": "GRN", + "height": "5'11", + "organDonor": "YES", + "licenseClass": "D" + }, + { + "licenseNumber": "L364235898492", + "lastName": "Anderson", + "firstName": "John", + "middleName": "Neo", + "address": "2959 57th St", + "city": "Manhattan", + "state": "NY", + "zipCode": "33333", + "dateOfBirth": "8/6/1980", + "issued": "7/7/1999", + "expires": "7/7/2009", + "sex": "M", + "eyes": "BRO", + "height": "5'11", + "organDonor": "NO", + "licenseClass": "D" + }, + { + "licenseNumber": "L323523423193", + "lastName": "Traven", + "firstName": "Jack", + "middleName": "V", + "address": "25 Speed Ln", + "city": "Hollywood", + "state": "CA", + "zipCode": "22222", + "dateOfBirth": "2/20/1994", + "issued": "2/20/217", + "expires": "2/20/2027", + "sex": "M", + "eyes": "BRO", + "height": "5'11", + "organDonor": "YES", + "licenseClass": "D" + }, + { + "licenseNumber": "L098886498494", + "lastName": "Lomax", + "firstName": "Kevin", + "middleName": "", + "address": "9234 High St", + "city": "Wilmington", + "state": "MI", + "zipCode": "11111", + "dateOfBirth": "9/3/1940", + "issued": "8/8/2008", + "expires": "8/8/2018", + "sex": "M", + "eyes": "BRO", + "height": "6'0''", + "organDonor": "YES", + "licenseClass": "D" + }, + { + "licenseNumber": "L234234598495", + "lastName": "Wick", + "firstName": "John", + "middleName": "Dogshead", + "address": "2190 Badass Alley", + "city": "Brooklyn", + "state": "NY", + "zipCode": "12321", + "dateOfBirth": "6/6/1977", + "issued": "3/3/2000", + "expires": "1/1/2010", + "sex": "M", + "eyes": "GRN", + "height": "6'0''", + "organDonor": "YES", + "licenseClass": "D" + }, + { + "licenseNumber": "L234235236253", + "lastName": "Wyler", + "firstName": "Alex", + "middleName": "", + "address": "234 Lake House St", + "city": "Oswego", + "state": "NY", + "zipCode": "32123", + "dateOfBirth": "7/8/2000", + "issued": "4/8/2017", + "expires": "4/8/2027", + "sex": "M", + "eyes": "BRO", + "height": "5'11", + "organDonor": "YES", + "licenseClass": "D" + }, + { + "licenseNumber": "L223523438497", + "lastName": "Utah", + "firstName": "Johnny", + "middleName": "Salt", + "address": "932 PointBreak Rd", + "city": "Encino", + "state": "CA", + "zipCode": "65456", + "dateOfBirth": "2/5/1988", + "issued": "4/4/2000", + "expires": "4/4/2010", + "sex": "M", + "eyes": "BRO", + "height": "5'11", + "organDonor": "NO", + "licenseClass": "D" + }, + { + "licenseNumber": "L101234101010", + "lastName": "Starr", + "firstName": "Patrick", + "middleName": "", + "address": "101 UnderTheSea Ct", + "city": "Wilmington", + "state": "HI", + "zipCode": "77777", + "dateOfBirth": "10/07/1987", + "issued": "02-30-2010", + "expires": "02/30/2010", + "sex": "M", + "eyes": "BRO", + "height": "6'1", + "organDonor": "NO", + "licenseClass": "D" + }, + { + "licenseNumber": "L101234107890", + "lastName": "Zach", + "firstName": "Leon", + "middleName": "L", + "address": "1234 BadAtSmash Ln", + "city": "Wilmington", + "state": "DE", + "zipCode": "99909", + "dateOfBirth": "1/2/3456", + "issued": "3/3/2000", + "expires": "5/19/2107", + "sex": "M", + "eyes": "BRO", + "height": "4'3", + "organDonor": "NO", + "licenseClass": "D" + } +]