/* This file is part of VoltDB.
* Copyright (C) 2008-2017 VoltDB Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
package bankoffers;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Random;
public class PersonGenerator {
public class Person {
String firstname;
String lastname;
String sex;
String state;
String phonenumber;
Date dob;
}
private static Random rand = new Random();
private String[] firstnames;
private String[] lastnames;
private static final String[] sexes = {"M","F"};
// for generating DOB
private static final long startDate = Timestamp.valueOf("1910-01-01 00:00:00").getTime();
private static final long endDate = System.currentTimeMillis();
private static final long diff = endDate - startDate + 1;
private Calendar cal = Calendar.getInstance();
public static final short[] areaCodes = new short[]{
907,205,256,334,251,870,501,479,480,602,623,928,520,341,764,628,831,925,
909,562,661,510,650,949,760,415,951,209,669,408,559,626,442,530,916,627,
714,707,310,323,213,424,747,818,858,935,619,805,369,720,303,970,719,860,
203,959,475,202,302,689,407,239,850,727,321,754,954,927,352,863,386,904,
561,772,786,305,941,813,478,770,470,404,762,706,678,912,229,808,515,319,
563,641,712,208,217,872,312,773,464,708,224,847,779,815,618,309,331,630,
317,765,574,260,219,812,913,785,316,620,606,859,502,270,504,985,225,318,
337,774,508,339,781,857,617,978,351,413,443,410,301,240,207,517,810,278,
679,313,586,947,248,734,269,989,906,616,231,612,320,651,763,952,218,507,
636,660,975,816,573,314,557,417,769,601,662,228,406,336,252,984,919,980,
910,828,704,701,402,308,603,908,848,732,551,201,862,973,609,856,575,957,
505,775,702,315,518,646,347,212,718,516,917,845,631,716,585,607,914,216,
330,234,567,419,440,380,740,614,283,513,937,918,580,405,503,541,971,814,
717,570,878,835,484,610,267,215,724,412,401,843,864,803,605,423,865,931,
615,901,731,254,325,713,940,817,430,903,806,737,512,361,210,979,936,409,
972,469,214,682,832,281,830,956,432,915,435,801,385,434,804,757,703,571,
276,236,540,802,509,360,564,206,425,253,715,920,262,414,608,304,307};
public static final String[] states = new String[] {
"AK","AL","AL","AL","AL","AR","AR","AR","AZ","AZ","AZ","AZ","AZ","CA","CA",
"CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA",
"CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA",
"CA","CA","CA","CA","CO","CO","CO","CO","CT","CT","CT","CT","DC","DE","FL",
"FL","FL","FL","FL","FL","FL","FL","FL","FL","FL","FL","FL","FL","FL","FL",
"FL","FL","FL","GA","GA","GA","GA","GA","GA","GA","GA","GA","HI","IA","IA",
"IA","IA","IA","ID","IL","IL","IL","IL","IL","IL","IL","IL","IL","IL","IL",
"IL","IL","IL","IN","IN","IN","IN","IN","IN","KS","KS","KS","KS","KY","KY",
"KY","KY","LA","LA","LA","LA","LA","MA","MA","MA","MA","MA","MA","MA","MA",
"MA","MD","MD","MD","MD","ME","MI","MI","MI","MI","MI","MI","MI","MI","MI",
"MI","MI","MI","MI","MI","MN","MN","MN","MN","MN","MN","MN","MO","MO","MO",
"MO","MO","MO","MO","MO","MS","MS","MS","MS","MT","NC","NC","NC","NC","NC",
"NC","NC","NC","ND","NE","NE","NH","NJ","NJ","NJ","NJ","NJ","NJ","NJ","NJ",
"NJ","NM","NM","NM","NV","NV","NY","NY","NY","NY","NY","NY","NY","NY","NY",
"NY","NY","NY","NY","NY","OH","OH","OH","OH","OH","OH","OH","OH","OH","OH",
"OH","OH","OK","OK","OK","OR","OR","OR","PA","PA","PA","PA","PA","PA","PA",
"PA","PA","PA","PA","RI","SC","SC","SC","SD","TN","TN","TN","TN","TN","TN",
"TX","TX","TX","TX","TX","TX","TX","TX","TX","TX","TX","TX","TX","TX","TX",
"TX","TX","TX","TX","TX","TX","TX","TX","TX","TX","UT","UT","UT","VA","VA",
"VA","VA","VA","VA","VA","VA","VT","WA","WA","WA","WA","WA","WA","WI","WI",
"WI","WI","WI","WV","WY"};
// constructors
public PersonGenerator() {
this("data/firstnames.csv","data/lastnames.csv");
}
public PersonGenerator(String firstnamesFile, String lastnamesFile) {
firstnames = fileToStringArray(firstnamesFile);
lastnames = fileToStringArray(lastnamesFile);
}
// generate a random person
public Person newPerson() {
Person p = new Person();
p.firstname = firstnames[rand.nextInt(firstnames.length)];
p.lastname = lastnames[rand.nextInt(lastnames.length)];
p.sex = sexes[rand.nextInt(2)];
p.dob = randomDOB();
// state and area code match
int i = rand.nextInt(areaCodes.length);
p.phonenumber = randomPhone(areaCodes[i]);
p.state = states[i];
return p;
}
public Date randomDOB() {
long someTime = startDate + (long)(Math.random() * diff);
cal.setTimeInMillis(someTime);
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);
return cal.getTime();
}
public static String randomPhone(int areaCode) {
int num2 = rand.nextInt(743);
int num3 = rand.nextInt(10000);
DecimalFormat df3 = new DecimalFormat("000"); // 3 digits with leading zeros
DecimalFormat df4 = new DecimalFormat("0000"); // 4 digits with leading zeros
return df3.format(areaCode) + "-" + df3.format(num2) + "-" + df4.format(num3);
}
public static String randomState() {
return states[rand.nextInt(states.length)];
}
public static String[] fileToStringArray(String filename) {
List<String> lines = new ArrayList<String>();
try {
FileReader fileReader = new FileReader(filename);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
lines.add(line);
}
bufferedReader.close();
System.out.println("loaded " + lines.size() + " lines from " + filename);
} catch (IOException e) {
e.printStackTrace();
}
return lines.toArray(new String[lines.size()]);
}
}