Skip to content

String lab PR. #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Intellij
.idea/
*.iml
*.iws

# Mac
.DS_Store

# Maven
log/
target/
25 changes: 25 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>zygmundfelt.dan.mesolabstrings</groupId>
<artifactId>mesolabstrings</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>mesolabstrings</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
52 changes: 52 additions & 0 deletions src/main/java/zygmundfelt/dan/mesolabstrings/Address.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package zygmundfelt.dan.mesolabstrings;

import java.io.IOException;

public final class FormatNotAcceptedException extends IOException {
}
43 changes: 43 additions & 0 deletions src/main/java/zygmundfelt/dan/mesolabstrings/Name.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
203 changes: 203 additions & 0 deletions src/main/java/zygmundfelt/dan/mesolabstrings/PADriversLicense.java
Original file line number Diff line number Diff line change
@@ -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<PADriversLicense> deserializeFromCSV(String string) {
List<PADriversLicense> list = new ArrayList<PADriversLicense>();
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<PADriversLicense> 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<String> splitToIndividualRecords(String string) {
Pattern pattern = Pattern.compile("\\{(\\s)+(\"[a-zA-Z0-9]+\": (\"([a-zA-Z0-9/' ]+)\"|\"\"),?\\s+)+}");
Matcher m = pattern.matcher(string);
ArrayList<String> matches = new ArrayList<String>();
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<PADriversLicense> deserializeFromJSON(String string) {
List<PADriversLicense> list = new ArrayList<PADriversLicense>();
List<String> stringList = splitToIndividualRecords(string);
for(String record : stringList) {
String[] fieldArray = individualRecordToArray(record);
list.add(new PADriversLicense(fieldArray));
}
return list;
}

public static String serializeToJSON(List<PADriversLicense> 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<PADriversLicense> 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();
}
}

}
26 changes: 26 additions & 0 deletions src/test/java/zygmundfelt/dan/mesolabstrings/TestAddress.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Loading