From 36adef0df20b196313a2cbaf39121659dec3d0cd Mon Sep 17 00:00:00 2001 From: vidyachandasekhar Date: Sun, 21 May 2017 12:50:55 -0400 Subject: [PATCH 1/2] Completed Part-A --- pom.xml | 32 +++ .../zipcode/stringslab/DriversLicense.java | 233 ++++++++++++++++++ .../stringslab/DriversLicenseTest.java | 91 +++++++ 3 files changed, 356 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/com/zipcode/stringslab/DriversLicense.java create mode 100644 src/test/java/com/zipcode/stringslab/DriversLicenseTest.java diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d806284 --- /dev/null +++ b/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + io.zipcoder + mesolab-string + 1.0-SNAPSHOT + + + + junit + junit + 4.12 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + \ No newline at end of file diff --git a/src/main/java/com/zipcode/stringslab/DriversLicense.java b/src/main/java/com/zipcode/stringslab/DriversLicense.java new file mode 100644 index 0000000..b1e91ee --- /dev/null +++ b/src/main/java/com/zipcode/stringslab/DriversLicense.java @@ -0,0 +1,233 @@ +package com.zipcode.stringslab; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; + +/** + * Create a DriversLicense class with fields found on a typical driver's license. Write a serializeToCSV method that + * returns a string of comma separated values for the fields in the Driver's License, and a static getCSVHeader method + * that produces the comma separated header for the CSV fields. + *

+ * Created by vidyachandasekhar on 5/21/17. + */ + + +public class DriversLicense { + + private String lastName; + private String firstName; + private String address; + private String state; + private String licenseNumber; + private String dateOfBirth; + private String dateOfIssue; + private String dateOfExpiry; + private String gender; + private String eyeColor; + private String height; + private String organDonor; + private String licenseClass; + + private static DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getLicenseNumber() { + return licenseNumber; + } + + public void setLicenseNumber(String licenseNumber) { + this.licenseNumber = licenseNumber; + } + + public String getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(String dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + public String getDateOfIssue() { + return dateOfIssue; + } + + public void setDateOfIssue(String dateOfIssue) { + this.dateOfIssue = dateOfIssue; + } + + public String getDateOfExpiry() { + return dateOfExpiry; + } + + public void setDateOfExpiry(String dateOfExpiry) { + this.dateOfExpiry = dateOfExpiry; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getEyeColor() { + return eyeColor; + } + + public void setEyeColor(String eyeColor) { + this.eyeColor = eyeColor; + } + + public String getHeight() { + return height; + } + + public void setHeight(String height) { + this.height = height; + } + + public String getOrganDonor() { + return organDonor; + } + + public void setOrganDonor(String organDonor) { + this.organDonor = organDonor; + } + + public String getLicenseClass() { + return licenseClass; + } + + public void setLicenseClass(String licenseClass) { + this.licenseClass = licenseClass; + } + + // a string of comma separated values for the fields in the Driver's License + public String serializeToCSV() { + + StringBuilder stringBuilder = new StringBuilder(); + + stringBuilder.append(lastName); + stringBuilder.append(','); + stringBuilder.append(firstName); + stringBuilder.append(','); + stringBuilder.append(address); + stringBuilder.append(','); + stringBuilder.append(state); + stringBuilder.append(','); + stringBuilder.append(licenseNumber); + stringBuilder.append(','); + stringBuilder.append(dateOfBirth); + stringBuilder.append(','); + stringBuilder.append(dateOfIssue); + stringBuilder.append(','); + stringBuilder.append(dateOfExpiry); + stringBuilder.append(','); + stringBuilder.append(gender); + stringBuilder.append(','); + stringBuilder.append(eyeColor); + stringBuilder.append(','); + stringBuilder.append(height); + stringBuilder.append(','); + stringBuilder.append(organDonor); + stringBuilder.append(','); + stringBuilder.append(licenseClass); + + return stringBuilder.toString(); + } + + //produces the comma separated header for the CSV fields + public static String getCSVHeader() { + return "LAST_NAME,FIRST_NAME,ADDRESS,STATE,LICENSE_NUMBER,DATE_OF_BIRTH,DATE_OF_ISSUE,DATE_OF_EXPIRY," + + "GENDER,EYES_COLOR,HEIGHT,ORGAN_DONOR,LICENSE_CLASS"; + } + + // takes a string representing the contents of a CSV file produced using getCSVHeader and serializeToCSV + // and reproduces a List of Driver's License objects that match the contents of the file. + public static List deserializeFromCSV(String licenseDataCSVString) { + + BufferedReader bufferedReader = new BufferedReader(new StringReader(licenseDataCSVString)); + List returnList = new ArrayList<>(); + try { + String line = bufferedReader.readLine(); + boolean isHeader = true; + + + while (line != null) { + + if (isHeader){ + isHeader=false; + line = bufferedReader.readLine(); + continue; + } + + // use comma as separator + String[] licenseDataArray = line.split(","); + + DriversLicense driversLicense = new DriversLicense(); + driversLicense.setLastName(licenseDataArray[0]); + driversLicense.setFirstName(licenseDataArray[1]); + driversLicense.setAddress(licenseDataArray[2]); + driversLicense.setState(licenseDataArray[3]); + driversLicense.setLicenseNumber(licenseDataArray[4]); + + driversLicense.setDateOfBirth(licenseDataArray[5]); + driversLicense.setDateOfIssue(licenseDataArray[6]); + driversLicense.setDateOfExpiry(licenseDataArray[7]); + + driversLicense.setGender(licenseDataArray[8]); + driversLicense.setEyeColor(licenseDataArray[9]); + driversLicense.setHeight(licenseDataArray[10]); + driversLicense.setOrganDonor(licenseDataArray[11]); + driversLicense.setLicenseClass(licenseDataArray[12]); + + returnList.add(driversLicense); + line = bufferedReader.readLine(); + } + } catch (IOException e) { + e.printStackTrace(); + System.out.println("Error occurred while processing the CSV file"); + } + return returnList; + + } + +} diff --git a/src/test/java/com/zipcode/stringslab/DriversLicenseTest.java b/src/test/java/com/zipcode/stringslab/DriversLicenseTest.java new file mode 100644 index 0000000..ffb55f1 --- /dev/null +++ b/src/test/java/com/zipcode/stringslab/DriversLicenseTest.java @@ -0,0 +1,91 @@ +package com.zipcode.stringslab; + +import org.junit.Assert; +import org.junit.Test; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * Created by vidyachandasekhar on 5/21/17. + */ +public class DriversLicenseTest { + + private static DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); + @Test + public void serializeToCSV() throws Exception { + //given (we create an instance of the DriversLicense class with all the fields,and this method is supposed + //to return all the fields in VSV format. + + DriversLicense dl = new DriversLicense(); + + dl.setLastName("Reeves"); + dl.setFirstName("Keanu"); + dl.setAddress("876 Zion Dr"); + dl.setState("NY"); + dl.setLicenseNumber("L234252352391"); + dl.setDateOfBirth("6/6/1955"); + dl.setDateOfIssue("6/9/2005"); + dl.setDateOfExpiry("6/9/2010"); + dl.setGender("M"); + dl.setEyeColor("GRN"); + dl.setHeight("5'11"); + dl.setOrganDonor("YES"); + dl.setLicenseClass("D"); + + //when + String expected= "Reeves,Keanu,876 Zion Dr,NY,L234252352391,6/6/1955,6/9/2005,6/9/2010,M,GRN,5'11,YES,D"; + + //then + Assert.assertEquals("Both strings are matching ",expected,dl.serializeToCSV()); + } + + @Test + public void getCSVHeader() throws Exception { + //given(as this is a Static method, we are creating a new instance of the main class) + + //when + String actual ="LAST_NAME,FIRST_NAME,ADDRESS,STATE,LICENSE_NUMBER,DATE_OF_BIRTH,DATE_OF_ISSUE,DATE_OF_EXPIRY," + + "GENDER,EYES_COLOR,HEIGHT,ORGAN_DONOR,LICENSE_CLASS"; + //then + Assert.assertEquals("Both strings are matching ",DriversLicense.getCSVHeader(), actual); + } + + @Test + public void deserializeFromCSV() throws Exception { + //given + DriversLicense driversLicense = new DriversLicense(); + //when + String csvString = "LAST_NAME,FIRST_NAME,ADDRESS,STATE,LICENSE_NUMBER,DATE_OF_BIRTH,DATE_OF_ISSUE,DATE_OF_EXPIRY," + + "GENDER,EYES_COLOR,HEIGHT,ORGAN_DONOR,LICENSE_CLASS\n" + + "Cage,Nick,362 Fancy St,CA,L809239899490,02/02/1970,02/02/2000,02/02/2006,M,BRO,6'0\",YES,D\n" + +"Zach,Leon,1234 BadAtSmash Ln,DE,L101234107890,1/2/3456,3/3/2000,5/19/2107,M,BRO,4'3,NO,D\n" + +"Utah,Johnny,932 PointBreak Rd,CA,L223523438497,2/5/1988,4/4/2000,4/4/2010,M,BRO,5'11,NO,D\n"; + List returnList = driversLicense.deserializeFromCSV(csvString); + + + //then + Assert.assertNotNull(returnList); + Assert.assertEquals(3, returnList.size()); + + DriversLicense dl1 = returnList.get(0); + Assert.assertEquals("Cage", dl1.getLastName()); + Assert.assertEquals("Nick", dl1.getFirstName()); + Assert.assertEquals("362 Fancy St", dl1.getAddress()); + Assert.assertEquals("CA", dl1.getState()); + Assert.assertEquals("L809239899490", dl1.getLicenseNumber()); + Assert.assertEquals("02/02/1970", dl1.getDateOfBirth()); + Assert.assertEquals("02/02/2000", dl1.getDateOfIssue()); + Assert.assertEquals("02/02/2006", dl1.getDateOfExpiry()); + Assert.assertEquals("M", dl1.getGender()); + Assert.assertEquals("BRO", dl1.getEyeColor()); + Assert.assertEquals("6'0\"", dl1.getHeight()); + Assert.assertEquals("YES", dl1.getOrganDonor()); + Assert.assertEquals("D", dl1.getLicenseClass()); + + + } + +} \ No newline at end of file From f8922ad743d2b5c0ea490a206341e6f961e882ec Mon Sep 17 00:00:00 2001 From: vidyachandasekhar Date: Sun, 21 May 2017 16:03:17 -0400 Subject: [PATCH 2/2] Completed Part-2 --- .../zipcode/stringslab/DriversLicense.java | 41 ++++++++++- .../stringslab/DriversLicenseTest.java | 70 +++++++++++++++++-- 2 files changed, 104 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/zipcode/stringslab/DriversLicense.java b/src/main/java/com/zipcode/stringslab/DriversLicense.java index b1e91ee..a0213f5 100644 --- a/src/main/java/com/zipcode/stringslab/DriversLicense.java +++ b/src/main/java/com/zipcode/stringslab/DriversLicense.java @@ -1,6 +1,10 @@ package com.zipcode.stringslab; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; @@ -188,13 +192,13 @@ public static List deserializeFromCSV(String licenseDataCSVStrin List returnList = new ArrayList<>(); try { String line = bufferedReader.readLine(); - boolean isHeader = true; + boolean isHeader = true; while (line != null) { - if (isHeader){ - isHeader=false; + if (isHeader) { + isHeader = false; line = bufferedReader.readLine(); continue; } @@ -229,5 +233,36 @@ public static List deserializeFromCSV(String licenseDataCSVStrin return returnList; } + /* + * +Part 2: Add methods for serializing to and deserializing from JSON. Once you have these methods, add new serialize + and deserialize methods that take an additional string listing the desired format (CSV or JSON) and produce + the desired result by delegating to the existing serialization and deserialization methods. These methods + should throw an appropriate exception if an unsupported format is requested. */ + + public String serializeToJSON() { + String jsonValue = null; + ObjectMapper objectMapper = new ObjectMapper(); + try { + jsonValue = objectMapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + return jsonValue; + } + + public static List deserializeFromJSON(String licenseDataJsonString) { + ObjectMapper objectMapper = new ObjectMapper(); + List listCar = null; + try { + listCar = objectMapper.readValue(licenseDataJsonString, new TypeReference>() { + }); + } catch (IOException e) { + e.printStackTrace(); + } + + return listCar; + + } } diff --git a/src/test/java/com/zipcode/stringslab/DriversLicenseTest.java b/src/test/java/com/zipcode/stringslab/DriversLicenseTest.java index ffb55f1..443bb69 100644 --- a/src/test/java/com/zipcode/stringslab/DriversLicenseTest.java +++ b/src/test/java/com/zipcode/stringslab/DriversLicenseTest.java @@ -13,9 +13,10 @@ */ public class DriversLicenseTest { + private static DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); @Test - public void serializeToCSV() throws Exception { + public void serializeToCSVTest() throws Exception { //given (we create an instance of the DriversLicense class with all the fields,and this method is supposed //to return all the fields in VSV format. @@ -43,7 +44,7 @@ public void serializeToCSV() throws Exception { } @Test - public void getCSVHeader() throws Exception { + public void getCSVHeaderTest() throws Exception { //given(as this is a Static method, we are creating a new instance of the main class) //when @@ -54,7 +55,7 @@ public void getCSVHeader() throws Exception { } @Test - public void deserializeFromCSV() throws Exception { + public void deserializeFromCSVTest() throws Exception { //given DriversLicense driversLicense = new DriversLicense(); //when @@ -88,4 +89,65 @@ public void deserializeFromCSV() throws Exception { } -} \ No newline at end of file + @Test + public void serializeToJSONTest() throws Exception { + //given (we create an instance of the DriversLicense class with all the fields,and this method is supposed + //to return all the fields in VSV format. + + DriversLicense dl = new DriversLicense(); + + dl.setLastName("Reeves"); + dl.setFirstName("Keanu"); + dl.setAddress("876 Zion Dr"); + dl.setState("NY"); + dl.setLicenseNumber("L234252352391"); + dl.setDateOfBirth("6/6/1955"); + dl.setDateOfIssue("6/9/2005"); + dl.setDateOfExpiry("6/9/2010"); + dl.setGender("M"); + dl.setEyeColor("GRN"); + dl.setHeight("5'11\""); + dl.setOrganDonor("YES"); + dl.setLicenseClass("D"); + + //when + String expected= "{\"lastName\":\"Reeves\",\"firstName\":\"Keanu\",\"address\":\"876 Zion Dr\",\"state\":\"NY\",\"licenseNumber\":\"L234252352391\",\"dateOfBirth\":\"6/6/1955\",\"dateOfIssue\":\"6/9/2005\",\"dateOfExpiry\":\"6/9/2010\",\"gender\":\"M\",\"eyeColor\":\"GRN\",\"height\":\"5'11\",\"organDonor\":\"YES\",\"licenseClass\":\"D\"}"; + + //then + Assert.assertEquals("Both strings are matching ",expected,dl.serializeToJSON()); + } + + @Test + public void deserializeFromJSONTest() throws Exception { + //given + DriversLicense driversLicense = new DriversLicense(); + + //when + + String actualJson= "[{\"lastName\":\"Reeves\",\"firstName\":\"Keanu\",\"address\":\"876 Zion Dr\",\"state\":\"NY\",\"licenseNumber\":\"L234252352391\",\"dateOfBirth\":\"6/6/1955\",\"dateOfIssue\":\"6/9/2005\",\"dateOfExpiry\":\"6/9/2010\",\"gender\":\"M\",\"eyeColor\":\"GRN\",\"height\":\"5'11\",\"organDonor\":\"YES\",\"licenseClass\":\"D\"}]"; + + List driversLicensesList= driversLicense.deserializeFromJSON(actualJson); + + + + //then + Assert.assertNotNull(driversLicensesList); + Assert.assertEquals(1,driversLicensesList.size()); + + DriversLicense dl1 = driversLicensesList.get(0); + Assert.assertEquals("Reeves", dl1.getLastName()); + Assert.assertEquals("Keanu", dl1.getFirstName()); + Assert.assertEquals("876 Zion Dr", dl1.getAddress()); + Assert.assertEquals("NY", dl1.getState()); + Assert.assertEquals("L234252352391", dl1.getLicenseNumber()); + Assert.assertEquals("6/6/1955", dl1.getDateOfBirth()); + Assert.assertEquals("6/9/2005", dl1.getDateOfIssue()); + Assert.assertEquals("6/9/2010", dl1.getDateOfExpiry()); + Assert.assertEquals("M", dl1.getGender()); + Assert.assertEquals("GRN", dl1.getEyeColor()); + Assert.assertEquals("5'11", dl1.getHeight()); + Assert.assertEquals("YES", dl1.getOrganDonor()); + Assert.assertEquals("D", dl1.getLicenseClass()); + } +} +