You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2016/10/15 18:01:55 UTC
[1/8] asterixdb git commit: Move Twitter Firehose Datasource to Test
Source Folder
Repository: asterixdb
Updated Branches:
refs/heads/master 9ddf5e071 -> cb92dad73
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/TweetGeneratorForSpatialIndexEvaluation.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/TweetGeneratorForSpatialIndexEvaluation.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/TweetGeneratorForSpatialIndexEvaluation.java
new file mode 100644
index 0000000..fcaa2a4
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/TweetGeneratorForSpatialIndexEvaluation.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.tools.external.data;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.asterix.tools.external.data.DataGeneratorForSpatialIndexEvaluation.InitializationInfo;
+import org.apache.asterix.tools.external.data.DataGeneratorForSpatialIndexEvaluation.TweetMessage;
+import org.apache.asterix.tools.external.data.DataGeneratorForSpatialIndexEvaluation.TweetMessageIterator;
+
+public class TweetGeneratorForSpatialIndexEvaluation {
+
+ private static Logger LOGGER = Logger.getLogger(TweetGeneratorForSpatialIndexEvaluation.class.getName());
+
+ public static final String KEY_DURATION = "duration";
+ public static final String KEY_TPS = "tps";
+ public static final String KEY_GUID_SEED = "guid-seed";
+ public static final String KEY_OPENSTREETMAP_FILEPATH = "open-street-map-filepath";
+ public static final String KEY_LOCATION_SAMPLE_INTERVAL = "location-sample-interval";
+
+ public static final String OUTPUT_FORMAT = "output-format";
+ public static final String OUTPUT_FORMAT_ARECORD = "arecord";
+ public static final String OUTPUT_FORMAT_ADM_STRING = "adm-string";
+
+ private static final int DEFAULT_DURATION = 60; //seconds
+ private static final int DEFAULT_GUID_SEED = 0;
+ private static final int DEFAULT_SAMPLE_INTERVAL = 1;
+
+ private int duration;
+ private TweetMessageIterator tweetIterator = null;
+ private int partition;
+ private int tweetCount = 0;
+ private int frameTweetCount = 0;
+ private int numFlushedTweets = 0;
+ private OutputStream os;
+ private DataGeneratorForSpatialIndexEvaluation dataGenerator = null;
+ private ByteBuffer outputBuffer = ByteBuffer.allocate(32 * 1024);
+ private GULongIDGenerator uidGenerator;
+ private String openStreetMapFilePath;
+ private int locationSampleInterval;
+
+ public int getTweetCount() {
+ return tweetCount;
+ }
+
+ public TweetGeneratorForSpatialIndexEvaluation(Map<String, String> configuration, int partition, String format,
+ OutputStream os) throws Exception {
+ this.partition = partition;
+ String value = configuration.get(KEY_DURATION);
+ this.duration = value != null ? Integer.parseInt(value) : DEFAULT_DURATION;
+ openStreetMapFilePath = configuration.get(KEY_OPENSTREETMAP_FILEPATH);
+ String lsi = configuration.get(KEY_LOCATION_SAMPLE_INTERVAL);
+ this.locationSampleInterval = lsi != null ? Integer.parseInt(lsi) : DEFAULT_SAMPLE_INTERVAL;
+ int guidSeed = configuration.get(KEY_GUID_SEED) != null ? Integer.parseInt(configuration.get(KEY_GUID_SEED))
+ : DEFAULT_GUID_SEED;
+ uidGenerator = new GULongIDGenerator(partition, (byte) (guidSeed));
+ dataGenerator = new DataGeneratorForSpatialIndexEvaluation(new InitializationInfo(), openStreetMapFilePath,
+ locationSampleInterval);
+ tweetIterator = dataGenerator.new TweetMessageIterator(duration, uidGenerator);
+ this.os = os;
+ }
+
+ private void writeTweetString(TweetMessage tweetMessage) throws IOException {
+ String tweet = tweetMessage.toString() + "\n";
+ tweetCount++;
+ byte[] b = tweet.getBytes();
+ if (outputBuffer.position() + b.length > outputBuffer.limit()) {
+ flush();
+ numFlushedTweets += frameTweetCount;
+ frameTweetCount = 0;
+ outputBuffer.put(b);
+ } else {
+ outputBuffer.put(b);
+ }
+ frameTweetCount++;
+ }
+
+ public int getNumFlushedTweets() {
+ return numFlushedTweets;
+ }
+
+ private void flush() throws IOException {
+ outputBuffer.flip();
+ os.write(outputBuffer.array(), 0, outputBuffer.limit());
+ outputBuffer.position(0);
+ outputBuffer.limit(32 * 1024);
+ }
+
+ public boolean setNextRecordBatch(int numTweetsInBatch) throws Exception {
+ boolean moreData = tweetIterator.hasNext();
+ if (!moreData) {
+ if (outputBuffer.position() > 0) {
+ flush();
+ numFlushedTweets += frameTweetCount;
+ frameTweetCount = 0;
+ }
+ if (LOGGER.isLoggable(Level.INFO)) {
+ LOGGER.info("Reached end of batch. Tweet Count: [" + partition + "]" + tweetCount);
+ }
+ return false;
+ } else {
+ int count = 0;
+ while (count < numTweetsInBatch) {
+ writeTweetString(tweetIterator.next());
+ count++;
+ }
+ return true;
+ }
+ }
+
+ public void resetDurationAndFlushedTweetCount(int duration) {
+ tweetIterator.resetDuration(duration);
+ numFlushedTweets = 0;
+ tweetCount = 0;
+
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/tbltoadm/TblToAdm.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/tbltoadm/TblToAdm.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/tbltoadm/TblToAdm.java
new file mode 100644
index 0000000..26656f6
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/tbltoadm/TblToAdm.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.tools.tbltoadm;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class TblToAdm {
+
+ private static final String SEPARATOR_STRING = "\\|\\s*";
+ private static final char SEPARATOR_CHAR = '|';
+
+ private static void convertFile(String inputFileName, String outputFileName, String scmFileName) throws IOException {
+ File scmFile = new File(scmFileName);
+ File inFile = new File(inputFileName);
+ File outFile = new File(outputFileName);
+
+ BufferedReader scmReader = new BufferedReader(new FileReader(scmFile));
+ String scmStr = scmReader.readLine();
+ String[] fieldInfo = scmStr.split(SEPARATOR_STRING);
+ String[] fieldNames = new String[fieldInfo.length];
+ boolean[] fieldIsString = new boolean[fieldInfo.length];
+ for (int i = 0; i < fieldInfo.length; i++) {
+ String[] f = fieldInfo[i].split(":\\s*");
+ fieldNames[i] = f[0];
+ fieldIsString[i] = f[1].equals("string");
+ }
+ scmReader.close();
+
+ BufferedReader reader = new BufferedReader(new FileReader(inFile));
+ PrintWriter writer = new PrintWriter(outFile);
+ String row;
+ while ((row = reader.readLine()) != null) {
+ // String[] fields = row.split(SEPARATOR);
+ if (row.length() == 0 || row.charAt(0) == ' ' || row.charAt(0) == '\n') {
+ continue;
+ }
+ writer.write("{ ");
+ int pos = 0;
+ int strlen = row.length();
+ for (int i = 0; i < fieldNames.length; i++) {
+ if (i > 0) {
+ writer.write(", ");
+ }
+ writer.print('"');
+ writer.write(fieldNames[i]);
+ writer.write("\": ");
+ if (fieldIsString[i]) {
+ writer.print('"');
+ }
+ for (; pos < strlen; pos++) {
+ char c = row.charAt(pos);
+ if (c != SEPARATOR_CHAR) {
+ writer.print(c);
+
+ } else {
+ ++pos;
+ break;
+ }
+ }
+ if (fieldIsString[i]) {
+ writer.print('"');
+ }
+ }
+ writer.write(" }\n");
+ }
+ writer.close();
+ reader.close();
+ }
+
+ public static void main(String args[]) throws Exception {
+ if (args.length != 3) {
+ System.err.println("Usage: bash tbl2adm <srcfile.tbl> <destfile.adm> <schema-file>");
+ return;
+ }
+ convertFile(args[0], args[1], args[2]);
+ }
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/translator/ADGenDmlTranslator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/translator/ADGenDmlTranslator.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/translator/ADGenDmlTranslator.java
new file mode 100644
index 0000000..a525b1b
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/translator/ADGenDmlTranslator.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.tools.translator;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.asterix.common.annotations.TypeDataGen;
+import org.apache.asterix.common.exceptions.AsterixException;
+import org.apache.asterix.lang.common.base.Statement;
+import org.apache.asterix.lang.common.statement.DataverseDecl;
+import org.apache.asterix.lang.common.statement.TypeDecl;
+import org.apache.asterix.metadata.MetadataException;
+import org.apache.asterix.metadata.MetadataTransactionContext;
+import org.apache.asterix.om.types.IAType;
+import org.apache.asterix.om.types.TypeSignature;
+import org.apache.asterix.translator.AbstractLangTranslator;
+import org.apache.asterix.translator.TypeTranslator;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+
+public class ADGenDmlTranslator extends AbstractLangTranslator {
+
+ private final MetadataTransactionContext mdTxnCtx;
+ private final List<Statement> aqlStatements;
+ private Map<TypeSignature, IAType> types;
+ private Map<TypeSignature, TypeDataGen> typeDataGenMap;
+
+ public ADGenDmlTranslator(MetadataTransactionContext mdTxnCtx, List<Statement> aqlStatements) {
+ this.mdTxnCtx = mdTxnCtx;
+ this.aqlStatements = aqlStatements;
+ }
+
+ public void translate() throws AsterixException, MetadataException, AlgebricksException {
+ String defaultDataverse = getDefaultDataverse();
+ types = new HashMap<TypeSignature, IAType>();
+ typeDataGenMap = new HashMap<TypeSignature, TypeDataGen>();
+
+ for (Statement stmt : aqlStatements) {
+ if (stmt.getKind() == Statement.Kind.TYPE_DECL) {
+ TypeDecl td = (TypeDecl) stmt;
+ String typeDataverse =
+ td.getDataverseName() == null ? defaultDataverse : td.getDataverseName().getValue();
+
+ Map<TypeSignature, IAType> typeInStmt = TypeTranslator.computeTypes(mdTxnCtx, td.getTypeDef(),
+ td.getIdent().getValue(), typeDataverse, types);
+ types.putAll(typeInStmt);
+
+ TypeSignature signature = new TypeSignature(typeDataverse, td.getIdent().getValue());
+ TypeDataGen tdg = td.getDatagenAnnotation();
+ if (tdg != null) {
+ typeDataGenMap.put(signature, tdg);
+ }
+ }
+ }
+ }
+
+ private String getDefaultDataverse() {
+ for (Statement stmt : aqlStatements) {
+ if (stmt.getKind() == Statement.Kind.DATAVERSE_DECL) {
+ return ((DataverseDecl) stmt).getDataverseName().getValue();
+ }
+ }
+ return null;
+ }
+
+ public Map<TypeSignature, IAType> getTypeMap() {
+ return types;
+ }
+
+ public Map<TypeSignature, TypeDataGen> getTypeDataGenMap() {
+ return typeDataGenMap;
+ }
+
+}
[2/8] asterixdb git commit: Move Twitter Firehose Datasource to Test
Source Folder
Posted by mb...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/DataGeneratorForSpatialIndexEvaluation.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/DataGeneratorForSpatialIndexEvaluation.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/DataGeneratorForSpatialIndexEvaluation.java
new file mode 100644
index 0000000..763a4ae
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/DataGeneratorForSpatialIndexEvaluation.java
@@ -0,0 +1,1341 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.tools.external.data;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.CharBuffer;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+
+import org.apache.asterix.external.generator.DataGenerator;
+
+public class DataGeneratorForSpatialIndexEvaluation {
+
+ private static final String DUMMY_SIZE_ADJUSTER = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+
+ private RandomDateGenerator randDateGen;
+
+ private RandomNameGenerator randNameGen;
+
+ private RandomMessageGenerator randMessageGen;
+
+ private RandomLocationGenerator randLocationGen;
+
+ private LocationGeneratorFromOpenStreetMapData locationGenFromOpenStreetMapData;
+
+ private Random random = new Random();
+
+ private TwitterUser twUser = new TwitterUser();
+
+ private TweetMessage twMessage = new TweetMessage();
+
+ public DataGeneratorForSpatialIndexEvaluation(InitializationInfo info) {
+ initialize(info, null, 0);
+ }
+
+ public DataGeneratorForSpatialIndexEvaluation(InitializationInfo info, String openStreetMapFilePath,
+ int locationSampleInterval) {
+ initialize(info, openStreetMapFilePath, locationSampleInterval);
+ }
+
+ public class TweetMessageIterator implements Iterator<TweetMessage> {
+
+ private int duration;
+ private final GULongIDGenerator idGen;
+ private long startTime = 0;
+
+ public TweetMessageIterator(int duration, GULongIDGenerator idGen) {
+ this.duration = duration;
+ this.idGen = idGen;
+ this.startTime = System.currentTimeMillis();
+ }
+
+ @Override
+ public boolean hasNext() {
+ if (duration == 0) {
+ return true;
+ }
+ return System.currentTimeMillis() - startTime <= duration * 1000;
+ }
+
+ @Override
+ public TweetMessage next() {
+ TweetMessage msg = null;
+ getTwitterUser(null);
+ Message message = randMessageGen.getNextRandomMessage();
+ Point location = randLocationGen != null ? randLocationGen.getRandomPoint()
+ : locationGenFromOpenStreetMapData.getNextPoint();
+ DateTime sendTime = randDateGen.getNextRandomDatetime();
+ int btreeExtraFieldKey = random.nextInt();
+ if (btreeExtraFieldKey == Integer.MIN_VALUE) {
+ btreeExtraFieldKey = Integer.MIN_VALUE + 1;
+ }
+ twMessage.reset(idGen.getNextULong(), twUser, location, sendTime, message.getReferredTopics(), message,
+ btreeExtraFieldKey, DUMMY_SIZE_ADJUSTER);
+ msg = twMessage;
+ return msg;
+ }
+
+ @Override
+ public void remove() {
+ // TODO Auto-generated method stub
+ }
+
+ public void resetDuration(int duration) {
+ this.duration = duration;
+ startTime = System.currentTimeMillis();
+ }
+
+ }
+
+ public static class InitializationInfo {
+ public Date startDate = new Date(1, 1, 2005);
+ public Date endDate = new Date(8, 20, 2012);
+ public String[] lastNames = DataGenerator.lastNames;
+ public String[] firstNames = DataGenerator.firstNames;
+ public String[] vendors = DataGenerator.vendors;
+ public String[] jargon = DataGenerator.jargon;
+ public String[] org_list = DataGenerator.org_list;
+ }
+
+ public void initialize(InitializationInfo info, String openStreetMapFilePath, int locationSampleInterval) {
+ randDateGen = new RandomDateGenerator(info.startDate, info.endDate);
+ randNameGen = new RandomNameGenerator(info.firstNames, info.lastNames);
+ if (openStreetMapFilePath == null) {
+ randLocationGen = new RandomLocationGenerator(24, 49, 66, 98);
+ locationGenFromOpenStreetMapData = null;
+ } else {
+ locationGenFromOpenStreetMapData = new LocationGeneratorFromOpenStreetMapData();
+ locationGenFromOpenStreetMapData.intialize(openStreetMapFilePath, locationSampleInterval);
+ randLocationGen = null;
+ }
+ randMessageGen = new RandomMessageGenerator(info.vendors, info.jargon);
+ }
+
+ public void getTwitterUser(String usernameSuffix) {
+ String suggestedName = randNameGen.getRandomName();
+ String[] nameComponents = suggestedName.split(" ");
+ String screenName = nameComponents[0] + nameComponents[1] + randNameGen.getRandomNameSuffix();
+ String name = suggestedName;
+ if (usernameSuffix != null) {
+ name = name + usernameSuffix;
+ }
+ int numFriends = random.nextInt((100)); // draw from Zipfian
+ int statusesCount = random.nextInt(500); // draw from Zipfian
+ int followersCount = random.nextInt((200));
+ twUser.reset(screenName, numFriends, statusesCount, name, followersCount);
+ }
+
+ public static class RandomDateGenerator {
+
+ private final Date startDate;
+ private final Date endDate;
+ private final Random random = new Random();
+ private final int yearDifference;
+ private Date workingDate;
+ private Date recentDate;
+ private DateTime dateTime;
+
+ public RandomDateGenerator(Date startDate, Date endDate) {
+ this.startDate = startDate;
+ this.endDate = endDate;
+ this.yearDifference = endDate.getYear() - startDate.getYear() + 1;
+ this.workingDate = new Date();
+ this.recentDate = new Date();
+ this.dateTime = new DateTime();
+ }
+
+ public Date getStartDate() {
+ return startDate;
+ }
+
+ public Date getEndDate() {
+ return endDate;
+ }
+
+ public Date getNextRandomDate() {
+ int year = random.nextInt(yearDifference) + startDate.getYear();
+ int month;
+ int day;
+ if (year == endDate.getYear()) {
+ month = random.nextInt(endDate.getMonth()) + 1;
+ if (month == endDate.getMonth()) {
+ day = random.nextInt(endDate.getDay()) + 1;
+ } else {
+ day = random.nextInt(28) + 1;
+ }
+ } else {
+ month = random.nextInt(12) + 1;
+ day = random.nextInt(28) + 1;
+ }
+ workingDate.reset(month, day, year);
+ return workingDate;
+ }
+
+ public DateTime getNextRandomDatetime() {
+ Date randomDate = getNextRandomDate();
+ dateTime.reset(randomDate);
+ return dateTime;
+ }
+
+ public Date getNextRecentDate(Date date) {
+ int year = date.getYear()
+ + (date.getYear() == endDate.getYear() ? 0 : random.nextInt(endDate.getYear() - date.getYear()));
+ int month = (year == endDate.getYear())
+ ? date.getMonth() == endDate.getMonth() ? (endDate.getMonth())
+ : (date.getMonth() + random.nextInt(endDate.getMonth() - date.getMonth()))
+ : random.nextInt(12) + 1;
+
+ int day = (year == endDate.getYear())
+ ? month == endDate.getMonth()
+ ? date.getDay() == endDate.getDay() ? endDate.getDay()
+ : date.getDay() + random.nextInt(endDate.getDay() - date.getDay())
+ : random.nextInt(28) + 1
+ : random.nextInt(28) + 1;
+ recentDate.reset(month, day, year);
+ return recentDate;
+ }
+
+ }
+
+ public static class DateTime extends Date {
+
+ private String hour = "10";
+ private String min = "10";
+ private String sec = "00";
+
+ public DateTime(int month, int day, int year, String hour, String min, String sec) {
+ super(month, day, year);
+ this.hour = hour;
+ this.min = min;
+ this.sec = sec;
+ }
+
+ public DateTime() {
+ }
+
+ public void reset(int month, int day, int year, String hour, String min, String sec) {
+ super.setDay(month);
+ super.setDay(day);
+ super.setYear(year);
+ this.hour = hour;
+ this.min = min;
+ this.sec = sec;
+ }
+
+ public DateTime(Date date) {
+ super(date.getMonth(), date.getDay(), date.getYear());
+ }
+
+ public void reset(Date date) {
+ reset(date.getMonth(), date.getDay(), date.getYear());
+ }
+
+ public DateTime(Date date, int hour, int min, int sec) {
+ super(date.getMonth(), date.getDay(), date.getYear());
+ this.hour = (hour < 10) ? "0" : "" + hour;
+ this.min = (min < 10) ? "0" : "" + min;
+ this.sec = (sec < 10) ? "0" : "" + sec;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("datetime");
+ builder.append("(\"");
+ builder.append(super.getYear());
+ builder.append("-");
+ builder.append(super.getMonth() < 10 ? "0" + super.getMonth() : super.getMonth());
+ builder.append("-");
+ builder.append(super.getDay() < 10 ? "0" + super.getDay() : super.getDay());
+ builder.append("T");
+ builder.append(hour + ":" + min + ":" + sec);
+ builder.append("\")");
+ return builder.toString();
+ }
+ }
+
+ public static class Message {
+
+ private char[] message = new char[500];
+ private List<String> referredTopics;
+ private int length;
+
+ public Message(char[] m, List<String> referredTopics) {
+ System.arraycopy(m, 0, message, 0, m.length);
+ length = m.length;
+ this.referredTopics = referredTopics;
+ }
+
+ public Message() {
+ referredTopics = new ArrayList<String>();
+ length = 0;
+ }
+
+ public List<String> getReferredTopics() {
+ return referredTopics;
+ }
+
+ public void reset(char[] m, int offset, int length, List<String> referredTopics) {
+ System.arraycopy(m, offset, message, 0, length);
+ this.length = length;
+ this.referredTopics = referredTopics;
+ }
+
+ public int getLength() {
+ return length;
+ }
+
+ public char charAt(int index) {
+ return message[index];
+ }
+
+ }
+
+ public static class Point {
+
+ private float latitude;
+ private float longitude;
+
+ public float getLatitude() {
+ return latitude;
+ }
+
+ public float getLongitude() {
+ return longitude;
+ }
+
+ public Point(float latitude, float longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ public void reset(float latitude, float longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ public Point() {
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("point(\"" + latitude + "," + longitude + "\")");
+ return builder.toString();
+ }
+ }
+
+ public static class RandomNameGenerator {
+
+ private String[] firstNames;
+ private String[] lastNames;
+
+ private final Random random = new Random();
+
+ private final String[] connectors = new String[] { "_", "#", "$", "@" };
+
+ public RandomNameGenerator(String[] firstNames, String[] lastNames) {
+ this.firstNames = firstNames;
+ this.lastNames = lastNames;
+ }
+
+ public String getRandomName() {
+ String name;
+ name = getSuggestedName();
+ return name;
+
+ }
+
+ private String getSuggestedName() {
+ int firstNameIndex = random.nextInt(firstNames.length);
+ int lastNameIndex = random.nextInt(lastNames.length);
+ String suggestedName = firstNames[firstNameIndex] + " " + lastNames[lastNameIndex];
+ return suggestedName;
+ }
+
+ public String getRandomNameSuffix() {
+ return connectors[random.nextInt(connectors.length)] + random.nextInt(1000);
+ }
+ }
+
+ public static class RandomMessageGenerator {
+
+ private final MessageTemplate messageTemplate;
+
+ public RandomMessageGenerator(String[] vendors, String[] jargon) {
+ List<String> vendorList = new ArrayList<String>();
+ for (String v : vendors) {
+ vendorList.add(v);
+ }
+ List<String> jargonList = new ArrayList<String>();
+ for (String j : jargon) {
+ jargonList.add(j);
+ }
+ this.messageTemplate = new MessageTemplate(vendorList, jargonList);
+ }
+
+ public Message getNextRandomMessage() {
+ return messageTemplate.getNextMessage();
+ }
+ }
+
+ public static class AbstractMessageTemplate {
+
+ protected final Random random = new Random();
+
+ protected String[] positiveVerbs = new String[] { "like", "love" };
+ protected String[] negativeVerbs = new String[] { "dislike", "hate", "can't stand" };
+
+ protected String[] negativeAdjectives = new String[] { "horrible", "bad", "terrible", "OMG" };
+ protected String[] postiveAdjectives = new String[] { "good", "awesome", "amazing", "mind-blowing" };
+
+ protected String[] otherWords = new String[] { "the", "its" };
+ }
+
+ public static class MessageTemplate extends AbstractMessageTemplate {
+
+ private List<String> vendors;
+ private List<String> jargon;
+ private CharBuffer buffer;
+ private List<String> referredTopics;
+ private Message message = new Message();
+
+ public MessageTemplate(List<String> vendors, List<String> jargon) {
+ this.vendors = vendors;
+ this.jargon = jargon;
+ buffer = CharBuffer.allocate(2500);
+ referredTopics = new ArrayList<String>();
+ }
+
+ public Message getNextMessage() {
+ buffer.position(0);
+ buffer.limit(2500);
+ referredTopics.clear();
+ boolean isPositive = random.nextBoolean();
+ String[] verbArray = isPositive ? positiveVerbs : negativeVerbs;
+ String[] adjectiveArray = isPositive ? postiveAdjectives : negativeAdjectives;
+ String verb = verbArray[random.nextInt(verbArray.length)];
+ String adjective = adjectiveArray[random.nextInt(adjectiveArray.length)];
+
+ buffer.put(" ");
+ buffer.put(verb);
+ buffer.put(" ");
+ String vendor = vendors.get(random.nextInt(vendors.size()));
+ referredTopics.add(vendor);
+ buffer.append(vendor);
+ buffer.append(" ");
+ buffer.append(otherWords[random.nextInt(otherWords.length)]);
+ buffer.append(" ");
+ String jargonTerm = jargon.get(random.nextInt(jargon.size()));
+ referredTopics.add(jargonTerm);
+ buffer.append(jargonTerm);
+ buffer.append(" is ");
+ buffer.append(adjective);
+ if (random.nextBoolean()) {
+ buffer.append(isPositive ? ":)" : ":(");
+ }
+
+ buffer.flip();
+ message.reset(buffer.array(), 0, buffer.limit(), referredTopics);
+ return message;
+ }
+ }
+
+ public static class RandomUtil {
+
+ public static Random random = new Random();
+
+ public static int[] getKFromN(int k, int n) {
+ int[] result = new int[k];
+ int cnt = 0;
+ HashSet<Integer> values = new HashSet<Integer>();
+ while (cnt < k) {
+ int val = random.nextInt(n + 1);
+ if (values.contains(val)) {
+ continue;
+ }
+
+ result[cnt++] = val;
+ values.add(val);
+ }
+ return result;
+ }
+ }
+
+ public static class RandomLocationGenerator {
+
+ private Random random = new Random();
+
+ private final int beginLat;
+ private final int endLat;
+ private final int beginLong;
+ private final int endLong;
+
+ private Point point;
+
+ public RandomLocationGenerator(int beginLat, int endLat, int beginLong, int endLong) {
+ this.beginLat = beginLat;
+ this.endLat = endLat;
+ this.beginLong = beginLong;
+ this.endLong = endLong;
+ this.point = new Point();
+ }
+
+ public Point getRandomPoint() {
+ int latMajor = beginLat + random.nextInt(endLat - beginLat);
+ int latMinor = random.nextInt(100);
+ float latitude = latMajor + ((float) latMinor) / 100;
+
+ int longMajor = beginLong + random.nextInt(endLong - beginLong);
+ int longMinor = random.nextInt(100);
+ float longitude = longMajor + ((float) longMinor) / 100;
+
+ point.reset(latitude, longitude);
+ return point;
+ }
+
+ }
+
+ public static class LocationGeneratorFromOpenStreetMapData {
+ /**
+ * the source of gps data:
+ * https://blog.openstreetmap.org/2012/04/01/bulk-gps-point-data/
+ */
+ private String openStreetMapFilePath;
+ private long sampleInterval;
+ private long lineCount = 0;
+ private BufferedReader br;
+ private String line;
+ private String strPoints[] = null;
+ private StringBuilder sb = new StringBuilder();
+ private Point point = new Point();
+ private float[] floatPoint = new float[2];
+
+ public void intialize(String openStreetMapFilePath, int sampleInterval) {
+ this.openStreetMapFilePath = openStreetMapFilePath;
+ this.sampleInterval = sampleInterval;
+ try {
+ br = new BufferedReader(new FileReader(openStreetMapFilePath));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ throw new IllegalStateException(e);
+ }
+ }
+
+ public Point getNextPoint() {
+ try {
+ while (true) {
+ if ((line = br.readLine()) == null) {
+ br = new BufferedReader(new FileReader(openStreetMapFilePath));
+ line = br.readLine(); //can't be null
+ }
+ if (lineCount++ % sampleInterval != 0) {
+ continue;
+ }
+ sb.setLength(0);
+ strPoints = line.split(",");
+ if (strPoints.length != 2) {
+ //ignore invalid point
+ continue;
+ } else {
+ break;
+ }
+ }
+ if (line == null) {
+ //roll over the data from the same file.
+ br.close();
+ br = null;
+ lineCount = 0;
+ br = new BufferedReader(new FileReader(openStreetMapFilePath));
+ while ((line = br.readLine()) != null) {
+ if (lineCount++ % sampleInterval != 0) {
+ continue;
+ }
+ sb.setLength(0);
+ strPoints = line.split(",");
+ if (strPoints.length != 2) {
+ //ignore invalid point
+ continue;
+ } else {
+ break;
+ }
+ }
+ }
+ floatPoint[0] = Float.parseFloat(strPoints[0]) / 10000000; //latitude (y value)
+ floatPoint[1] = Float.parseFloat(strPoints[1]) / 10000000; //longitude (x value)
+ point.reset(floatPoint[1], floatPoint[0]);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new IllegalStateException(e);
+ }
+ return point;
+ }
+
+ @Override
+ public void finalize() {
+ if (br != null) {
+ try {
+ br.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new IllegalStateException(e);
+ }
+ }
+ }
+ }
+
+ public static class TweetMessage {
+
+ private static int NUM_BTREE_EXTRA_FIELDS = 8;
+
+ private long tweetid;
+ private TwitterUser user;
+ private Point senderLocation;
+ private DateTime sendTime;
+ private List<String> referredTopics;
+ private Message messageText;
+ private int[] btreeExtraFields;
+ private String dummySizeAdjuster;
+
+ public TweetMessage() {
+ this.btreeExtraFields = new int[NUM_BTREE_EXTRA_FIELDS];
+ }
+
+ public TweetMessage(long tweetid, TwitterUser user, Point senderLocation, DateTime sendTime,
+ List<String> referredTopics, Message messageText, int btreeExtraField, String dummySizeAdjuster) {
+ this.tweetid = tweetid;
+ this.user = user;
+ this.senderLocation = senderLocation;
+ this.sendTime = sendTime;
+ this.referredTopics = referredTopics;
+ this.messageText = messageText;
+ this.btreeExtraFields = new int[NUM_BTREE_EXTRA_FIELDS];
+ setBtreeExtraFields(btreeExtraField);
+ this.dummySizeAdjuster = dummySizeAdjuster;
+ }
+
+ private void setBtreeExtraFields(int fVal) {
+ for (int i = 0; i < btreeExtraFields.length; ++i) {
+ btreeExtraFields[i] = fVal;
+ }
+ }
+
+ public void reset(long tweetid, TwitterUser user, Point senderLocation, DateTime sendTime,
+ List<String> referredTopics, Message messageText, int btreeExtraField, String dummySizeAdjuster) {
+ this.tweetid = tweetid;
+ this.user = user;
+ this.senderLocation = senderLocation;
+ this.sendTime = sendTime;
+ this.referredTopics = referredTopics;
+ this.messageText = messageText;
+ setBtreeExtraFields(btreeExtraField);
+ this.dummySizeAdjuster = dummySizeAdjuster;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("{");
+ builder.append("\"tweetid\":");
+ builder.append("int64(\"" + tweetid + "\")");
+ builder.append(",");
+ builder.append("\"user\":");
+ builder.append(user);
+ builder.append(",");
+ builder.append("\"sender-location\":");
+ builder.append(senderLocation);
+ builder.append(",");
+ builder.append("\"send-time\":");
+ builder.append(sendTime);
+ builder.append(",");
+ builder.append("\"referred-topics\":");
+ builder.append("{{");
+ for (String topic : referredTopics) {
+ builder.append("\"" + topic + "\"");
+ builder.append(",");
+ }
+ if (referredTopics.size() > 0) {
+ builder.deleteCharAt(builder.lastIndexOf(","));
+ }
+ builder.append("}}");
+ builder.append(",");
+ builder.append("\"message-text\":");
+ builder.append("\"");
+ for (int i = 0; i < messageText.getLength(); i++) {
+ builder.append(messageText.charAt(i));
+ }
+ builder.append("\"");
+ builder.append(",");
+ for (int i = 0; i < btreeExtraFields.length; ++i) {
+ builder.append("\"btree-extra-field" + (i + 1) + "\":");
+ builder.append(btreeExtraFields[i]);
+ if (i != btreeExtraFields.length - 1) {
+ builder.append(",");
+ }
+ }
+ builder.append(",");
+ builder.append("\"dummy-size-adjuster\":");
+ builder.append("\"");
+ builder.append(dummySizeAdjuster);
+ builder.append("\"");
+ builder.append("}");
+ return new String(builder);
+ }
+
+ public long getTweetid() {
+ return tweetid;
+ }
+
+ public void setTweetid(long tweetid) {
+ this.tweetid = tweetid;
+ }
+
+ public TwitterUser getUser() {
+ return user;
+ }
+
+ public void setUser(TwitterUser user) {
+ this.user = user;
+ }
+
+ public Point getSenderLocation() {
+ return senderLocation;
+ }
+
+ public void setSenderLocation(Point senderLocation) {
+ this.senderLocation = senderLocation;
+ }
+
+ public DateTime getSendTime() {
+ return sendTime;
+ }
+
+ public void setSendTime(DateTime sendTime) {
+ this.sendTime = sendTime;
+ }
+
+ public List<String> getReferredTopics() {
+ return referredTopics;
+ }
+
+ public void setReferredTopics(List<String> referredTopics) {
+ this.referredTopics = referredTopics;
+ }
+
+ public Message getMessageText() {
+ return messageText;
+ }
+
+ public void setMessageText(Message messageText) {
+ this.messageText = messageText;
+ }
+
+ }
+
+ public static class TwitterUser {
+
+ private String screenName;
+ private String lang = "en";
+ private int friendsCount;
+ private int statusesCount;
+ private String name;
+ private int followersCount;
+
+ public TwitterUser() {
+
+ }
+
+ public TwitterUser(String screenName, int friendsCount, int statusesCount, String name, int followersCount) {
+ this.screenName = screenName;
+ this.friendsCount = friendsCount;
+ this.statusesCount = statusesCount;
+ this.name = name;
+ this.followersCount = followersCount;
+ }
+
+ public void reset(String screenName, int friendsCount, int statusesCount, String name, int followersCount) {
+ this.screenName = screenName;
+ this.friendsCount = friendsCount;
+ this.statusesCount = statusesCount;
+ this.name = name;
+ this.followersCount = followersCount;
+ }
+
+ public String getScreenName() {
+ return screenName;
+ }
+
+ public int getFriendsCount() {
+ return friendsCount;
+ }
+
+ public int getStatusesCount() {
+ return statusesCount;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getFollowersCount() {
+ return followersCount;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("{");
+ builder.append("\"screen-name\":" + "\"" + screenName + "\"");
+ builder.append(",");
+ builder.append("\"lang\":" + "\"" + lang + "\"");
+ builder.append(",");
+ builder.append("\"friends_count\":" + friendsCount);
+ builder.append(",");
+ builder.append("\"statuses_count\":" + statusesCount);
+ builder.append(",");
+ builder.append("\"name\":" + "\"" + name + "\"");
+ builder.append(",");
+ builder.append("\"followers_count\":" + followersCount);
+ builder.append("}");
+ return builder.toString();
+ }
+
+ }
+
+ public static class Date {
+
+ private int day;
+ private int month;
+ private int year;
+
+ public Date(int month, int day, int year) {
+ this.month = month;
+ this.day = day;
+ this.year = year;
+ }
+
+ public void reset(int month, int day, int year) {
+ this.month = month;
+ this.day = day;
+ this.year = year;
+ }
+
+ public int getDay() {
+ return day;
+ }
+
+ public int getMonth() {
+ return month;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ public Date() {
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("date");
+ builder.append("(\"");
+ builder.append(year);
+ builder.append("-");
+ builder.append(month < 10 ? "0" + month : "" + month);
+ builder.append("-");
+ builder.append(day < 10 ? "0" + day : "" + day);
+ builder.append("\")");
+ return builder.toString();
+ }
+
+ public void setDay(int day) {
+ this.day = day;
+ }
+
+ public void setMonth(int month) {
+ this.month = month;
+ }
+
+ public void setYear(int year) {
+ this.year = year;
+ }
+ }
+
+ public static String[] lastNames = { "Hoopengarner", "Harrow", "Gardner", "Blyant", "Best", "Buttermore", "Gronko",
+ "Mayers", "Countryman", "Neely", "Ruhl", "Taggart", "Bash", "Cason", "Hil", "Zalack", "Mingle", "Carr",
+ "Rohtin", "Wardle", "Pullman", "Wire", "Kellogg", "Hiles", "Keppel", "Bratton", "Sutton", "Wickes",
+ "Muller", "Friedline", "Llora", "Elizabeth", "Anderson", "Gaskins", "Rifler", "Vinsant", "Stanfield",
+ "Black", "Guest", "Hujsak", "Carter", "Weidemann", "Hays", "Patton", "Hayhurst", "Paynter", "Cressman",
+ "Fiddler", "Evans", "Sherlock", "Woodworth", "Jackson", "Bloise", "Schneider", "Ring", "Kepplinger",
+ "James", "Moon", "Bennett", "Bashline", "Ryals", "Zeal", "Christman", "Milliron", "Nash", "Ewing", "Camp",
+ "Mason", "Richardson", "Bowchiew", "Hahn", "Wilson", "Wood", "Toyley", "Williamson", "Lafortune", "Errett",
+ "Saltser", "Hirleman", "Brindle", "Newbiggin", "Ulery", "Lambert", "Shick", "Kuster", "Moore", "Finck",
+ "Powell", "Jolce", "Townsend", "Sauter", "Cowher", "Wolfe", "Cavalet", "Porter", "Laborde", "Ballou",
+ "Murray", "Stoddard", "Pycroft", "Milne", "King", "Todd", "Staymates", "Hall", "Romanoff", "Keilbach",
+ "Sandford", "Hamilton", "Fye", "Kline", "Weeks", "Mcelroy", "Mccullough", "Bryant", "Hill", "Moore",
+ "Ledgerwood", "Prevatt", "Eckert", "Read", "Hastings", "Doverspike", "Allshouse", "Bryan", "Mccallum",
+ "Lombardi", "Mckendrick", "Cattley", "Barkley", "Steiner", "Finlay", "Priebe", "Armitage", "Hall", "Elder",
+ "Erskine", "Hatcher", "Walker", "Pearsall", "Dunkle", "Haile", "Adams", "Miller", "Newbern", "Basinger",
+ "Fuhrer", "Brinigh", "Mench", "Blackburn", "Bastion", "Mccune", "Bridger", "Hynes", "Quinn", "Courtney",
+ "Geddinge", "Field", "Seelig", "Cable", "Earhart", "Harshman", "Roby", "Beals", "Berry", "Reed", "Hector",
+ "Pittman", "Haverrman", "Kalp", "Briner", "Joghs", "Cowart", "Close", "Wynne", "Harden", "Weldy",
+ "Stephenson", "Hildyard", "Moberly", "Wells", "Mackendoerfer", "Fisher", "Oppie", "Oneal", "Churchill",
+ "Keister", "Alice", "Tavoularis", "Fisher", "Hair", "Burns", "Veith", "Wile", "Fuller", "Fields", "Clark",
+ "Randolph", "Stone", "Mcclymonds", "Holtzer", "Donkin", "Wilkinson", "Rosensteel", "Albright", "Stahl",
+ "Fox", "Kadel", "Houser", "Hanseu", "Henderson", "Davis", "Bicknell", "Swain", "Mercer", "Holdeman",
+ "Enderly", "Caesar", "Margaret", "Munshower", "Elless", "Lucy", "Feufer", "Schofield", "Graham",
+ "Blatenberger", "Benford", "Akers", "Campbell", "Ann", "Sadley", "Ling", "Gongaware", "Schmidt", "Endsley",
+ "Groah", "Flanders", "Reichard", "Lowstetter", "Sandblom", "Griffis", "Basmanoff", "Coveney", "Hawker",
+ "Archibald", "Hutton", "Barnes", "Diegel", "Raybould", "Focell", "Breitenstein", "Murray", "Chauvin",
+ "Busk", "Pheleps", "Teagarden", "Northey", "Baumgartner", "Fleming", "Harris", "Parkinson", "Carpenter",
+ "Whirlow", "Bonner", "Wortman", "Rogers", "Scott", "Lowe", "Mckee", "Huston", "Bullard", "Throckmorton",
+ "Rummel", "Mathews", "Dull", "Saline", "Tue", "Woolery", "Lalty", "Schrader", "Ramsey", "Eisenmann",
+ "Philbrick", "Sybilla", "Wallace", "Fonblanque", "Paul", "Orbell", "Higgens", "Casteel", "Franks", "Demuth",
+ "Eisenman", "Hay", "Robinson", "Fischer", "Hincken", "Wylie", "Leichter", "Bousum", "Littlefield",
+ "Mcdonald", "Greif", "Rhodes", "Wall", "Steele", "Baldwin", "Smith", "Stewart", "Schere", "Mary", "Aultman",
+ "Emrick", "Guess", "Mitchell", "Painter", "Aft", "Hasely", "Weldi", "Loewentsein", "Poorbaugh", "Kepple",
+ "Noton", "Judge", "Jackson", "Style", "Adcock", "Diller", "Marriman", "Johnston", "Children", "Monahan",
+ "Ehret", "Shaw", "Congdon", "Pinney", "Millard", "Crissman", "Tanner", "Rose", "Knisely", "Cypret",
+ "Sommer", "Poehl", "Hardie", "Bender", "Overholt", "Gottwine", "Beach", "Leslie", "Trevithick", "Langston",
+ "Magor", "Shotts", "Howe", "Hunter", "Cross", "Kistler", "Dealtry", "Christner", "Pennington", "Thorley",
+ "Eckhardstein", "Van", "Stroh", "Stough", "Stall", "Beedell", "Shea", "Garland", "Mays", "Pritchard",
+ "Frankenberger", "Rowley", "Lane", "Baum", "Alliman", "Park", "Jardine", "Butler", "Cherry", "Kooser",
+ "Baxter", "Billimek", "Downing", "Hurst", "Wood", "Baird", "Watkins", "Edwards", "Kemerer", "Harding",
+ "Owens", "Eiford", "Keener", "Garneis", "Fiscina", "Mang", "Draudy", "Mills", "Gibson", "Reese", "Todd",
+ "Ramos", "Levett", "Wilks", "Ward", "Mosser", "Dunlap", "Kifer", "Christopher", "Ashbaugh", "Wynter",
+ "Rawls", "Cribbs", "Haynes", "Thigpen", "Schreckengost", "Bishop", "Linton", "Chapman", "James", "Jerome",
+ "Hook", "Omara", "Houston", "Maclagan", "Sandys", "Pickering", "Blois", "Dickson", "Kemble", "Duncan",
+ "Woodward", "Southern", "Henley", "Treeby", "Cram", "Elsas", "Driggers", "Warrick", "Overstreet", "Hindman",
+ "Buck", "Sulyard", "Wentzel", "Swink", "Butt", "Schaeffer", "Hoffhants", "Bould", "Willcox", "Lotherington",
+ "Bagley", "Graff", "White", "Wheeler", "Sloan", "Rodacker", "Hanford", "Jowers", "Kunkle", "Cass", "Powers",
+ "Gilman", "Mcmichaels", "Hobbs", "Herndon", "Prescott", "Smail", "Mcdonald", "Biery", "Orner", "Richards",
+ "Mueller", "Isaman", "Bruxner", "Goodman", "Barth", "Turzanski", "Vorrasi", "Stainforth", "Nehling", "Rahl",
+ "Erschoff", "Greene", "Mckinnon", "Reade", "Smith", "Pery", "Roose", "Greenwood", "Weisgarber", "Curry",
+ "Holts", "Zadovsky", "Parrish", "Putnam", "Munson", "Mcindoe", "Nickolson", "Brooks", "Bollinger",
+ "Stroble", "Siegrist", "Fulton", "Tomey", "Zoucks", "Roberts", "Otis", "Clarke", "Easter", "Johnson",
+ "Fylbrigg", "Taylor", "Swartzbaugh", "Weinstein", "Gadow", "Sayre", "Marcotte", "Wise", "Atweeke", "Mcfall",
+ "Napier", "Eisenhart", "Canham", "Sealis", "Baughman", "Gertraht", "Losey", "Laurence", "Eva", "Pershing",
+ "Kern", "Pirl", "Rega", "Sanborn", "Kanaga", "Sanders", "Anderson", "Dickinson", "Osteen", "Gettemy",
+ "Crom", "Snyder", "Reed", "Laurenzi", "Riggle", "Tillson", "Fowler", "Raub", "Jenner", "Koepple", "Soames",
+ "Goldvogel", "Dimsdale", "Zimmer", "Giesen", "Baker", "Beail", "Mortland", "Bard", "Sanner", "Knopsnider",
+ "Jenkins", "Bailey", "Werner", "Barrett", "Faust", "Agg", "Tomlinson", "Williams", "Little", "Greenawalt",
+ "Wells", "Wilkins", "Gisiko", "Bauerle", "Harrold", "Prechtl", "Polson", "Faast", "Winton", "Garneys",
+ "Peters", "Potter", "Porter", "Tennant", "Eve", "Dugger", "Jones", "Burch", "Cowper", "Whittier" };
+
+ public static String[] firstNames = { "Albert", "Jacquelin", "Dona", "Alia", "Mayme", "Genoveva", "Emma", "Lena",
+ "Melody", "Vilma", "Katelyn", "Jeremy", "Coral", "Leann", "Lita", "Gilda", "Kayla", "Alvina", "Maranda",
+ "Verlie", "Khadijah", "Karey", "Patrice", "Kallie", "Corey", "Mollie", "Daisy", "Melanie", "Sarita",
+ "Nichole", "Pricilla", "Terresa", "Berneice", "Arianne", "Brianne", "Lavinia", "Ulrike", "Lesha", "Adell",
+ "Ardelle", "Marisha", "Laquita", "Karyl", "Maryjane", "Kendall", "Isobel", "Raeann", "Heike", "Barbera",
+ "Norman", "Yasmine", "Nevada", "Mariam", "Edith", "Eugena", "Lovie", "Maren", "Bennie", "Lennie", "Tamera",
+ "Crystal", "Randi", "Anamaria", "Chantal", "Jesenia", "Avis", "Shela", "Randy", "Laurena", "Sharron",
+ "Christiane", "Lorie", "Mario", "Elizabeth", "Reina", "Adria", "Lakisha", "Brittni", "Azzie", "Dori",
+ "Shaneka", "Asuncion", "Katheryn", "Laurice", "Sharita", "Krystal", "Reva", "Inger", "Alpha", "Makeda",
+ "Anabel", "Loni", "Tiara", "Meda", "Latashia", "Leola", "Chin", "Daisey", "Ivory", "Amalia", "Logan",
+ "Tyler", "Kyong", "Carolann", "Maryetta", "Eufemia", "Anya", "Doreatha", "Lorna", "Rutha", "Ehtel",
+ "Debbie", "Chassidy", "Sang", "Christa", "Lottie", "Chun", "Karine", "Peggie", "Amina", "Melany", "Alayna",
+ "Scott", "Romana", "Naomi", "Christiana", "Salena", "Taunya", "Mitsue", "Regina", "Chelsie", "Charity",
+ "Dacia", "Aletha", "Latosha", "Lia", "Tamica", "Chery", "Bianca", "Shu", "Georgianne", "Myriam", "Austin",
+ "Wan", "Mallory", "Jana", "Georgie", "Jenell", "Kori", "Vicki", "Delfina", "June", "Mellisa", "Catherina",
+ "Claudie", "Tynisha", "Dayle", "Enriqueta", "Belen", "Pia", "Sarai", "Rosy", "Renay", "Kacie", "Frieda",
+ "Cayla", "Elissa", "Claribel", "Sabina", "Mackenzie", "Raina", "Cira", "Mitzie", "Aubrey", "Serafina",
+ "Maria", "Katharine", "Esperanza", "Sung", "Daria", "Billye", "Stefanie", "Kasha", "Holly", "Suzanne",
+ "Inga", "Flora", "Andria", "Genevie", "Eladia", "Janet", "Erline", "Renna", "Georgeanna", "Delorse",
+ "Elnora", "Rudy", "Rima", "Leanora", "Letisha", "Love", "Alverta", "Pinkie", "Domonique", "Jeannie", "Jose",
+ "Jacqueline", "Tara", "Lily", "Erna", "Tennille", "Galina", "Tamala", "Kirby", "Nichelle", "Myesha",
+ "Farah", "Santa", "Ludie", "Kenia", "Yee", "Micheline", "Maryann", "Elaina", "Ethelyn", "Emmaline",
+ "Shanell", "Marina", "Nila", "Alane", "Shakira", "Dorris", "Belinda", "Elois", "Barbie", "Carita", "Gisela",
+ "Lura", "Fransisca", "Helga", "Peg", "Leonarda", "Earlie", "Deetta", "Jacquetta", "Blossom", "Kayleigh",
+ "Deloras", "Keshia", "Christinia", "Dulce", "Bernie", "Sheba", "Lashanda", "Tula", "Claretta", "Kary",
+ "Jeanette", "Lupita", "Lenora", "Hisako", "Sherise", "Glynda", "Adela", "Chia", "Sudie", "Mindy", "Caroyln",
+ "Lindsey", "Xiomara", "Mercedes", "Onie", "Loan", "Alexis", "Tommie", "Donette", "Monica", "Soo",
+ "Camellia", "Lavera", "Valery", "Ariana", "Sophia", "Loris", "Ginette", "Marielle", "Tari", "Julissa",
+ "Alesia", "Suzanna", "Emelda", "Erin", "Ladawn", "Sherilyn", "Candice", "Nereida", "Fairy", "Carl", "Joel",
+ "Marilee", "Gracia", "Cordie", "So", "Shanita", "Drew", "Cassie", "Sherie", "Marget", "Norma", "Delois",
+ "Debera", "Chanelle", "Catarina", "Aracely", "Carlene", "Tricia", "Aleen", "Katharina", "Marguerita",
+ "Guadalupe", "Margorie", "Mandie", "Kathe", "Chong", "Sage", "Faith", "Maryrose", "Stephany", "Ivy",
+ "Pauline", "Susie", "Cristen", "Jenifer", "Annette", "Debi", "Karmen", "Luci", "Shayla", "Hope", "Ocie",
+ "Sharie", "Tami", "Breana", "Kerry", "Rubye", "Lashay", "Sondra", "Katrice", "Brunilda", "Cortney", "Yan",
+ "Zenobia", "Penni", "Addie", "Lavona", "Noel", "Anika", "Herlinda", "Valencia", "Bunny", "Tory", "Victoria",
+ "Carrie", "Mikaela", "Wilhelmina", "Chung", "Hortencia", "Gerda", "Wen", "Ilana", "Sibyl", "Candida",
+ "Victorina", "Chantell", "Casie", "Emeline", "Dominica", "Cecila", "Delora", "Miesha", "Nova", "Sally",
+ "Ronald", "Charlette", "Francisca", "Mina", "Jenna", "Loraine", "Felisa", "Lulu", "Page", "Lyda", "Babara",
+ "Flor", "Walter", "Chan", "Sherika", "Kala", "Luna", "Vada", "Syreeta", "Slyvia", "Karin", "Renata",
+ "Robbi", "Glenda", "Delsie", "Lizzie", "Genia", "Caitlin", "Bebe", "Cory", "Sam", "Leslee", "Elva", "Caren",
+ "Kasie", "Leticia", "Shannan", "Vickey", "Sandie", "Kyle", "Chang", "Terrilyn", "Sandra", "Elida",
+ "Marketta", "Elsy", "Tu", "Carman", "Ashlie", "Vernia", "Albertine", "Vivian", "Elba", "Bong", "Margy",
+ "Janetta", "Xiao", "Teofila", "Danyel", "Nickole", "Aleisha", "Tera", "Cleotilde", "Dara", "Paulita",
+ "Isela", "Maricela", "Rozella", "Marivel", "Aurora", "Melissa", "Carylon", "Delinda", "Marvella",
+ "Candelaria", "Deidre", "Tawanna", "Myrtie", "Milagro", "Emilie", "Coretta", "Ivette", "Suzann", "Ammie",
+ "Lucina", "Lory", "Tena", "Eleanor", "Cherlyn", "Tiana", "Brianna", "Myra", "Flo", "Carisa", "Kandi",
+ "Erlinda", "Jacqulyn", "Fermina", "Riva", "Palmira", "Lindsay", "Annmarie", "Tamiko", "Carline", "Amelia",
+ "Quiana", "Lashawna", "Veola", "Belva", "Marsha", "Verlene", "Alex", "Leisha", "Camila", "Mirtha", "Melva",
+ "Lina", "Arla", "Cythia", "Towanda", "Aracelis", "Tasia", "Aurore", "Trinity", "Bernadine", "Farrah",
+ "Deneen", "Ines", "Betty", "Lorretta", "Dorethea", "Hertha", "Rochelle", "Juli", "Shenika", "Yung", "Lavon",
+ "Deeanna", "Nakia", "Lynnette", "Dinorah", "Nery", "Elene", "Carolee", "Mira", "Franchesca", "Lavonda",
+ "Leida", "Paulette", "Dorine", "Allegra", "Keva", "Jeffrey", "Bernardina", "Maryln", "Yoko", "Faviola",
+ "Jayne", "Lucilla", "Charita", "Ewa", "Ella", "Maggie", "Ivey", "Bettie", "Jerri", "Marni", "Bibi",
+ "Sabrina", "Sarah", "Marleen", "Katherin", "Remona", "Jamika", "Antonina", "Oliva", "Lajuana", "Fonda",
+ "Sigrid", "Yael", "Billi", "Verona", "Arminda", "Mirna", "Tesha", "Katheleen", "Bonita", "Kamilah",
+ "Patrica", "Julio", "Shaina", "Mellie", "Denyse", "Deandrea", "Alena", "Meg", "Kizzie", "Krissy", "Karly",
+ "Alleen", "Yahaira", "Lucie", "Karena", "Elaine", "Eloise", "Buena", "Marianela", "Renee", "Nan",
+ "Carolynn", "Windy", "Avril", "Jane", "Vida", "Thea", "Marvel", "Rosaline", "Tifany", "Robena", "Azucena",
+ "Carlota", "Mindi", "Andera", "Jenny", "Courtney", "Lyndsey", "Willette", "Kristie", "Shaniqua", "Tabatha",
+ "Ngoc", "Una", "Marlena", "Louetta", "Vernie", "Brandy", "Jacquelyne", "Jenelle", "Elna", "Erminia", "Ida",
+ "Audie", "Louis", "Marisol", "Shawana", "Harriette", "Karol", "Kitty", "Esmeralda", "Vivienne", "Eloisa",
+ "Iris", "Jeanice", "Cammie", "Jacinda", "Shena", "Floy", "Theda", "Lourdes", "Jayna", "Marg", "Kati",
+ "Tanna", "Rosalyn", "Maxima", "Soon", "Angelika", "Shonna", "Merle", "Kassandra", "Deedee", "Heidi",
+ "Marti", "Renae", "Arleen", "Alfredia", "Jewell", "Carley", "Pennie", "Corina", "Tonisha", "Natividad",
+ "Lilliana", "Darcie", "Shawna", "Angel", "Piedad", "Josefa", "Rebbeca", "Natacha", "Nenita", "Petrina",
+ "Carmon", "Chasidy", "Temika", "Dennise", "Renetta", "Augusta", "Shirlee", "Valeri", "Casimira", "Janay",
+ "Berniece", "Deborah", "Yaeko", "Mimi", "Digna", "Irish", "Cher", "Yong", "Lucila", "Jimmie", "Junko",
+ "Lezlie", "Waneta", "Sandee", "Marquita", "Eura", "Freeda", "Annabell", "Laree", "Jaye", "Wendy", "Toshia",
+ "Kylee", "Aleta", "Emiko", "Clorinda", "Sixta", "Audrea", "Juanita", "Birdie", "Reita", "Latanya", "Nia",
+ "Leora", "Laurine", "Krysten", "Jerrie", "Chantel", "Ira", "Sena", "Andre", "Jann", "Marla", "Precious",
+ "Katy", "Gabrielle", "Yvette", "Brook", "Shirlene", "Eldora", "Laura", "Milda", "Euna", "Jettie", "Debora",
+ "Lise", "Edythe", "Leandra", "Shandi", "Araceli", "Johanne", "Nieves", "Denese", "Carmelita", "Nohemi",
+ "Annice", "Natalie", "Yolande", "Jeffie", "Vashti", "Vickie", "Obdulia", "Youlanda", "Lupe", "Tomoko",
+ "Monserrate", "Domitila", "Etsuko", "Adrienne", "Lakesha", "Melissia", "Odessa", "Meagan", "Veronika",
+ "Jolyn", "Isabelle", "Leah", "Rhiannon", "Gianna", "Audra", "Sommer", "Renate", "Perla", "Thao", "Myong",
+ "Lavette", "Mark", "Emilia", "Ariane", "Karl", "Dorie", "Jacquie", "Mia", "Malka", "Shenita", "Tashina",
+ "Christine", "Cherri", "Roni", "Fran", "Mildred", "Sara", "Clarissa", "Fredia", "Elease", "Samuel",
+ "Earlene", "Vernita", "Mae", "Concha", "Renea", "Tamekia", "Hye", "Ingeborg", "Tessa", "Kelly", "Kristin",
+ "Tam", "Sacha", "Kanisha", "Jillian", "Tiffanie", "Ashlee", "Madelyn", "Donya", "Clementine", "Mickie",
+ "My", "Zena", "Terrie", "Samatha", "Gertie", "Tarra", "Natalia", "Sharlene", "Evie", "Shalon", "Rosalee",
+ "Numbers", "Jodi", "Hattie", "Naoma", "Valene", "Whitley", "Claude", "Alline", "Jeanne", "Camie",
+ "Maragret", "Viola", "Kris", "Marlo", "Arcelia", "Shari", "Jalisa", "Corrie", "Eleonor", "Angelyn", "Merry",
+ "Lauren", "Melita", "Gita", "Elenor", "Aurelia", "Janae", "Lyndia", "Margeret", "Shawanda", "Rolande",
+ "Shirl", "Madeleine", "Celinda", "Jaleesa", "Shemika", "Joye", "Tisa", "Trudie", "Kathrine", "Clarita",
+ "Dinah", "Georgia", "Antoinette", "Janis", "Suzette", "Sherri", "Herta", "Arie", "Hedy", "Cassi", "Audrie",
+ "Caryl", "Jazmine", "Jessica", "Beverly", "Elizbeth", "Marylee", "Londa", "Fredericka", "Argelia", "Nana",
+ "Donnette", "Damaris", "Hailey", "Jamee", "Kathlene", "Glayds", "Lydia", "Apryl", "Verla", "Adam",
+ "Concepcion", "Zelda", "Shonta", "Vernice", "Detra", "Meghann", "Sherley", "Sheri", "Kiyoko", "Margarita",
+ "Adaline", "Mariela", "Velda", "Ailene", "Juliane", "Aiko", "Edyth", "Cecelia", "Shavon", "Florance",
+ "Madeline", "Rheba", "Deann", "Ignacia", "Odelia", "Heide", "Mica", "Jennette", "Maricruz", "Ouida",
+ "Darcy", "Laure", "Justina", "Amada", "Laine", "Cruz", "Sunny", "Francene", "Roxanna", "Nam", "Nancie",
+ "Deanna", "Letty", "Britni", "Kazuko", "Lacresha", "Simon", "Caleb", "Milton", "Colton", "Travis", "Miles",
+ "Jonathan", "Logan", "Rolf", "Emilio", "Roberto", "Marcus", "Tim", "Delmar", "Devon", "Kurt", "Edward",
+ "Jeffrey", "Elvis", "Alfonso", "Blair", "Wm", "Sheldon", "Leonel", "Michal", "Federico", "Jacques",
+ "Leslie", "Augustine", "Hugh", "Brant", "Hong", "Sal", "Modesto", "Curtis", "Jefferey", "Adam", "John",
+ "Glenn", "Vance", "Alejandro", "Refugio", "Lucio", "Demarcus", "Chang", "Huey", "Neville", "Preston",
+ "Bert", "Abram", "Foster", "Jamison", "Kirby", "Erich", "Manual", "Dustin", "Derrick", "Donnie", "Jospeh",
+ "Chris", "Josue", "Stevie", "Russ", "Stanley", "Nicolas", "Samuel", "Waldo", "Jake", "Max", "Ernest",
+ "Reinaldo", "Rene", "Gale", "Morris", "Nathan", "Maximo", "Courtney", "Theodore", "Octavio", "Otha",
+ "Delmer", "Graham", "Dean", "Lowell", "Myles", "Colby", "Boyd", "Adolph", "Jarrod", "Nick", "Mark",
+ "Clinton", "Kim", "Sonny", "Dalton", "Tyler", "Jody", "Orville", "Luther", "Rubin", "Hollis", "Rashad",
+ "Barton", "Vicente", "Ted", "Rick", "Carmine", "Clifton", "Gayle", "Christopher", "Jessie", "Bradley",
+ "Clay", "Theo", "Josh", "Mitchell", "Boyce", "Chung", "Eugenio", "August", "Norbert", "Sammie", "Jerry",
+ "Adan", "Edmundo", "Homer", "Hilton", "Tod", "Kirk", "Emmett", "Milan", "Quincy", "Jewell", "Herb", "Steve",
+ "Carmen", "Bobby", "Odis", "Daron", "Jeremy", "Carl", "Hunter", "Tuan", "Thurman", "Asa", "Brenton",
+ "Shane", "Donny", "Andreas", "Teddy", "Dario", "Cyril", "Hoyt", "Teodoro", "Vincenzo", "Hilario", "Daren",
+ "Agustin", "Marquis", "Ezekiel", "Brendan", "Johnson", "Alden", "Richie", "Granville", "Chad", "Joseph",
+ "Lamont", "Jordon", "Gilberto", "Chong", "Rosendo", "Eddy", "Rob", "Dewitt", "Andre", "Titus", "Russell",
+ "Rigoberto", "Dick", "Garland", "Gabriel", "Hank", "Darius", "Ignacio", "Lazaro", "Johnie", "Mauro",
+ "Edmund", "Trent", "Harris", "Osvaldo", "Marvin", "Judson", "Rodney", "Randall", "Renato", "Richard",
+ "Denny", "Jon", "Doyle", "Cristopher", "Wilson", "Christian", "Jamie", "Roland", "Ken", "Tad", "Romeo",
+ "Seth", "Quinton", "Byron", "Ruben", "Darrel", "Deandre", "Broderick", "Harold", "Ty", "Monroe", "Landon",
+ "Mohammed", "Angel", "Arlen", "Elias", "Andres", "Carlton", "Numbers", "Tony", "Thaddeus", "Issac", "Elmer",
+ "Antoine", "Ned", "Fermin", "Grover", "Benito", "Abdul", "Cortez", "Eric", "Maxwell", "Coy", "Gavin",
+ "Rich", "Andy", "Del", "Giovanni", "Major", "Efren", "Horacio", "Joaquin", "Charles", "Noah", "Deon",
+ "Pasquale", "Reed", "Fausto", "Jermaine", "Irvin", "Ray", "Tobias", "Carter", "Yong", "Jorge", "Brent",
+ "Daniel", "Zane", "Walker", "Thad", "Shaun", "Jaime", "Mckinley", "Bradford", "Nathanial", "Jerald",
+ "Aubrey", "Virgil", "Abel", "Philip", "Chester", "Chadwick", "Dominick", "Britt", "Emmitt", "Ferdinand",
+ "Julian", "Reid", "Santos", "Dwain", "Morgan", "James", "Marion", "Micheal", "Eddie", "Brett", "Stacy",
+ "Kerry", "Dale", "Nicholas", "Darrick", "Freeman", "Scott", "Newton", "Sherman", "Felton", "Cedrick",
+ "Winfred", "Brad", "Fredric", "Dewayne", "Virgilio", "Reggie", "Edgar", "Heriberto", "Shad", "Timmy",
+ "Javier", "Nestor", "Royal", "Lynn", "Irwin", "Ismael", "Jonas", "Wiley", "Austin", "Kieth", "Gonzalo",
+ "Paris", "Earnest", "Arron", "Jarred", "Todd", "Erik", "Maria", "Chauncey", "Neil", "Conrad", "Maurice",
+ "Roosevelt", "Jacob", "Sydney", "Lee", "Basil", "Louis", "Rodolfo", "Rodger", "Roman", "Corey", "Ambrose",
+ "Cristobal", "Sylvester", "Benton", "Franklin", "Marcelo", "Guillermo", "Toby", "Jeramy", "Donn", "Danny",
+ "Dwight", "Clifford", "Valentine", "Matt", "Jules", "Kareem", "Ronny", "Lonny", "Son", "Leopoldo", "Dannie",
+ "Gregg", "Dillon", "Orlando", "Weston", "Kermit", "Damian", "Abraham", "Walton", "Adrian", "Rudolf", "Will",
+ "Les", "Norberto", "Fred", "Tyrone", "Ariel", "Terry", "Emmanuel", "Anderson", "Elton", "Otis", "Derek",
+ "Frankie", "Gino", "Lavern", "Jarod", "Kenny", "Dane", "Keenan", "Bryant", "Eusebio", "Dorian", "Ali",
+ "Lucas", "Wilford", "Jeremiah", "Warner", "Woodrow", "Galen", "Bob", "Johnathon", "Amado", "Michel",
+ "Harry", "Zachery", "Taylor", "Booker", "Hershel", "Mohammad", "Darrell", "Kyle", "Stuart", "Marlin",
+ "Hyman", "Jeffery", "Sidney", "Merrill", "Roy", "Garrett", "Porter", "Kenton", "Giuseppe", "Terrance",
+ "Trey", "Felix", "Buster", "Von", "Jackie", "Linwood", "Darron", "Francisco", "Bernie", "Diego", "Brendon",
+ "Cody", "Marco", "Ahmed", "Antonio", "Vince", "Brooks", "Kendrick", "Ross", "Mohamed", "Jim", "Benny",
+ "Gerald", "Pablo", "Charlie", "Antony", "Werner", "Hipolito", "Minh", "Mel", "Derick", "Armand", "Fidel",
+ "Lewis", "Donnell", "Desmond", "Vaughn", "Guadalupe", "Keneth", "Rodrick", "Spencer", "Chas", "Gus",
+ "Harlan", "Wes", "Carmelo", "Jefferson", "Gerard", "Jarvis", "Haywood", "Hayden", "Sergio", "Gene",
+ "Edgardo", "Colin", "Horace", "Dominic", "Aldo", "Adolfo", "Juan", "Man", "Lenard", "Clement", "Everett",
+ "Hal", "Bryon", "Mason", "Emerson", "Earle", "Laurence", "Columbus", "Lamar", "Douglas", "Ian", "Fredrick",
+ "Marc", "Loren", "Wallace", "Randell", "Noble", "Ricardo", "Rory", "Lindsey", "Boris", "Bill", "Carlos",
+ "Domingo", "Grant", "Craig", "Ezra", "Matthew", "Van", "Rudy", "Danial", "Brock", "Maynard", "Vincent",
+ "Cole", "Damion", "Ellsworth", "Marcel", "Markus", "Rueben", "Tanner", "Reyes", "Hung", "Kennith",
+ "Lindsay", "Howard", "Ralph", "Jed", "Monte", "Garfield", "Avery", "Bernardo", "Malcolm", "Sterling",
+ "Ezequiel", "Kristofer", "Luciano", "Casey", "Rosario", "Ellis", "Quintin", "Trevor", "Miquel", "Jordan",
+ "Arthur", "Carson", "Tyron", "Grady", "Walter", "Jonathon", "Ricky", "Bennie", "Terrence", "Dion", "Dusty",
+ "Roderick", "Isaac", "Rodrigo", "Harrison", "Zack", "Dee", "Devin", "Rey", "Ulysses", "Clint", "Greg",
+ "Dino", "Frances", "Wade", "Franklyn", "Jude", "Bradly", "Salvador", "Rocky", "Weldon", "Lloyd", "Milford",
+ "Clarence", "Alec", "Allan", "Bobbie", "Oswaldo", "Wilfred", "Raleigh", "Shelby", "Willy", "Alphonso",
+ "Arnoldo", "Robbie", "Truman", "Nicky", "Quinn", "Damien", "Lacy", "Marcos", "Parker", "Burt", "Carroll",
+ "Denver", "Buck", "Dong", "Normand", "Billie", "Edwin", "Troy", "Arden", "Rusty", "Tommy", "Kenneth", "Leo",
+ "Claud", "Joel", "Kendall", "Dante", "Milo", "Cruz", "Lucien", "Ramon", "Jarrett", "Scottie", "Deshawn",
+ "Ronnie", "Pete", "Alonzo", "Whitney", "Stefan", "Sebastian", "Edmond", "Enrique", "Branden", "Leonard",
+ "Loyd", "Olin", "Ron", "Rhett", "Frederic", "Orval", "Tyrell", "Gail", "Eli", "Antonia", "Malcom", "Sandy",
+ "Stacey", "Nickolas", "Hosea", "Santo", "Oscar", "Fletcher", "Dave", "Patrick", "Dewey", "Bo", "Vito",
+ "Blaine", "Randy", "Robin", "Winston", "Sammy", "Edwardo", "Manuel", "Valentin", "Stanford", "Filiberto",
+ "Buddy", "Zachariah", "Johnnie", "Elbert", "Paul", "Isreal", "Jerrold", "Leif", "Owen", "Sung", "Junior",
+ "Raphael", "Josef", "Donte", "Allen", "Florencio", "Raymond", "Lauren", "Collin", "Eliseo", "Bruno",
+ "Martin", "Lyndon", "Kurtis", "Salvatore", "Erwin", "Michael", "Sean", "Davis", "Alberto", "King",
+ "Rolland", "Joe", "Tory", "Chase", "Dallas", "Vernon", "Beau", "Terrell", "Reynaldo", "Monty", "Jame",
+ "Dirk", "Florentino", "Reuben", "Saul", "Emory", "Esteban", "Michale", "Claudio", "Jacinto", "Kelley",
+ "Levi", "Andrea", "Lanny", "Wendell", "Elwood", "Joan", "Felipe", "Palmer", "Elmo", "Lawrence", "Hubert",
+ "Rudolph", "Duane", "Cordell", "Everette", "Mack", "Alan", "Efrain", "Trenton", "Bryan", "Tom", "Wilmer",
+ "Clyde", "Chance", "Lou", "Brain", "Justin", "Phil", "Jerrod", "George", "Kris", "Cyrus", "Emery", "Rickey",
+ "Lincoln", "Renaldo", "Mathew", "Luke", "Dwayne", "Alexis", "Jackson", "Gil", "Marty", "Burton", "Emil",
+ "Glen", "Willian", "Clemente", "Keven", "Barney", "Odell", "Reginald", "Aurelio", "Damon", "Ward",
+ "Gustavo", "Harley", "Peter", "Anibal", "Arlie", "Nigel", "Oren", "Zachary", "Scot", "Bud", "Wilbert",
+ "Bart", "Josiah", "Marlon", "Eldon", "Darryl", "Roger", "Anthony", "Omer", "Francis", "Patricia", "Moises",
+ "Chuck", "Waylon", "Hector", "Jamaal", "Cesar", "Julius", "Rex", "Norris", "Ollie", "Isaias", "Quentin",
+ "Graig", "Lyle", "Jeffry", "Karl", "Lester", "Danilo", "Mike", "Dylan", "Carlo", "Ryan", "Leon", "Percy",
+ "Lucius", "Jamel", "Lesley", "Joey", "Cornelius", "Rico", "Arnulfo", "Chet", "Margarito", "Ernie",
+ "Nathanael", "Amos", "Cleveland", "Luigi", "Alfonzo", "Phillip", "Clair", "Elroy", "Alva", "Hans", "Shon",
+ "Gary", "Jesus", "Cary", "Silas", "Keith", "Israel", "Willard", "Randolph", "Dan", "Adalberto", "Claude",
+ "Delbert", "Garry", "Mary", "Larry", "Riley", "Robt", "Darwin", "Barrett", "Steven", "Kelly", "Herschel",
+ "Darnell", "Scotty", "Armando", "Miguel", "Lawerence", "Wesley", "Garth", "Carol", "Micah", "Alvin",
+ "Billy", "Earl", "Pat", "Brady", "Cory", "Carey", "Bernard", "Jayson", "Nathaniel", "Gaylord", "Archie",
+ "Dorsey", "Erasmo", "Angelo", "Elisha", "Long", "Augustus", "Hobert", "Drew", "Stan", "Sherwood", "Lorenzo",
+ "Forrest", "Shawn", "Leigh", "Hiram", "Leonardo", "Gerry", "Myron", "Hugo", "Alvaro", "Leland", "Genaro",
+ "Jamey", "Stewart", "Elden", "Irving", "Olen", "Antone", "Freddy", "Lupe", "Joshua", "Gregory", "Andrew",
+ "Sang", "Wilbur", "Gerardo", "Merlin", "Williams", "Johnny", "Alex", "Tommie", "Jimmy", "Donovan", "Dexter",
+ "Gaston", "Tracy", "Jeff", "Stephen", "Berry", "Anton", "Darell", "Fritz", "Willis", "Noel", "Mariano",
+ "Crawford", "Zoey", "Alex", "Brianna", "Carlie", "Lloyd", "Cal", "Astor", "Randolf", "Magdalene",
+ "Trevelyan", "Terance", "Roy", "Kermit", "Harriett", "Crystal", "Laurinda", "Kiersten", "Phyllida", "Liz",
+ "Bettie", "Rena", "Colten", "Berenice", "Sindy", "Wilma", "Amos", "Candi", "Ritchie", "Dirk", "Kathlyn",
+ "Callista", "Anona", "Flossie", "Sterling", "Calista", "Regan", "Erica", "Jeana", "Keaton", "York", "Nolan",
+ "Daniel", "Benton", "Tommie", "Serenity", "Deanna", "Chas", "Heron", "Marlyn", "Xylia", "Tristin", "Lyndon",
+ "Andriana", "Madelaine", "Maddison", "Leila", "Chantelle", "Audrey", "Connor", "Daley", "Tracee", "Tilda",
+ "Eliot", "Merle", "Linwood", "Kathryn", "Silas", "Alvina", "Phinehas", "Janis", "Alvena", "Zubin",
+ "Gwendolen", "Caitlyn", "Bertram", "Hailee", "Idelle", "Homer", "Jannah", "Delbert", "Rhianna", "Cy",
+ "Jefferson", "Wayland", "Nona", "Tempest", "Reed", "Jenifer", "Ellery", "Nicolina", "Aldous", "Prince",
+ "Lexia", "Vinnie", "Doug", "Alberic", "Kayleen", "Woody", "Rosanne", "Ysabel", "Skyler", "Twyla", "Geordie",
+ "Leta", "Clive", "Aaron", "Scottie", "Celeste", "Chuck", "Erle", "Lallie", "Jaycob", "Ray", "Carrie",
+ "Laurita", "Noreen", "Meaghan", "Ulysses", "Andy", "Drogo", "Dina", "Yasmin", "Mya", "Luvenia", "Urban",
+ "Jacob", "Laetitia", "Sherry", "Love", "Michaela", "Deonne", "Summer", "Brendon", "Sheena", "Mason",
+ "Jayson", "Linden", "Salal", "Darrell", "Diana", "Hudson", "Lennon", "Isador", "Charley", "April", "Ralph",
+ "James", "Mina", "Jolyon", "Laurine", "Monna", "Carita", "Munro", "Elsdon", "Everette", "Radclyffe",
+ "Darrin", "Herbert", "Gawain", "Sheree", "Trudy", "Emmaline", "Kassandra", "Rebecca", "Basil", "Jen", "Don",
+ "Osborne", "Lilith", "Hannah", "Fox", "Rupert", "Paulene", "Darius", "Wally", "Baptist", "Sapphire", "Tia",
+ "Sondra", "Kylee", "Ashton", "Jepson", "Joetta", "Val", "Adela", "Zacharias", "Zola", "Marmaduke",
+ "Shannah", "Posie", "Oralie", "Brittany", "Ernesta", "Raymund", "Denzil", "Daren", "Roosevelt", "Nelson",
+ "Fortune", "Mariel", "Nick", "Jaden", "Upton", "Oz", "Margaux", "Precious", "Albert", "Bridger", "Jimmy",
+ "Nicola", "Rosalynne", "Keith", "Walt", "Della", "Joanna", "Xenia", "Esmeralda", "Major", "Simon", "Rexana",
+ "Stacy", "Calanthe", "Sherley", "Kaitlyn", "Graham", "Ramsey", "Abbey", "Madlyn", "Kelvin", "Bill", "Rue",
+ "Monica", "Caileigh", "Laraine", "Booker", "Jayna", "Greta", "Jervis", "Sherman", "Kendrick", "Tommy",
+ "Iris", "Geffrey", "Kaelea", "Kerr", "Garrick", "Jep", "Audley", "Nic", "Bronte", "Beulah", "Patricia",
+ "Jewell", "Deidra", "Cory", "Everett", "Harper", "Charity", "Godfrey", "Jaime", "Sinclair", "Talbot",
+ "Dayna", "Cooper", "Rosaline", "Jennie", "Eileen", "Latanya", "Corinna", "Roxie", "Caesar", "Charles",
+ "Pollie", "Lindsey", "Sorrel", "Dwight", "Jocelyn", "Weston", "Shyla", "Valorie", "Bessie", "Josh",
+ "Lessie", "Dayton", "Kathi", "Chasity", "Wilton", "Adam", "William", "Ash", "Angela", "Ivor", "Ria",
+ "Jazmine", "Hailey", "Jo", "Silvestra", "Ernie", "Clifford", "Levi", "Matilda", "Quincey", "Camilla",
+ "Delicia", "Phemie", "Laurena", "Bambi", "Lourdes", "Royston", "Chastity", "Lynwood", "Elle", "Brenda",
+ "Phoebe", "Timothy", "Raschelle", "Lilly", "Burt", "Rina", "Rodney", "Maris", "Jaron", "Wilf", "Harlan",
+ "Audra", "Vincent", "Elwyn", "Drew", "Wynter", "Ora", "Lissa", "Virgil", "Xavier", "Chad", "Ollie",
+ "Leyton", "Karolyn", "Skye", "Roni", "Gladys", "Dinah", "Penny", "August", "Osmund", "Whitaker", "Brande",
+ "Cornell", "Phil", "Zara", "Kilie", "Gavin", "Coty", "Randy", "Teri", "Keira", "Pru", "Clemency", "Kelcey",
+ "Nevil", "Poppy", "Gareth", "Christabel", "Bastian", "Wynonna", "Roselyn", "Goddard", "Collin", "Trace",
+ "Neal", "Effie", "Denys", "Virginia", "Richard", "Isiah", "Harrietta", "Gaylord", "Diamond", "Trudi",
+ "Elaine", "Jemmy", "Gage", "Annabel", "Quincy", "Syd", "Marianna", "Philomena", "Aubree", "Kathie", "Jacki",
+ "Kelley", "Bess", "Cecil", "Maryvonne", "Kassidy", "Anselm", "Dona", "Darby", "Jamison", "Daryl", "Darell",
+ "Teal", "Lennie", "Bartholomew", "Katie", "Maybelline", "Kimball", "Elvis", "Les", "Flick", "Harley",
+ "Beth", "Bidelia", "Montague", "Helen", "Ozzy", "Stef", "Debra", "Maxene", "Stefanie", "Russ", "Avril",
+ "Johnathan", "Orson", "Chelsey", "Josephine", "Deshaun", "Wendell", "Lula", "Ferdinanda", "Greg", "Brad",
+ "Kynaston", "Dena", "Russel", "Robertina", "Misti", "Leon", "Anjelica", "Bryana", "Myles", "Judi", "Curtis",
+ "Davin", "Kristia", "Chrysanta", "Hayleigh", "Hector", "Osbert", "Eustace", "Cary", "Tansy", "Cayley",
+ "Maryann", "Alissa", "Ike", "Tranter", "Reina", "Alwilda", "Sidony", "Columbine", "Astra", "Jillie",
+ "Stephania", "Jonah", "Kennedy", "Ferdinand", "Allegria", "Donella", "Kelleigh", "Darian", "Eldreda",
+ "Jayden", "Herbie", "Jake", "Winston", "Vi", "Annie", "Cherice", "Hugo", "Tricia", "Haydee", "Cassarah",
+ "Darden", "Mallory", "Alton", "Hadley", "Romayne", "Lacey", "Ern", "Alayna", "Cecilia", "Seward", "Tilly",
+ "Edgar", "Concordia", "Ibbie", "Dahlia", "Oswin", "Stu", "Brett", "Maralyn", "Kristeen", "Dotty", "Robyn",
+ "Nessa", "Tresha", "Guinevere", "Emerson", "Haze", "Lyn", "Henderson", "Lexa", "Jaylen", "Gail", "Lizette",
+ "Tiara", "Robbie", "Destiny", "Alice", "Livia", "Rosy", "Leah", "Jan", "Zach", "Vita", "Gia", "Micheal",
+ "Rowina", "Alysha", "Bobbi", "Delores", "Osmond", "Karaugh", "Wilbur", "Kasandra", "Renae", "Kaety", "Dora",
+ "Gaye", "Amaryllis", "Katelyn", "Dacre", "Prudence", "Ebony", "Camron", "Jerrold", "Vivyan", "Randall",
+ "Donna", "Misty", "Damon", "Selby", "Esmund", "Rian", "Garry", "Julius", "Raelene", "Clement", "Dom",
+ "Tibby", "Moss", "Millicent", "Gwendoline", "Berry", "Ashleigh", "Lilac", "Quin", "Vere", "Creighton",
+ "Harriet", "Malvina", "Lianne", "Pearle", "Kizzie", "Kara", "Petula", "Jeanie", "Maria", "Pacey",
+ "Victoria", "Huey", "Toni", "Rose", "Wallis", "Diggory", "Josiah", "Delma", "Keysha", "Channing", "Prue",
+ "Lee", "Ryan", "Sidney", "Valerie", "Clancy", "Ezra", "Gilbert", "Clare", "Laz", "Crofton", "Mike",
+ "Annabella", "Tara", "Eldred", "Arthur", "Jaylon", "Peronel", "Paden", "Dot", "Marian", "Amyas", "Alexus",
+ "Esmond", "Abbie", "Stanley", "Brittani", "Vickie", "Errol", "Kimberlee", "Uland", "Ebenezer", "Howie",
+ "Eveline", "Andrea", "Trish", "Hopkin", "Bryanna", "Temperance", "Valarie", "Femie", "Alix", "Terrell",
+ "Lewin", "Lorrin", "Happy", "Micah", "Rachyl", "Sloan", "Gertrude", "Elizabeth", "Dorris", "Andra", "Bram",
+ "Gary", "Jeannine", "Maurene", "Irene", "Yolonda", "Jonty", "Coleen", "Cecelia", "Chantal", "Stuart",
+ "Caris", "Ros", "Kaleigh", "Mirabelle", "Kolby", "Primrose", "Susannah", "Ginny", "Jinny", "Dolly",
+ "Lettice", "Sonny", "Melva", "Ernest", "Garret", "Reagan", "Trenton", "Gallagher", "Edwin", "Nikolas",
+ "Corrie", "Lynette", "Ettie", "Sly", "Debbi", "Eudora", "Brittney", "Tacey", "Marius", "Anima", "Gordon",
+ "Olivia", "Kortney", "Shantel", "Kolleen", "Nevaeh", "Buck", "Sera", "Liliana", "Aric", "Kalyn", "Mick",
+ "Libby", "Ingram", "Alexandria", "Darleen", "Jacklyn", "Hughie", "Tyler", "Aida", "Ronda", "Deemer",
+ "Taryn", "Laureen", "Samantha", "Dave", "Hardy", "Baldric", "Montgomery", "Gus", "Ellis", "Titania", "Luke",
+ "Chase", "Haidee", "Mayra", "Isabell", "Trinity", "Milo", "Abigail", "Tacita", "Meg", "Hervey", "Natasha",
+ "Sadie", "Holden", "Dee", "Mansel", "Perry", "Randi", "Frederica", "Georgina", "Kolour", "Debbie",
+ "Seraphina", "Elspet", "Julyan", "Raven", "Zavia", "Jarvis", "Jaymes", "Grover", "Cairo", "Alea", "Jordon",
+ "Braxton", "Donny", "Rhoda", "Tonya", "Bee", "Alyssia", "Ashlyn", "Reanna", "Lonny", "Arlene", "Deb",
+ "Jane", "Nikole", "Bettina", "Harrison", "Tamzen", "Arielle", "Adelaide", "Faith", "Bridie", "Wilburn",
+ "Fern", "Nan", "Shaw", "Zeke", "Alan", "Dene", "Gina", "Alexa", "Bailey", "Sal", "Tammy", "Maximillian",
+ "America", "Sylvana", "Fitz", "Mo", "Marissa", "Cass", "Eldon", "Wilfrid", "Tel", "Joann", "Kendra",
+ "Tolly", "Leanne", "Ferdie", "Haven", "Lucas", "Marlee", "Cyrilla", "Red", "Phoenix", "Jazmin", "Carin",
+ "Gena", "Lashonda", "Tucker", "Genette", "Kizzy", "Winifred", "Melody", "Keely", "Kaylyn", "Radcliff",
+ "Lettie", "Foster", "Lyndsey", "Nicholas", "Farley", "Louisa", "Dana", "Dortha", "Francine", "Doran",
+ "Bonita", "Hal", "Sawyer", "Reginald", "Aislin", "Nathan", "Baylee", "Abilene", "Ladonna", "Maurine",
+ "Shelly", "Deandre", "Jasmin", "Roderic", "Tiffany", "Amanda", "Verity", "Wilford", "Gayelord", "Whitney",
+ "Demelza", "Kenton", "Alberta", "Kyra", "Tabitha", "Sampson", "Korey", "Lillian", "Edison", "Clayton",
+ "Steph", "Maya", "Dusty", "Jim", "Ronny", "Adrianne", "Bernard", "Harris", "Kiley", "Alexander", "Kisha",
+ "Ethalyn", "Patience", "Briony", "Indigo", "Aureole", "Makenzie", "Molly", "Sherilyn", "Barry", "Laverne",
+ "Hunter", "Rocky", "Tyreek", "Madalyn", "Phyliss", "Chet", "Beatrice", "Faye", "Lavina", "Madelyn",
+ "Tracey", "Gyles", "Patti", "Carlyn", "Stephanie", "Jackalyn", "Larrie", "Kimmy", "Isolda", "Emelina",
+ "Lis", "Zillah", "Cody", "Sheard", "Rufus", "Paget", "Mae", "Rexanne", "Luvinia", "Tamsen", "Rosanna",
+ "Greig", "Stacia", "Mabelle", "Quianna", "Lotus", "Delice", "Bradford", "Angus", "Cosmo", "Earlene",
+ "Adrian", "Arlie", "Noelle", "Sabella", "Isa", "Adelle", "Innocent", "Kirby", "Trixie", "Kenelm", "Nelda",
+ "Melia", "Kendal", "Dorinda", "Placid", "Linette", "Kam", "Sherisse", "Evan", "Ewart", "Janice", "Linton",
+ "Jacaline", "Charissa", "Douglas", "Aileen", "Kemp", "Oli", "Amethyst", "Rosie", "Nigella", "Sherill",
+ "Anderson", "Alanna", "Eric", "Claudia", "Jennifer", "Boniface", "Harriet", "Vernon", "Lucy", "Shawnee",
+ "Gerard", "Cecily", "Romey", "Randall", "Wade", "Lux", "Dawson", "Gregg", "Kade", "Roxanne", "Melinda",
+ "Rolland", "Rowanne", "Fannie", "Isidore", "Melia", "Harvie", "Salal", "Eleonor", "Jacquette", "Lavone",
+ "Shanika", "Tarquin", "Janet", "Josslyn", "Maegan", "Augusta", "Aubree", "Francene", "Martie", "Marisa",
+ "Tyreek", "Tatianna", "Caleb", "Sheridan", "Nellie", "Barbara", "Wat", "Jayla", "Esmaralda", "Graeme",
+ "Lavena", "Jemima", "Nikolas", "Triston", "Portia", "Kyla", "Marcus", "Raeburn", "Jamison", "Earl", "Wren",
+ "Leighton", "Lagina", "Lucasta", "Dina", "Amaranta", "Jessika", "Claud", "Bernard", "Winifred", "Ebba",
+ "Sammi", "Gall", "Chloe", "Ottoline", "Herbert", "Janice", "Gareth", "Channing", "Caleigh", "Kailee",
+ "Ralphie", "Tamzen", "Quincy", "Beaumont", "Albert", "Jadyn", "Violet", "Luanna", "Moriah", "Humbert",
+ "Jed", "Leona", "Hale", "Mitch", "Marlin", "Nivek", "Darwin", "Dirk", "Liliana", "Meadow", "Bernadine",
+ "Jorie", "Peyton", "Astra", "Roscoe", "Gina", "Lovell", "Jewel", "Romayne", "Rosy", "Imogene", "Margaretta",
+ "Lorinda", "Hopkin", "Bobby", "Flossie", "Bennie", "Horatio", "Jonah", "Lyn", "Deana", "Juliana", "Blanch",
+ "Wright", "Kendal", "Woodrow", "Tania", "Austyn", "Val", "Mona", "Charla", "Rudyard", "Pamela", "Raven",
+ "Zena", "Nicola", "Kaelea", "Conor", "Virgil", "Sonnie", "Goodwin", "Christianne", "Linford", "Myron",
+ "Denton", "Charita", "Brody", "Ginnie", "Harrison", "Jeanine", "Quin", "Isolda", "Zoie", "Pearce", "Margie",
+ "Larrie", "Angelina", "Marcia", "Jessamine", "Delilah", "Dick", "Luana", "Delicia", "Lake", "Luvenia",
+ "Vaughan", "Concordia", "Gayelord", "Cheyenne", "Felix", "Dorris", "Pen", "Kristeen", "Parris", "Everitt",
+ "Josephina", "Amy", "Tommie", "Adrian", "April", "Rosaline", "Zachery", "Trace", "Phoebe", "Jenelle",
+ "Kameron", "Katharine", "Media", "Colton", "Tad", "Quianna", "Kerenza", "Greta", "Luvinia", "Pete", "Tonya",
+ "Beckah", "Barbra", "Jon", "Tetty", "Corey", "Sylvana", "Kizzy", "Korey", "Trey", "Haydee", "Penny",
+ "Mandy", "Panda", "Coline", "Ramsey", "Sukie", "Annabel", "Sarina", "Corbin", "Suzanna", "Rob", "Duana",
+ "Shell", "Jason", "Eddy", "Rube", "Roseann", "Celia", "Brianne", "Nerissa", "Jera", "Humphry", "Ashlynn",
+ "Terrence", "Philippina", "Coreen", "Kolour", "Indiana", "Paget", "Marlyn", "Hester", "Isbel", "Ocean",
+ "Harris", "Leslie", "Vere", "Monroe", "Isabelle", "Bertie", "Clitus", "Dave", "Alethea", "Lessie", "Louiza",
+ "Madlyn", "Garland", "Wolf", "Lalo", "Donny", "Amabel", "Tianna", "Louie", "Susie", "Mackenzie", "Renie",
+ "Tess", "Marmaduke", "Gwendolen", "Bettina", "Beatrix", "Esmund", "Minnie", "Carlie", "Barnabas", "Ruthie",
+ "Honour", "Haylie", "Xavior", "Freddie", "Ericka", "Aretha", "Edie", "Madelina", "Anson", "Tabby",
+ "Derrick", "Jocosa", "Deirdre", "Aislin", "Chastity", "Abigail", "Wynonna", "Zo", "Eldon", "Krystine",
+ "Ghislaine", "Zavia", "Nolene", "Marigold", "Kelley", "Sylvester", "Odell", "George", "Laurene", "Franklyn",
+ "Clarice", "Mo", "Dustin", "Debbi", "Lina", "Tony", "Acacia", "Hettie", "Natalee", "Marcie", "Brittany",
+ "Elnora", "Rachel", "Dawn", "Basil", "Christal", "Anjelica", "Fran", "Tawny", "Delroy", "Tameka", "Lillie",
+ "Ceara", "Deanna", "Deshaun", "Ken", "Bradford", "Justina", "Merle", "Draven", "Gretta", "Harriette",
+ "Webster", "Nathaniel", "Anemone", "Coleen", "Ruth", "Chryssa", "Hortensia", "Saffie", "Deonne", "Leopold",
+ "Harlan", "Lea", "Eppie", "Lucinda", "Tilda", "Fanny", "Titty", "Lockie", "Jepson", "Sherisse", "Maralyn",
+ "Ethel", "Sly", "Ebenezer", "Canute", "Ella", "Freeman", "Reuben", "Olivette", "Nona", "Rik", "Amice",
+ "Kristine", "Kathie", "Jayne", "Jeri", "Mckenna", "Bertram", "Kaylee", "Livia", "Gil", "Wallace", "Maryann",
+ "Keeleigh", "Laurinda", "Doran", "Khloe", "Dakota", "Yaron", "Kimberleigh", "Gytha", "Doris", "Marylyn",
+ "Benton", "Linnette", "Esther", "Jakki", "Rowina", "Marian", "Roselyn", "Norbert", "Maggie", "Caesar",
+ "Phinehas", "Jerry", "Jasmine", "Antonette", "Miriam", "Monna", "Maryvonne", "Jacquetta", "Bernetta",
+ "Napier", "Annie", "Gladwin", "Sheldon", "Aric", "Elouise", "Gawain", "Kristia", "Gabe", "Kyra", "Red",
+ "Tod", "Dudley", "Lorraine", "Ryley", "Sabina", "Poppy", "Leland", "Aileen", "Eglantine", "Alicia", "Jeni",
+ "Addy", "Tiffany", "Geffrey", "Lavina", "Collin", "Clover", "Vin", "Jerome", "Doug", "Vincent", "Florence",
+ "Scarlet", "Celeste", "Desdemona", "Tiphanie", "Kassandra", "Ashton", "Madison", "Art", "Magdalene", "Iona",
+ "Josepha", "Anise", "Ferne", "Derek", "Huffie", "Qiana", "Ysabel", "Tami", "Shannah", "Xavier", "Willard",
+ "Winthrop", "Vickie", "Maura", "Placid", "Tiara", "Reggie", "Elissa", "Isa", "Chrysanta", "Jeff", "Bessie",
+ "Terri", "Amilia", "Brett", "Daniella", "Damion", "Carolina", "Maximillian", "Travers", "Benjamin", "Oprah",
+ "Darcy", "Yolanda", "Nicolina", "Crofton", "Jarrett", "Kaitlin", "Shauna", "Keren", "Bevis", "Kalysta",
+ "Sharron", "Alyssa", "Blythe", "Zelma", "Caelie", "Norwood", "Billie", "Patrick", "Gary", "Cambria",
+ "Tylar", "Mason", "Helen", "Melyssa", "Gene", "Gilberta", "Carter", "Herbie", "Harmonie", "Leola",
+ "Eugenia", "Clint", "Pauletta", "Edwyna", "Georgina", "Teal", "Harper", "Izzy", "Dillon", "Kezia",
+ "Evangeline", "Colene", "Madelaine", "Zilla", "Rudy", "Dottie", "Caris", "Morton", "Marge", "Tacey",
+ "Parker", "Troy", "Liza", "Lewin", "Tracie", "Justine", "Dallas", "Linden", "Ray", "Loretta", "Teri",
+ "Elvis", "Diane", "Julianna", "Manfred", "Denise", "Eireen", "Ann", "Kenith", "Linwood", "Kathlyn",
+ "Bernice", "Shelley", "Oswald", "Amedeus", "Homer", "Tanzi", "Ted", "Ralphina", "Hyacinth", "Lotus",
+ "Matthias", "Arlette", "Clark", "Cecil", "Elspeth", "Alvena", "Noah", "Millard", "Brenden", "Cole",
+ "Philipa", "Nina", "Thelma", "Iantha", "Reid", "Jefferson", "Meg", "Elsie", "Shirlee", "Nathan", "Nancy",
+ "Simona", "Racheal", "Carin", "Emory", "Delice", "Kristi", "Karaugh", "Kaety", "Tilly", "Em", "Alanis",
+ "Darrin", "Jerrie", "Hollis", "Cary", "Marly", "Carita", "Jody", "Farley", "Hervey", "Rosalin", "Cuthbert",
+ "Stewart", "Jodene", "Caileigh", "Briscoe", "Dolores", "Sheree", "Eustace", "Nigel", "Detta", "Barret",
+ "Rowland", "Kenny", "Githa", "Zoey", "Adela", "Petronella", "Opal", "Coleman", "Niles", "Cyril", "Dona",
+ "Alberic", "Allannah", "Jules", "Avalon", "Hadley", "Thomas", "Renita", "Calanthe", "Heron", "Shawnda",
+ "Chet", "Malina", "Manny", "Rina", "Frieda", "Eveleen", "Deshawn", "Amos", "Raelene", "Paige", "Molly",
+ "Nannie", "Ileen", "Brendon", "Milford", "Unice", "Rebeccah", "Caedmon", "Gae", "Doreen", "Vivian", "Louis",
+ "Raphael", "Vergil", "Lise", "Glenn", "Karyn", "Terance", "Reina", "Jake", "Gordon", "Wisdom", "Isiah",
+ "Gervase", "Fern", "Marylou", "Roddy", "Justy", "Derick", "Shantelle", "Adam", "Chantel", "Madoline",
+ "Emmerson", "Lexie", "Mickey", "Stephen", "Dane", "Stacee", "Elwin", "Tracey", "Alexandra", "Ricky", "Ian",
+ "Kasey", "Rita", "Alanna", "Georgene", "Deon", "Zavier", "Ophelia", "Deforest", "Lowell", "Zubin", "Hardy",
+ "Osmund", "Tabatha", "Debby", "Katlyn", "Tallulah", "Priscilla", "Braden", "Wil", "Keziah", "Jen", "Aggie",
+ "Korbin", "Lemoine", "Barnaby", "Tranter", "Goldie", "Roderick", "Trina", "Emery", "Pris", "Sidony",
+ "Adelle", "Tate", "Wilf", "Zola", "Brande", "Chris", "Calanthia", "Lilly", "Kaycee", "Lashonda", "Jasmin",
+ "Elijah", "Shantel", "Simon", "Rosalind", "Jarod", "Kaylie", "Corrine", "Joselyn", "Archibald",
+ "Mariabella", "Winton", "Merlin", "Chad", "Ursula", "Kristopher", "Hewie", "Adrianna", "Lyndsay", "Jasmyn",
+ "Tim", "Evette", "Margaret", "Samson", "Bronte", "Terence", "Leila", "Candice", "Tori", "Jamey",
+ "Coriander", "Conrad", "Floyd", "Karen", "Lorin", "Maximilian", "Cairo", "Emily", "Yasmin", "Karolyn",
+ "Bryan", "Lanny", "Kimberly", "Rick", "Chaz", "Krystle", "Lyric", "Laura", "Garrick", "Flip", "Monty",
+ "Brendan", "Ermintrude", "Rayner", "Merla", "Titus", "Marva", "Patricia", "Leone", "Tracy", "Jaqueline",
+ "Hallam", "Delores", "Cressida", "Carlyle", "Leann", "Kelcey", "Laurence", "Ryan", "Reynold", "Mark",
+ "Collyn", "Audie", "Sammy", "Ellery", "Sallie", "Pamelia", "Adolph", "Lydia", "Titania", "Ron", "Bridger",
+ "Aline", "Read", "Kelleigh", "Weldon", "Irving", "Garey", "Diggory", "Evander", "Kylee", "Deidre", "Ormond",
+ "Laurine", "Reannon", "Arline", "Pat"
+
+ };
+
+ public static String[] jargon = { "wireless", "signal", "network", "3G", "plan", "touch-screen", "customer-service",
+ "reachability", "voice-command", "shortcut-menu", "customization", "platform", "speed", "voice-clarity",
+ "voicemail-service" };
+
+ public static String[] vendors = { "at&t", "verizon", "t-mobile", "sprint", "motorola", "samsung", "iphone" };
+
+ public static String[] org_list = { "Latsonity", "ganjalax", "Zuncan", "Lexitechno", "Hot-tech", "subtam",
+ "Coneflex", "Ganjatax", "physcane", "Tranzap", "Qvohouse", "Zununoing", "jaydax", "Keytech", "goldendexon",
+ "Villa-tech", "Trustbam", "Newcom", "Voltlane", "Ontohothex", "Ranhotfan", "Alphadax", "Transhigh",
+ "kin-ron", "Doublezone", "Solophase", "Vivaace", "silfind", "Basecone", "sonstreet", "Freshfix",
+ "Techitechi", "Kanelectrics", "linedexon", "Goldcity", "Newfase", "Technohow", "Zimcone", "Salthex",
+ "U-ron", "Solfix", "whitestreet", "Xx-technology", "Hexviafind", "over-it", "Strongtone", "Tripplelane",
+ "geomedia", "Scotcity", "Inchex", "Vaiatech", "Striptaxon", "Hatcom", "tresline", "Sanjodax", "freshdox",
+ "Sumlane", "Quadlane", "Newphase", "overtech", "Voltbam", "Icerunin", "Fixdintex", "Hexsanhex", "Statcode",
+ "Greencare", "U-electrics", "Zamcorporation", "Ontotanin", "Tanzimcare", "Groovetex", "Ganjastrip",
+ "Redelectronics", "Dandamace", "Whitemedia", "strongex", "Streettax", "highfax", "Mathtech", "Xx-drill",
+ "Sublamdox", "Unijobam", "Rungozoom", "Fixelectrics", "Villa-dox", "Ransaofan", "Plexlane", "itlab",
+ "Lexicone", "Fax-fax", "Viatechi", "Inchdox", "Kongreen", "Doncare", "Y-geohex", "Opeelectronics",
+ "Medflex", "Dancode", "Roundhex", "Labzatron", "Newhotplus", "Sancone", "Ronholdings", "Quoline",
+ "zoomplus", "Fix-touch", "Codetechno", "Tanzumbam", "Indiex", "Canline" };
+
+ public static void main(String[] args) throws Exception {
+ DataGeneratorForSpatialIndexEvaluation dg = new DataGeneratorForSpatialIndexEvaluation(
+ new InitializationInfo());
+ TweetMessageIterator tmi = dg.new TweetMessageIterator(1, new GULongIDGenerator(0, (byte) 0));
+ int len = 0;
+ int count = 0;
+ while (tmi.hasNext()) {
+ String tm = tmi.next().toString();
+ System.out.println(tm);
+ len += tm.length();
+ ++count;
+ }
+ System.out.println(DataGeneratorForSpatialIndexEvaluation.DUMMY_SIZE_ADJUSTER.length());
+ System.out.println(len);
+ System.out.println(count);
+ System.out.println(len / count);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/GULongIDGenerator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/GULongIDGenerator.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/GULongIDGenerator.java
new file mode 100644
index 0000000..00f3bcb
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/external/data/GULongIDGenerator.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.tools.external.data;
+
+import java.nio.ByteBuffer;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class GULongIDGenerator {
+
+ private final int partition;
+ private final long baseValue;
+ private final AtomicLong nextValue;
+
+ public GULongIDGenerator(int partition, byte seed) {
+ this.partition = partition;
+ ByteBuffer buffer = ByteBuffer.allocate(8);
+ buffer.put(seed);
+ buffer.put((byte) partition);
+ buffer.putInt(0);
+ buffer.putShort((short) 0);
+ buffer.flip();
+ this.baseValue = new Long(buffer.getLong());
+ this.nextValue = new AtomicLong(baseValue);
+ }
+
+ public long getNextULong() {
+ return nextValue.incrementAndGet();
+ }
+
+ public int getPartition() {
+ return partition;
+ }
+
+}
[8/8] asterixdb git commit: Move Twitter Firehose Datasource to Test
Source Folder
Posted by mb...@apache.org.
Move Twitter Firehose Datasource to Test Source Folder
Change-Id: Iefe2130707012b8ce60f5dfac96635a1a515a076
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1290
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mb...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/cb92dad7
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/cb92dad7
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/cb92dad7
Branch: refs/heads/master
Commit: cb92dad732fb6094c70bfbd75cbfabe7352c3923
Parents: 9ddf5e0
Author: Abdullah Alamoudi <ba...@gmail.com>
Authored: Sat Oct 15 08:50:24 2016 -0700
Committer: Michael Blow <mb...@apache.org>
Committed: Sat Oct 15 11:01:05 2016 -0700
----------------------------------------------------------------------
.../queries/feeds/feeds_07/feeds_07.1.ddl.aql | 4 +-
.../queries/feeds/feeds_08/feeds_08.1.ddl.aql | 3 +-
.../queries/feeds/feeds_09/feeds_09.1.ddl.aql | 4 +-
.../feeds/feeds_07/feeds_07.1.ddl.sqlpp | 4 +-
.../feeds/feeds_08/feeds_08.1.ddl.sqlpp | 3 +-
.../feeds/feeds_09/feeds_09.1.ddl.sqlpp | 4 +-
asterixdb/asterix-experiments/pom.xml | 1 +
asterixdb/asterix-external-data/pom.xml | 10 +-
.../stream/TwitterFirehoseInputStream.java | 158 ---
.../factory/TwitterFirehoseStreamFactory.java | 102 --
.../provider/DatasourceFactoryProvider.java | 6 -
.../asterix/external/util/DataGenerator.java | 1189 ----------------
.../external/util/ExternalDataConstants.java | 1 -
.../asterix/external/util/TweetGenerator.java | 154 --
.../external/generator/DataGenerator.java | 1192 ++++++++++++++++
.../external/generator/TweetGenerator.java | 154 ++
.../stream/TwitterFirehoseInputStream.java | 158 +++
.../stream/TwitterFirehoseStreamFactory.java | 102 ++
asterixdb/asterix-tools/pom.xml | 18 +-
.../asterix/tools/datagen/AdgClientDriver.java | 52 -
.../asterix/tools/datagen/AdmDataGen.java | 1020 -------------
.../asterix/tools/datagen/CustOrdDataGen.java | 476 -------
.../asterix/tools/datagen/EventDataGen.java | 237 ----
.../DataGeneratorForSpatialIndexEvaluation.java | 1341 ------------------
.../tools/external/data/GULongIDGenerator.java | 50 -
...TweetGeneratorForSpatialIndexEvaluation.java | 139 --
.../apache/asterix/tools/tbltoadm/TblToAdm.java | 97 --
.../tools/translator/ADGenDmlTranslator.java | 91 --
.../asterix/tools/datagen/AdgClientDriver.java | 52 +
.../asterix/tools/datagen/AdmDataGen.java | 1020 +++++++++++++
.../asterix/tools/datagen/CustOrdDataGen.java | 476 +++++++
.../asterix/tools/datagen/EventDataGen.java | 237 ++++
.../DataGeneratorForSpatialIndexEvaluation.java | 1341 ++++++++++++++++++
.../tools/external/data/GULongIDGenerator.java | 50 +
...TweetGeneratorForSpatialIndexEvaluation.java | 139 ++
.../apache/asterix/tools/tbltoadm/TblToAdm.java | 97 ++
.../tools/translator/ADGenDmlTranslator.java | 91 ++
37 files changed, 5139 insertions(+), 5134 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_07/feeds_07.1.ddl.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_07/feeds_07.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_07/feeds_07.1.ddl.aql
index 70ea8d6..f3f8f7d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_07/feeds_07.1.ddl.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_07/feeds_07.1.ddl.aql
@@ -54,12 +54,12 @@ create dataset SyntheticTweets(TweetMessageType)
primary key id;
create feed SyntheticTweetFeed
-using twitter_firehose(
+using stream(
("duration"="5"),
("tps"="50"),
("type-name"="TweetMessageType"),
("format"="adm"),
-("reader-stream"="twitter_firehose"),
+("stream-source"="org.apache.asterix.external.input.stream.TwitterFirehoseStreamFactory"),
("tput-duration"="5"),
("dataverse-dataset"="feeds:SyntheticTweets"),
("mode"="controlled"));
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_08/feeds_08.1.ddl.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_08/feeds_08.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_08/feeds_08.1.ddl.aql
index 658487b..c339563 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_08/feeds_08.1.ddl.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_08/feeds_08.1.ddl.aql
@@ -58,8 +58,9 @@ primary key id;
create index ngram_index on SyntheticTweets(message_text) type ngram(3);
create feed SyntheticTweetFeed
-using twitter_firehose
+using stream
(("duration"="5"),
+("stream-source"="org.apache.asterix.external.input.stream.TwitterFirehoseStreamFactory"),
("tps"="50"),
("type-name"="TweetMessageType"),
("tput-duration"="5"),
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_09/feeds_09.1.ddl.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_09/feeds_09.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_09/feeds_09.1.ddl.aql
index 6714850..59385c4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_09/feeds_09.1.ddl.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_09/feeds_09.1.ddl.aql
@@ -56,12 +56,12 @@ primary key id;
create index message_text on SyntheticTweets(message_text) type btree;
create feed SyntheticTweetFeed
-using twitter_firehose
+using stream
(("duration"="5"),
("tps"="50"),
("tput-duration"="5"),
("type-name"="TweetMessageType"),
("dataverse-dataset"="feeds:SyntheticTweets"),
("format"="adm"),
-("reader-stream"="twitter_firehose"),
+("stream-source"="org.apache.asterix.external.input.stream.TwitterFirehoseStreamFactory"),
("mode"="controlled"));
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_07/feeds_07.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_07/feeds_07.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_07/feeds_07.1.ddl.sqlpp
index e3f3ae5..1f24192 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_07/feeds_07.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_07/feeds_07.1.ddl.sqlpp
@@ -45,12 +45,12 @@ create type feeds.TweetMessageType as
create dataset SyntheticTweets(TweetMessageType) primary key id;
-create primary feed SyntheticTweetFeed using twitter_firehose(
+create primary feed SyntheticTweetFeed using stream(
(`duration`=`5`),
(`tps`=`50`),
(`type-name`=`TweetMessageType`),
(`format`=`adm`),
-(`reader-stream`=`twitter_firehose`),
+(`stream-source`=`org.apache.asterix.external.input.stream.TwitterFirehoseStreamFactory`),
(`tput-duration`=`5`),
(`dataverse-dataset`=`feeds:SyntheticTweets`),
(`mode`=`controlled`));
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_08/feeds_08.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_08/feeds_08.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_08/feeds_08.1.ddl.sqlpp
index a98b745..6311b8b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_08/feeds_08.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_08/feeds_08.1.ddl.sqlpp
@@ -45,9 +45,10 @@ create type feeds.TweetMessageType as
create dataset SyntheticTweets(TweetMessageType) primary key id;
create index ngram_index on SyntheticTweets (message_text) type ngram (3);
-create primary feed SyntheticTweetFeed using twitter_firehose (
+create primary feed SyntheticTweetFeed using stream (
(`duration`=`5`),
(`tps`=`50`),
+(`stream-source`=`org.apache.asterix.external.input.stream.TwitterFirehoseStreamFactory`),
(`type-name`=`TweetMessageType`),
(`tput-duration`=`5`),
(`dataverse-dataset`=`feeds:SyntheticTweets`),
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_09/feeds_09.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_09/feeds_09.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_09/feeds_09.1.ddl.sqlpp
index 1b1c780..71a0ca2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_09/feeds_09.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_09/feeds_09.1.ddl.sqlpp
@@ -45,7 +45,7 @@ create type feeds_09.TweetMessageType as
}
create dataset SyntheticTweets(TweetMessageType) primary key id;
create index message_text on SyntheticTweets (message_text) type btree;
-create primary feed SyntheticTweetFeed using twitter_firehose ((`duration`=`5`),
+create primary feed SyntheticTweetFeed using stream ((`duration`=`5`),
(`tps`=`50`),(`tput-duration`=`5`),(`type-name`=`TweetMessageType`),
(`dataverse-dataset`=`feeds:SyntheticTweets`),(`format`=`adm`),
-(`reader-stream`=`twitter_firehose`),(`mode`=`controlled`));
+(`stream-source`=`org.apache.asterix.external.input.stream.TwitterFirehoseStreamFactory`),(`mode`=`controlled`));
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-experiments/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-experiments/pom.xml b/asterixdb/asterix-experiments/pom.xml
index b923fba..2718565 100644
--- a/asterixdb/asterix-experiments/pom.xml
+++ b/asterixdb/asterix-experiments/pom.xml
@@ -153,6 +153,7 @@
<groupId>org.apache.asterix</groupId>
<artifactId>asterix-tools</artifactId>
<version>${project.version}</version>
+ <type>test-jar</type>
</dependency>
<dependency>
<groupId>com.hierynomus</groupId>
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/pom.xml b/asterixdb/asterix-external-data/pom.xml
index 245f340..0cc6826 100644
--- a/asterixdb/asterix-external-data/pom.xml
+++ b/asterixdb/asterix-external-data/pom.xml
@@ -202,8 +202,6 @@
<groupId>org.apache.asterix</groupId>
<artifactId>asterix-runtime</artifactId>
<version>${project.version}</version>
- <type>jar</type>
- <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.hyracks</groupId>
@@ -242,8 +240,7 @@
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
- <type>jar</type>
- <scope>compile</scope>
+ <scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.sun.jersey.jersey-test-framework</groupId>
@@ -269,8 +266,6 @@
<groupId>net.java.dev.rome</groupId>
<artifactId>rome-fetcher</artifactId>
<version>1.0.0</version>
- <type>jar</type>
- <scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>rome</artifactId>
@@ -287,11 +282,13 @@
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.0</version>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>com.microsoft.windowsazure</groupId>
<artifactId>microsoft-windowsazure-api</artifactId>
<version>0.4.4</version>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
@@ -302,6 +299,7 @@
<groupId>javax.jdo</groupId>
<artifactId>jdo2-api</artifactId>
<version>2.3-20090302111651</version>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>com.e-movimento.tinytools</groupId>
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/TwitterFirehoseInputStream.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/TwitterFirehoseInputStream.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/TwitterFirehoseInputStream.java
deleted file mode 100644
index e2afd7b..0000000
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/TwitterFirehoseInputStream.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.external.input.stream;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.asterix.external.api.AsterixInputStream;
-import org.apache.asterix.external.util.TweetGenerator;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-
-public class TwitterFirehoseInputStream extends AsterixInputStream {
-
- private static final Logger LOGGER = Logger.getLogger(TwitterFirehoseInputStream.class.getName());
- private final ExecutorService executorService;
- private final PipedOutputStream outputStream;
- private final PipedInputStream inputStream;
- private final DataProvider dataProvider;
- private boolean started;
-
- public TwitterFirehoseInputStream(Map<String, String> configuration, IHyracksTaskContext ctx, int partition)
- throws IOException {
- executorService = Executors.newCachedThreadPool();
- outputStream = new PipedOutputStream();
- inputStream = new PipedInputStream(outputStream);
- dataProvider = new DataProvider(configuration, partition, outputStream);
- started = false;
- }
-
- @Override
- public boolean stop() throws IOException {
- dataProvider.stop();
- return true;
- }
-
- public synchronized void start() {
- if (!started) {
- executorService.execute(dataProvider);
- started = true;
- }
- }
-
- @Override
- public int read() throws IOException {
- if (!started) {
- start();
- }
- return inputStream.read();
- }
-
- @Override
- public int read(byte b[], int off, int len) throws IOException {
- if (!started) {
- start();
- }
- return inputStream.read(b, off, len);
- }
-
- @Override
- public boolean handleException(Throwable th) {
- return false;
- }
-
- private static class DataProvider implements Runnable {
-
- public static final String KEY_MODE = "mode";
-
- private final TweetGenerator tweetGenerator;
- private boolean continuePush = true;
- private int batchSize;
- private final Mode mode;
- private final OutputStream os;
-
- public static enum Mode {
- AGGRESSIVE,
- CONTROLLED
- }
-
- public DataProvider(Map<String, String> configuration, int partition, OutputStream os) {
- this.tweetGenerator = new TweetGenerator(configuration, partition);
- this.tweetGenerator.registerSubscriber(os);
- this.os = os;
- mode = configuration.get(KEY_MODE) != null ? Mode.valueOf(configuration.get(KEY_MODE).toUpperCase())
- : Mode.AGGRESSIVE;
- switch (mode) {
- case CONTROLLED:
- String tpsValue = configuration.get(TweetGenerator.KEY_TPS);
- if (tpsValue == null) {
- throw new IllegalArgumentException("TPS value not configured. use tps=<value>");
- }
- batchSize = Integer.parseInt(tpsValue);
- break;
- case AGGRESSIVE:
- batchSize = 5000;
- break;
- }
- }
-
- @Override
- public void run() {
- boolean moreData = true;
- long startBatch;
- long endBatch;
- while (true) {
- try {
- while (moreData && continuePush) {
- switch (mode) {
- case AGGRESSIVE:
- moreData = tweetGenerator.generateNextBatch(batchSize);
- break;
- case CONTROLLED:
- startBatch = System.currentTimeMillis();
- moreData = tweetGenerator.generateNextBatch(batchSize);
- endBatch = System.currentTimeMillis();
- if ((endBatch - startBatch) < 1000) {
- Thread.sleep(1000 - (endBatch - startBatch));
- }
- break;
- }
- }
- os.close();
- break;
- } catch (Exception e) {
- if (LOGGER.isLoggable(Level.WARNING)) {
- LOGGER.warning("Exception in adapter " + e.getMessage());
- }
- }
- }
- }
-
- public void stop() {
- continuePush = false;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/factory/TwitterFirehoseStreamFactory.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/factory/TwitterFirehoseStreamFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/factory/TwitterFirehoseStreamFactory.java
deleted file mode 100644
index abe67fd..0000000
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/factory/TwitterFirehoseStreamFactory.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.external.input.stream.factory;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.asterix.external.api.AsterixInputStream;
-import org.apache.asterix.external.api.IInputStreamFactory;
-import org.apache.asterix.external.input.stream.TwitterFirehoseInputStream;
-import org.apache.asterix.runtime.util.ClusterStateManager;
-import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-/**
- * Factory class for creating @see{TwitterFirehoseFeedAdapter}. The adapter
- * simulates a twitter firehose with tweets being "pushed" into Asterix at a
- * configurable rate measured in terms of TPS (tweets/second). The stream of
- * tweets lasts for a configurable duration (measured in seconds).
- */
-public class TwitterFirehoseStreamFactory implements IInputStreamFactory {
-
- private static final long serialVersionUID = 1L;
-
- /**
- * Degree of parallelism for feed ingestion activity. Defaults to 1. This
- * determines the count constraint for the ingestion operator.
- **/
- private static final String KEY_INGESTION_CARDINALITY = "ingestion-cardinality";
-
- /**
- * The absolute locations where ingestion operator instances will be placed.
- **/
- private static final String KEY_INGESTION_LOCATIONS = "ingestion-location";
-
- private Map<String, String> configuration;
-
- @Override
- public AlgebricksAbsolutePartitionConstraint getPartitionConstraint() {
- String ingestionCardinalityParam = configuration.get(KEY_INGESTION_CARDINALITY);
- String ingestionLocationParam = configuration.get(KEY_INGESTION_LOCATIONS);
- String[] locations = null;
- if (ingestionLocationParam != null) {
- locations = ingestionLocationParam.split(",");
- }
- int count = locations != null ? locations.length : 1;
- if (ingestionCardinalityParam != null) {
- count = Integer.parseInt(ingestionCardinalityParam);
- }
-
- List<String> chosenLocations = new ArrayList<String>();
- String[] availableLocations = locations != null ? locations
- : ClusterStateManager.INSTANCE.getParticipantNodes().toArray(new String[] {});
- for (int i = 0, k = 0; i < count; i++, k = (k + 1) % availableLocations.length) {
- chosenLocations.add(availableLocations[k]);
- }
- return new AlgebricksAbsolutePartitionConstraint(chosenLocations.toArray(new String[] {}));
- }
-
- @Override
- public DataSourceType getDataSourceType() {
- return DataSourceType.STREAM;
- }
-
- @Override
- public void configure(Map<String, String> configuration) {
- this.configuration = configuration;
- }
-
- @Override
- public boolean isIndexible() {
- return false;
- }
-
- @Override
- public AsterixInputStream createInputStream(IHyracksTaskContext ctx, int partition) throws HyracksDataException {
- try {
- return new TwitterFirehoseInputStream(configuration, ctx, partition);
- } catch (IOException e) {
- throw new HyracksDataException(e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DatasourceFactoryProvider.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DatasourceFactoryProvider.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DatasourceFactoryProvider.java
index ad11171..7ab6430 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DatasourceFactoryProvider.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DatasourceFactoryProvider.java
@@ -33,7 +33,6 @@ import org.apache.asterix.external.input.record.reader.twitter.TwitterRecordRead
import org.apache.asterix.external.input.stream.factory.LocalFSInputStreamFactory;
import org.apache.asterix.external.input.stream.factory.SocketClientInputStreamFactory;
import org.apache.asterix.external.input.stream.factory.SocketServerInputStreamFactory;
-import org.apache.asterix.external.input.stream.factory.TwitterFirehoseStreamFactory;
import org.apache.asterix.external.util.ExternalDataConstants;
import org.apache.asterix.external.util.ExternalDataUtils;
@@ -73,9 +72,6 @@ public class DatasourceFactoryProvider {
case ExternalDataConstants.STREAM_SOCKET_CLIENT:
streamSourceFactory = new SocketServerInputStreamFactory();
break;
- case ExternalDataConstants.ALIAS_TWITTER_FIREHOSE_ADAPTER:
- streamSourceFactory = new TwitterFirehoseStreamFactory();
- break;
default:
try {
streamSourceFactory = (IInputStreamFactory) Class.forName(streamSource).newInstance();
@@ -102,8 +98,6 @@ public class DatasourceFactoryProvider {
case ExternalDataConstants.READER_PUSH_TWITTER:
case ExternalDataConstants.READER_PULL_TWITTER:
return new TwitterRecordReaderFactory();
- case ExternalDataConstants.ALIAS_TWITTER_FIREHOSE_ADAPTER:
- return new StreamRecordReaderFactory(new TwitterFirehoseStreamFactory());
case ExternalDataConstants.ALIAS_SOCKET_ADAPTER:
case ExternalDataConstants.SOCKET:
return new StreamRecordReaderFactory(new SocketServerInputStreamFactory());
[7/8] asterixdb git commit: Move Twitter Firehose Datasource to Test
Source Folder
Posted by mb...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/DataGenerator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/DataGenerator.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/DataGenerator.java
deleted file mode 100644
index 59c9a0f..0000000
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/DataGenerator.java
+++ /dev/null
@@ -1,1189 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.external.util;
-
-import java.nio.CharBuffer;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Random;
-
-public class DataGenerator {
-
- private RandomDateGenerator randDateGen;
- private RandomNameGenerator randNameGen;
- private RandomMessageGenerator randMessageGen;
- private RandomLocationGenerator randLocationGen;
- private Random random = new Random();
- private TwitterUser twUser = new TwitterUser();
- private TweetMessage twMessage = new TweetMessage();
- private static final String DEFAULT_COUNTRY = "US";
-
- public DataGenerator(InitializationInfo info) {
- initialize(info);
- }
-
- public class TweetMessageIterator implements Iterator<TweetMessage> {
-
- private final int duration;
- private long startTime = 0;
- private int tweetId;
-
- public TweetMessageIterator(int duration) {
- this.duration = duration;
- this.startTime = System.currentTimeMillis();
- }
-
- @Override
- public boolean hasNext() {
- if (duration == TweetGenerator.INFINITY) {
- return true;
- }
- return System.currentTimeMillis() - startTime <= duration * 1000;
- }
-
- @Override
- public TweetMessage next() {
- tweetId++;
- TweetMessage msg = null;
- getTwitterUser(null);
- Message message = randMessageGen.getNextRandomMessage();
- Point location = randLocationGen.getRandomPoint();
- DateTime sendTime = randDateGen.getNextRandomDatetime();
- twMessage.reset(tweetId, twUser, location.getLatitude(), location.getLongitude(), sendTime.toString(),
- message, DEFAULT_COUNTRY);
- msg = twMessage;
- return msg;
- }
-
- @Override
- public void remove() {
- // TODO Auto-generated method stub
-
- }
-
- }
-
- public static class InitializationInfo {
- public Date startDate = new Date(1, 1, 2005);
- public Date endDate = new Date(8, 20, 2012);
- public String[] lastNames = DataGenerator.lastNames;
- public String[] firstNames = DataGenerator.firstNames;
- public String[] vendors = DataGenerator.vendors;
- public String[] jargon = DataGenerator.jargon;
- public String[] org_list = DataGenerator.org_list;
- }
-
- public void initialize(InitializationInfo info) {
- randDateGen = new RandomDateGenerator(info.startDate, info.endDate);
- randNameGen = new RandomNameGenerator(info.firstNames, info.lastNames);
- randLocationGen = new RandomLocationGenerator(24, 49, 66, 98);
- randMessageGen = new RandomMessageGenerator(info.vendors, info.jargon);
- }
-
- public void getTwitterUser(String usernameSuffix) {
- String suggestedName = randNameGen.getRandomName();
- String[] nameComponents = suggestedName.split(" ");
- String screenName = nameComponents[0] + nameComponents[1] + randNameGen.getRandomNameSuffix();
- String name = suggestedName;
- if (usernameSuffix != null) {
- name = name + usernameSuffix;
- }
- int numFriends = random.nextInt((100)); // draw from Zipfian
- int statusesCount = random.nextInt(500); // draw from Zipfian
- int followersCount = random.nextInt((200));
- twUser.reset(screenName, numFriends, statusesCount, name, followersCount);
- }
-
- public static class RandomDateGenerator {
-
- private final Date startDate;
- private final Date endDate;
- private final Random random = new Random();
- private final int yearDifference;
- private Date workingDate;
- private Date recentDate;
- private DateTime dateTime;
-
- public RandomDateGenerator(Date startDate, Date endDate) {
- this.startDate = startDate;
- this.endDate = endDate;
- this.yearDifference = endDate.getYear() - startDate.getYear() + 1;
- this.workingDate = new Date();
- this.recentDate = new Date();
- this.dateTime = new DateTime();
- }
-
- public Date getStartDate() {
- return startDate;
- }
-
- public Date getEndDate() {
- return endDate;
- }
-
- public Date getNextRandomDate() {
- int year = random.nextInt(yearDifference) + startDate.getYear();
- int month;
- int day;
- if (year == endDate.getYear()) {
- month = random.nextInt(endDate.getMonth()) + 1;
- if (month == endDate.getMonth()) {
- day = random.nextInt(endDate.getDay()) + 1;
- } else {
- day = random.nextInt(28) + 1;
- }
- } else {
- month = random.nextInt(12) + 1;
- day = random.nextInt(28) + 1;
- }
- workingDate.reset(month, day, year);
- return workingDate;
- }
-
- public DateTime getNextRandomDatetime() {
- Date randomDate = getNextRandomDate();
- dateTime.reset(randomDate);
- return dateTime;
- }
-
- public Date getNextRecentDate(Date date) {
- int year = date.getYear()
- + (date.getYear() == endDate.getYear() ? 0 : random.nextInt(endDate.getYear() - date.getYear()));
- int month = (year == endDate.getYear())
- ? date.getMonth() == endDate.getMonth() ? (endDate.getMonth())
- : (date.getMonth() + random.nextInt(endDate.getMonth() - date.getMonth()))
- : random.nextInt(12) + 1;
-
- int day = (year == endDate.getYear())
- ? month == endDate.getMonth()
- ? date.getDay() == endDate.getDay() ? endDate.getDay()
- : date.getDay() + random.nextInt(endDate.getDay() - date.getDay())
- : random.nextInt(28) + 1
- : random.nextInt(28) + 1;
- recentDate.reset(month, day, year);
- return recentDate;
- }
-
- }
-
- public static class DateTime extends Date {
-
- private String hour = "10";
- private String min = "10";
- private String sec = "00";
-
- public DateTime(int month, int day, int year, String hour, String min, String sec) {
- super(month, day, year);
- this.hour = hour;
- this.min = min;
- this.sec = sec;
- }
-
- public DateTime() {
- }
-
- public void reset(int month, int day, int year, String hour, String min, String sec) {
- super.setDay(month);
- super.setDay(day);
- super.setYear(year);
- this.hour = hour;
- this.min = min;
- this.sec = sec;
- }
-
- public DateTime(Date date) {
- super(date.getMonth(), date.getDay(), date.getYear());
- }
-
- public void reset(Date date) {
- reset(date.getMonth(), date.getDay(), date.getYear());
- }
-
- public DateTime(Date date, int hour, int min, int sec) {
- super(date.getMonth(), date.getDay(), date.getYear());
- this.hour = (hour < 10) ? "0" : "" + hour;
- this.min = (min < 10) ? "0" : "" + min;
- this.sec = (sec < 10) ? "0" : "" + sec;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("\"");
- builder.append(super.getYear());
- builder.append("-");
- builder.append(super.getMonth() < 10 ? "0" + super.getMonth() : super.getMonth());
- builder.append("-");
- builder.append(super.getDay() < 10 ? "0" + super.getDay() : super.getDay());
- builder.append("T");
- builder.append(hour + ":" + min + ":" + sec);
- builder.append("\"");
- return builder.toString();
- }
- }
-
- public static class Message {
-
- private char[] message = new char[500];
- private List<String> referredTopics;
- private int length;
-
- public Message(char[] m, List<String> referredTopics) {
- System.arraycopy(m, 0, message, 0, m.length);
- length = m.length;
- this.referredTopics = referredTopics;
- }
-
- public Message() {
- referredTopics = new ArrayList<String>();
- length = 0;
- }
-
- public List<String> getReferredTopics() {
- return referredTopics;
- }
-
- public void reset(char[] m, int offset, int length, List<String> referredTopics) {
- System.arraycopy(m, offset, message, 0, length);
- this.length = length;
- this.referredTopics = referredTopics;
- }
-
- public int getLength() {
- return length;
- }
-
- public char charAt(int index) {
- return message[index];
- }
-
- }
-
- public static class Point {
-
- private float latitude;
- private float longitude;
-
- public float getLatitude() {
- return latitude;
- }
-
- public float getLongitude() {
- return longitude;
- }
-
- public Point(float latitude, float longitude) {
- this.latitude = latitude;
- this.longitude = longitude;
- }
-
- public void reset(float latitude, float longitude) {
- this.latitude = latitude;
- this.longitude = longitude;
- }
-
- public Point() {
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("point(\"" + latitude + "," + longitude + "\")");
- return builder.toString();
- }
- }
-
- public static class RandomNameGenerator {
-
- private String[] firstNames;
- private String[] lastNames;
-
- private final Random random = new Random();
-
- private final String[] connectors = new String[] { "_", "#", "$", "@" };
-
- public RandomNameGenerator(String[] firstNames, String[] lastNames) {
- this.firstNames = firstNames;
- this.lastNames = lastNames;
- }
-
- public String getRandomName() {
- String name;
- name = getSuggestedName();
- return name;
-
- }
-
- private String getSuggestedName() {
- int firstNameIndex = random.nextInt(firstNames.length);
- int lastNameIndex = random.nextInt(lastNames.length);
- String suggestedName = firstNames[firstNameIndex] + " " + lastNames[lastNameIndex];
- return suggestedName;
- }
-
- public String getRandomNameSuffix() {
- return connectors[random.nextInt(connectors.length)] + random.nextInt(1000);
- }
- }
-
- public static class RandomMessageGenerator {
-
- private final MessageTemplate messageTemplate;
-
- public RandomMessageGenerator(String[] vendors, String[] jargon) {
- List<String> vendorList = new ArrayList<String>();
- for (String v : vendors) {
- vendorList.add(v);
- }
- List<String> jargonList = new ArrayList<String>();
- for (String j : jargon) {
- jargonList.add(j);
- }
- this.messageTemplate = new MessageTemplate(vendorList, jargonList);
- }
-
- public Message getNextRandomMessage() {
- return messageTemplate.getNextMessage();
- }
- }
-
- public static class AbstractMessageTemplate {
-
- protected final Random random = new Random();
-
- protected String[] positiveVerbs = new String[] { "like", "love" };
- protected String[] negativeVerbs = new String[] { "dislike", "hate", "can't stand" };
-
- protected String[] negativeAdjectives = new String[] { "horrible", "bad", "terrible", "OMG" };
- protected String[] postiveAdjectives = new String[] { "good", "awesome", "amazing", "mind-blowing" };
-
- protected String[] otherWords = new String[] { "the", "its" };
- }
-
- public static class MessageTemplate extends AbstractMessageTemplate {
-
- private List<String> vendors;
- private List<String> jargon;
- private CharBuffer buffer;
- private List<String> referredTopics;
- private Message message = new Message();
-
- public MessageTemplate(List<String> vendors, List<String> jargon) {
- this.vendors = vendors;
- this.jargon = jargon;
- buffer = CharBuffer.allocate(2500);
- referredTopics = new ArrayList<String>();
- }
-
- public Message getNextMessage() {
- buffer.position(0);
- buffer.limit(2500);
- referredTopics.clear();
- boolean isPositive = random.nextBoolean();
- String[] verbArray = isPositive ? positiveVerbs : negativeVerbs;
- String[] adjectiveArray = isPositive ? postiveAdjectives : negativeAdjectives;
- String verb = verbArray[random.nextInt(verbArray.length)];
- String adjective = adjectiveArray[random.nextInt(adjectiveArray.length)];
-
- buffer.put(" ");
- buffer.put(verb);
- buffer.put(" ");
- String vendor = vendors.get(random.nextInt(vendors.size()));
- referredTopics.add(vendor);
- buffer.append(vendor);
- buffer.append(" ");
- buffer.append(otherWords[random.nextInt(otherWords.length)]);
- buffer.append(" ");
- String jargonTerm = jargon.get(random.nextInt(jargon.size()));
- referredTopics.add(jargonTerm);
- buffer.append(jargonTerm);
- buffer.append(" is ");
- buffer.append(adjective);
- if (random.nextBoolean()) {
- buffer.append(isPositive ? ":)" : ":(");
- }
-
- buffer.flip();
- message.reset(buffer.array(), 0, buffer.limit(), referredTopics);
- return message;
- }
- }
-
- public static class RandomUtil {
-
- public static Random random = new Random();
-
- public static int[] getKFromN(int k, int n) {
- int[] result = new int[k];
- int cnt = 0;
- HashSet<Integer> values = new HashSet<Integer>();
- while (cnt < k) {
- int val = random.nextInt(n + 1);
- if (values.contains(val)) {
- continue;
- }
-
- result[cnt++] = val;
- values.add(val);
- }
- return result;
- }
- }
-
- public static class RandomLocationGenerator {
-
- private Random random = new Random();
-
- private final int beginLat;
- private final int endLat;
- private final int beginLong;
- private final int endLong;
-
- private Point point;
-
- public RandomLocationGenerator(int beginLat, int endLat, int beginLong, int endLong) {
- this.beginLat = beginLat;
- this.endLat = endLat;
- this.beginLong = beginLong;
- this.endLong = endLong;
- this.point = new Point();
- }
-
- public Point getRandomPoint() {
- int latMajor = beginLat + random.nextInt(endLat - beginLat);
- int latMinor = random.nextInt(100);
- float latitude = latMajor + ((float) latMinor) / 100;
-
- int longMajor = beginLong + random.nextInt(endLong - beginLong);
- int longMinor = random.nextInt(100);
- float longitude = longMajor + ((float) longMinor) / 100;
-
- point.reset(latitude, longitude);
- return point;
- }
-
- }
-
- public static class TweetMessage {
-
- private static final String[] DEFAULT_FIELDS = new String[] { TweetFields.TWEETID, TweetFields.USER,
- TweetFields.LATITUDE, TweetFields.LONGITUDE, TweetFields.MESSAGE_TEXT, TweetFields.CREATED_AT,
- TweetFields.COUNTRY };
-
- private int id;
- private TwitterUser user;
- private double latitude;
- private double longitude;
- private String created_at;
- private Message messageText;
- private String country;
-
- public static final class TweetFields {
- public static final String TWEETID = "id";
- public static final String USER = "user";
- public static final String LATITUDE = "latitude";
- public static final String LONGITUDE = "longitude";
- public static final String MESSAGE_TEXT = "message_text";
- public static final String CREATED_AT = "created_at";
- public static final String COUNTRY = "country";
-
- }
-
- public TweetMessage() {
- }
-
- public TweetMessage(int tweetid, TwitterUser user, double latitude, double longitude, String created_at,
- Message messageText, String country) {
- this.id = tweetid;
- this.user = user;
- this.latitude = latitude;
- this.longitude = longitude;
- this.created_at = created_at;
- this.messageText = messageText;
- this.country = country;
- }
-
- public void reset(int tweetid, TwitterUser user, double latitude, double longitude, String created_at,
- Message messageText, String country) {
- this.id = tweetid;
- this.user = user;
- this.latitude = latitude;
- this.longitude = longitude;
- this.created_at = created_at;
- this.messageText = messageText;
- this.country = country;
- }
-
- public String getAdmEquivalent(String[] fields) {
- if (fields == null) {
- fields = DEFAULT_FIELDS;
- }
- StringBuilder builder = new StringBuilder();
- builder.append("{");
- for (String field : fields) {
- switch (field) {
- case Datatypes.Tweet.ID:
- appendFieldName(builder, Datatypes.Tweet.ID);
- builder.append("int64(\"" + id + "\")");
- break;
- case Datatypes.Tweet.USER:
- appendFieldName(builder, Datatypes.Tweet.USER);
- builder.append(user);
- break;
- case Datatypes.Tweet.LATITUDE:
- appendFieldName(builder, Datatypes.Tweet.LATITUDE);
- builder.append(latitude);
- break;
- case Datatypes.Tweet.LONGITUDE:
- appendFieldName(builder, Datatypes.Tweet.LONGITUDE);
- builder.append(longitude);
- break;
- case Datatypes.Tweet.MESSAGE:
- appendFieldName(builder, Datatypes.Tweet.MESSAGE);
- builder.append("\"");
- for (int i = 0; i < messageText.getLength(); i++) {
- builder.append(messageText.charAt(i));
- }
- builder.append("\"");
- break;
- case Datatypes.Tweet.CREATED_AT:
- appendFieldName(builder, Datatypes.Tweet.CREATED_AT);
- builder.append(created_at);
- break;
- case Datatypes.Tweet.COUNTRY:
- appendFieldName(builder, Datatypes.Tweet.COUNTRY);
- builder.append("\"" + country + "\"");
- break;
- }
- builder.append(",");
- }
- builder.deleteCharAt(builder.length() - 1);
- builder.append("}");
- return builder.toString();
- }
-
- private void appendFieldName(StringBuilder builder, String fieldName) {
- builder.append("\"" + fieldName + "\":");
- }
-
- public int getTweetid() {
- return id;
- }
-
- public void setTweetid(int tweetid) {
- this.id = tweetid;
- }
-
- public TwitterUser getUser() {
- return user;
- }
-
- public void setUser(TwitterUser user) {
- this.user = user;
- }
-
- public double getLatitude() {
- return latitude;
- }
-
- public String getSendTime() {
- return created_at;
- }
-
- public Message getMessageText() {
- return messageText;
- }
-
- public void setMessageText(Message messageText) {
- this.messageText = messageText;
- }
-
- public String getCountry() {
- return country;
- }
-
- }
-
- public static class TwitterUser {
-
- private String screenName;
- private String lang = "en";
- private int friendsCount;
- private int statusesCount;
- private String name;
- private int followersCount;
-
- public TwitterUser() {
-
- }
-
- public TwitterUser(String screenName, int friendsCount, int statusesCount, String name, int followersCount) {
- this.screenName = screenName;
- this.friendsCount = friendsCount;
- this.statusesCount = statusesCount;
- this.name = name;
- this.followersCount = followersCount;
- }
-
- public void reset(String screenName, int friendsCount, int statusesCount, String name, int followersCount) {
- this.screenName = screenName;
- this.friendsCount = friendsCount;
- this.statusesCount = statusesCount;
- this.name = name;
- this.followersCount = followersCount;
- }
-
- public String getScreenName() {
- return screenName;
- }
-
- public int getFriendsCount() {
- return friendsCount;
- }
-
- public int getStatusesCount() {
- return statusesCount;
- }
-
- public String getName() {
- return name;
- }
-
- public int getFollowersCount() {
- return followersCount;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("{");
- builder.append("\"screen_name\":" + "\"" + screenName + "\"");
- builder.append(",");
- builder.append("\"language\":" + "\"" + lang + "\"");
- builder.append(",");
- builder.append("\"friends_count\":" + friendsCount);
- builder.append(",");
- builder.append("\"status_count\":" + statusesCount);
- builder.append(",");
- builder.append("\"name\":" + "\"" + name + "\"");
- builder.append(",");
- builder.append("\"followers_count\":" + followersCount);
- builder.append("}");
- return builder.toString();
- }
-
- }
-
- public static class Date {
-
- private int day;
- private int month;
- private int year;
-
- public Date(int month, int day, int year) {
- this.month = month;
- this.day = day;
- this.year = year;
- }
-
- public void reset(int month, int day, int year) {
- this.month = month;
- this.day = day;
- this.year = year;
- }
-
- public int getDay() {
- return day;
- }
-
- public int getMonth() {
- return month;
- }
-
- public int getYear() {
- return year;
- }
-
- public Date() {
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("date");
- builder.append("(\"");
- builder.append(year);
- builder.append("-");
- builder.append(month < 10 ? "0" + month : "" + month);
- builder.append("-");
- builder.append(day < 10 ? "0" + day : "" + day);
- builder.append("\")");
- return builder.toString();
- }
-
- public void setDay(int day) {
- this.day = day;
- }
-
- public void setMonth(int month) {
- this.month = month;
- }
-
- public void setYear(int year) {
- this.year = year;
- }
- }
-
- public static String[] lastNames = { "Hoopengarner", "Harrow", "Gardner", "Blyant", "Best", "Buttermore", "Gronko",
- "Mayers", "Countryman", "Neely", "Ruhl", "Taggart", "Bash", "Cason", "Hil", "Zalack", "Mingle", "Carr",
- "Rohtin", "Wardle", "Pullman", "Wire", "Kellogg", "Hiles", "Keppel", "Bratton", "Sutton", "Wickes",
- "Muller", "Friedline", "Llora", "Elizabeth", "Anderson", "Gaskins", "Rifler", "Vinsant", "Stanfield",
- "Black", "Guest", "Hujsak", "Carter", "Weidemann", "Hays", "Patton", "Hayhurst", "Paynter", "Cressman",
- "Fiddler", "Evans", "Sherlock", "Woodworth", "Jackson", "Bloise", "Schneider", "Ring", "Kepplinger",
- "James", "Moon", "Bennett", "Bashline", "Ryals", "Zeal", "Christman", "Milliron", "Nash", "Ewing", "Camp",
- "Mason", "Richardson", "Bowchiew", "Hahn", "Wilson", "Wood", "Toyley", "Williamson", "Lafortune", "Errett",
- "Saltser", "Hirleman", "Brindle", "Newbiggin", "Ulery", "Lambert", "Shick", "Kuster", "Moore", "Finck",
- "Powell", "Jolce", "Townsend", "Sauter", "Cowher", "Wolfe", "Cavalet", "Porter", "Laborde", "Ballou",
- "Murray", "Stoddard", "Pycroft", "Milne", "King", "Todd", "Staymates", "Hall", "Romanoff", "Keilbach",
- "Sandford", "Hamilton", "Fye", "Kline", "Weeks", "Mcelroy", "Mccullough", "Bryant", "Hill", "Moore",
- "Ledgerwood", "Prevatt", "Eckert", "Read", "Hastings", "Doverspike", "Allshouse", "Bryan", "Mccallum",
- "Lombardi", "Mckendrick", "Cattley", "Barkley", "Steiner", "Finlay", "Priebe", "Armitage", "Hall", "Elder",
- "Erskine", "Hatcher", "Walker", "Pearsall", "Dunkle", "Haile", "Adams", "Miller", "Newbern", "Basinger",
- "Fuhrer", "Brinigh", "Mench", "Blackburn", "Bastion", "Mccune", "Bridger", "Hynes", "Quinn", "Courtney",
- "Geddinge", "Field", "Seelig", "Cable", "Earhart", "Harshman", "Roby", "Beals", "Berry", "Reed", "Hector",
- "Pittman", "Haverrman", "Kalp", "Briner", "Joghs", "Cowart", "Close", "Wynne", "Harden", "Weldy",
- "Stephenson", "Hildyard", "Moberly", "Wells", "Mackendoerfer", "Fisher", "Oppie", "Oneal", "Churchill",
- "Keister", "Alice", "Tavoularis", "Fisher", "Hair", "Burns", "Veith", "Wile", "Fuller", "Fields", "Clark",
- "Randolph", "Stone", "Mcclymonds", "Holtzer", "Donkin", "Wilkinson", "Rosensteel", "Albright", "Stahl",
- "Fox", "Kadel", "Houser", "Hanseu", "Henderson", "Davis", "Bicknell", "Swain", "Mercer", "Holdeman",
- "Enderly", "Caesar", "Margaret", "Munshower", "Elless", "Lucy", "Feufer", "Schofield", "Graham",
- "Blatenberger", "Benford", "Akers", "Campbell", "Ann", "Sadley", "Ling", "Gongaware", "Schmidt", "Endsley",
- "Groah", "Flanders", "Reichard", "Lowstetter", "Sandblom", "Griffis", "Basmanoff", "Coveney", "Hawker",
- "Archibald", "Hutton", "Barnes", "Diegel", "Raybould", "Focell", "Breitenstein", "Murray", "Chauvin",
- "Busk", "Pheleps", "Teagarden", "Northey", "Baumgartner", "Fleming", "Harris", "Parkinson", "Carpenter",
- "Whirlow", "Bonner", "Wortman", "Rogers", "Scott", "Lowe", "Mckee", "Huston", "Bullard", "Throckmorton",
- "Rummel", "Mathews", "Dull", "Saline", "Tue", "Woolery", "Lalty", "Schrader", "Ramsey", "Eisenmann",
- "Philbrick", "Sybilla", "Wallace", "Fonblanque", "Paul", "Orbell", "Higgens", "Casteel", "Franks", "Demuth",
- "Eisenman", "Hay", "Robinson", "Fischer", "Hincken", "Wylie", "Leichter", "Bousum", "Littlefield",
- "Mcdonald", "Greif", "Rhodes", "Wall", "Steele", "Baldwin", "Smith", "Stewart", "Schere", "Mary", "Aultman",
- "Emrick", "Guess", "Mitchell", "Painter", "Aft", "Hasely", "Weldi", "Loewentsein", "Poorbaugh", "Kepple",
- "Noton", "Judge", "Jackson", "Style", "Adcock", "Diller", "Marriman", "Johnston", "Children", "Monahan",
- "Ehret", "Shaw", "Congdon", "Pinney", "Millard", "Crissman", "Tanner", "Rose", "Knisely", "Cypret",
- "Sommer", "Poehl", "Hardie", "Bender", "Overholt", "Gottwine", "Beach", "Leslie", "Trevithick", "Langston",
- "Magor", "Shotts", "Howe", "Hunter", "Cross", "Kistler", "Dealtry", "Christner", "Pennington", "Thorley",
- "Eckhardstein", "Van", "Stroh", "Stough", "Stall", "Beedell", "Shea", "Garland", "Mays", "Pritchard",
- "Frankenberger", "Rowley", "Lane", "Baum", "Alliman", "Park", "Jardine", "Butler", "Cherry", "Kooser",
- "Baxter", "Billimek", "Downing", "Hurst", "Wood", "Baird", "Watkins", "Edwards", "Kemerer", "Harding",
- "Owens", "Eiford", "Keener", "Garneis", "Fiscina", "Mang", "Draudy", "Mills", "Gibson", "Reese", "Todd",
- "Ramos", "Levett", "Wilks", "Ward", "Mosser", "Dunlap", "Kifer", "Christopher", "Ashbaugh", "Wynter",
- "Rawls", "Cribbs", "Haynes", "Thigpen", "Schreckengost", "Bishop", "Linton", "Chapman", "James", "Jerome",
- "Hook", "Omara", "Houston", "Maclagan", "Sandys", "Pickering", "Blois", "Dickson", "Kemble", "Duncan",
- "Woodward", "Southern", "Henley", "Treeby", "Cram", "Elsas", "Driggers", "Warrick", "Overstreet", "Hindman",
- "Buck", "Sulyard", "Wentzel", "Swink", "Butt", "Schaeffer", "Hoffhants", "Bould", "Willcox", "Lotherington",
- "Bagley", "Graff", "White", "Wheeler", "Sloan", "Rodacker", "Hanford", "Jowers", "Kunkle", "Cass", "Powers",
- "Gilman", "Mcmichaels", "Hobbs", "Herndon", "Prescott", "Smail", "Mcdonald", "Biery", "Orner", "Richards",
- "Mueller", "Isaman", "Bruxner", "Goodman", "Barth", "Turzanski", "Vorrasi", "Stainforth", "Nehling", "Rahl",
- "Erschoff", "Greene", "Mckinnon", "Reade", "Smith", "Pery", "Roose", "Greenwood", "Weisgarber", "Curry",
- "Holts", "Zadovsky", "Parrish", "Putnam", "Munson", "Mcindoe", "Nickolson", "Brooks", "Bollinger",
- "Stroble", "Siegrist", "Fulton", "Tomey", "Zoucks", "Roberts", "Otis", "Clarke", "Easter", "Johnson",
- "Fylbrigg", "Taylor", "Swartzbaugh", "Weinstein", "Gadow", "Sayre", "Marcotte", "Wise", "Atweeke", "Mcfall",
- "Napier", "Eisenhart", "Canham", "Sealis", "Baughman", "Gertraht", "Losey", "Laurence", "Eva", "Pershing",
- "Kern", "Pirl", "Rega", "Sanborn", "Kanaga", "Sanders", "Anderson", "Dickinson", "Osteen", "Gettemy",
- "Crom", "Snyder", "Reed", "Laurenzi", "Riggle", "Tillson", "Fowler", "Raub", "Jenner", "Koepple", "Soames",
- "Goldvogel", "Dimsdale", "Zimmer", "Giesen", "Baker", "Beail", "Mortland", "Bard", "Sanner", "Knopsnider",
- "Jenkins", "Bailey", "Werner", "Barrett", "Faust", "Agg", "Tomlinson", "Williams", "Little", "Greenawalt",
- "Wells", "Wilkins", "Gisiko", "Bauerle", "Harrold", "Prechtl", "Polson", "Faast", "Winton", "Garneys",
- "Peters", "Potter", "Porter", "Tennant", "Eve", "Dugger", "Jones", "Burch", "Cowper", "Whittier" };
-
- public static String[] firstNames = { "Albert", "Jacquelin", "Dona", "Alia", "Mayme", "Genoveva", "Emma", "Lena",
- "Melody", "Vilma", "Katelyn", "Jeremy", "Coral", "Leann", "Lita", "Gilda", "Kayla", "Alvina", "Maranda",
- "Verlie", "Khadijah", "Karey", "Patrice", "Kallie", "Corey", "Mollie", "Daisy", "Melanie", "Sarita",
- "Nichole", "Pricilla", "Terresa", "Berneice", "Arianne", "Brianne", "Lavinia", "Ulrike", "Lesha", "Adell",
- "Ardelle", "Marisha", "Laquita", "Karyl", "Maryjane", "Kendall", "Isobel", "Raeann", "Heike", "Barbera",
- "Norman", "Yasmine", "Nevada", "Mariam", "Edith", "Eugena", "Lovie", "Maren", "Bennie", "Lennie", "Tamera",
- "Crystal", "Randi", "Anamaria", "Chantal", "Jesenia", "Avis", "Shela", "Randy", "Laurena", "Sharron",
- "Christiane", "Lorie", "Mario", "Elizabeth", "Reina", "Adria", "Lakisha", "Brittni", "Azzie", "Dori",
- "Shaneka", "Asuncion", "Katheryn", "Laurice", "Sharita", "Krystal", "Reva", "Inger", "Alpha", "Makeda",
- "Anabel", "Loni", "Tiara", "Meda", "Latashia", "Leola", "Chin", "Daisey", "Ivory", "Amalia", "Logan",
- "Tyler", "Kyong", "Carolann", "Maryetta", "Eufemia", "Anya", "Doreatha", "Lorna", "Rutha", "Ehtel",
- "Debbie", "Chassidy", "Sang", "Christa", "Lottie", "Chun", "Karine", "Peggie", "Amina", "Melany", "Alayna",
- "Scott", "Romana", "Naomi", "Christiana", "Salena", "Taunya", "Mitsue", "Regina", "Chelsie", "Charity",
- "Dacia", "Aletha", "Latosha", "Lia", "Tamica", "Chery", "Bianca", "Shu", "Georgianne", "Myriam", "Austin",
- "Wan", "Mallory", "Jana", "Georgie", "Jenell", "Kori", "Vicki", "Delfina", "June", "Mellisa", "Catherina",
- "Claudie", "Tynisha", "Dayle", "Enriqueta", "Belen", "Pia", "Sarai", "Rosy", "Renay", "Kacie", "Frieda",
- "Cayla", "Elissa", "Claribel", "Sabina", "Mackenzie", "Raina", "Cira", "Mitzie", "Aubrey", "Serafina",
- "Maria", "Katharine", "Esperanza", "Sung", "Daria", "Billye", "Stefanie", "Kasha", "Holly", "Suzanne",
- "Inga", "Flora", "Andria", "Genevie", "Eladia", "Janet", "Erline", "Renna", "Georgeanna", "Delorse",
- "Elnora", "Rudy", "Rima", "Leanora", "Letisha", "Love", "Alverta", "Pinkie", "Domonique", "Jeannie", "Jose",
- "Jacqueline", "Tara", "Lily", "Erna", "Tennille", "Galina", "Tamala", "Kirby", "Nichelle", "Myesha",
- "Farah", "Santa", "Ludie", "Kenia", "Yee", "Micheline", "Maryann", "Elaina", "Ethelyn", "Emmaline",
- "Shanell", "Marina", "Nila", "Alane", "Shakira", "Dorris", "Belinda", "Elois", "Barbie", "Carita", "Gisela",
- "Lura", "Fransisca", "Helga", "Peg", "Leonarda", "Earlie", "Deetta", "Jacquetta", "Blossom", "Kayleigh",
- "Deloras", "Keshia", "Christinia", "Dulce", "Bernie", "Sheba", "Lashanda", "Tula", "Claretta", "Kary",
- "Jeanette", "Lupita", "Lenora", "Hisako", "Sherise", "Glynda", "Adela", "Chia", "Sudie", "Mindy", "Caroyln",
- "Lindsey", "Xiomara", "Mercedes", "Onie", "Loan", "Alexis", "Tommie", "Donette", "Monica", "Soo",
- "Camellia", "Lavera", "Valery", "Ariana", "Sophia", "Loris", "Ginette", "Marielle", "Tari", "Julissa",
- "Alesia", "Suzanna", "Emelda", "Erin", "Ladawn", "Sherilyn", "Candice", "Nereida", "Fairy", "Carl", "Joel",
- "Marilee", "Gracia", "Cordie", "So", "Shanita", "Drew", "Cassie", "Sherie", "Marget", "Norma", "Delois",
- "Debera", "Chanelle", "Catarina", "Aracely", "Carlene", "Tricia", "Aleen", "Katharina", "Marguerita",
- "Guadalupe", "Margorie", "Mandie", "Kathe", "Chong", "Sage", "Faith", "Maryrose", "Stephany", "Ivy",
- "Pauline", "Susie", "Cristen", "Jenifer", "Annette", "Debi", "Karmen", "Luci", "Shayla", "Hope", "Ocie",
- "Sharie", "Tami", "Breana", "Kerry", "Rubye", "Lashay", "Sondra", "Katrice", "Brunilda", "Cortney", "Yan",
- "Zenobia", "Penni", "Addie", "Lavona", "Noel", "Anika", "Herlinda", "Valencia", "Bunny", "Tory", "Victoria",
- "Carrie", "Mikaela", "Wilhelmina", "Chung", "Hortencia", "Gerda", "Wen", "Ilana", "Sibyl", "Candida",
- "Victorina", "Chantell", "Casie", "Emeline", "Dominica", "Cecila", "Delora", "Miesha", "Nova", "Sally",
- "Ronald", "Charlette", "Francisca", "Mina", "Jenna", "Loraine", "Felisa", "Lulu", "Page", "Lyda", "Babara",
- "Flor", "Walter", "Chan", "Sherika", "Kala", "Luna", "Vada", "Syreeta", "Slyvia", "Karin", "Renata",
- "Robbi", "Glenda", "Delsie", "Lizzie", "Genia", "Caitlin", "Bebe", "Cory", "Sam", "Leslee", "Elva", "Caren",
- "Kasie", "Leticia", "Shannan", "Vickey", "Sandie", "Kyle", "Chang", "Terrilyn", "Sandra", "Elida",
- "Marketta", "Elsy", "Tu", "Carman", "Ashlie", "Vernia", "Albertine", "Vivian", "Elba", "Bong", "Margy",
- "Janetta", "Xiao", "Teofila", "Danyel", "Nickole", "Aleisha", "Tera", "Cleotilde", "Dara", "Paulita",
- "Isela", "Maricela", "Rozella", "Marivel", "Aurora", "Melissa", "Carylon", "Delinda", "Marvella",
- "Candelaria", "Deidre", "Tawanna", "Myrtie", "Milagro", "Emilie", "Coretta", "Ivette", "Suzann", "Ammie",
- "Lucina", "Lory", "Tena", "Eleanor", "Cherlyn", "Tiana", "Brianna", "Myra", "Flo", "Carisa", "Kandi",
- "Erlinda", "Jacqulyn", "Fermina", "Riva", "Palmira", "Lindsay", "Annmarie", "Tamiko", "Carline", "Amelia",
- "Quiana", "Lashawna", "Veola", "Belva", "Marsha", "Verlene", "Alex", "Leisha", "Camila", "Mirtha", "Melva",
- "Lina", "Arla", "Cythia", "Towanda", "Aracelis", "Tasia", "Aurore", "Trinity", "Bernadine", "Farrah",
- "Deneen", "Ines", "Betty", "Lorretta", "Dorethea", "Hertha", "Rochelle", "Juli", "Shenika", "Yung", "Lavon",
- "Deeanna", "Nakia", "Lynnette", "Dinorah", "Nery", "Elene", "Carolee", "Mira", "Franchesca", "Lavonda",
- "Leida", "Paulette", "Dorine", "Allegra", "Keva", "Jeffrey", "Bernardina", "Maryln", "Yoko", "Faviola",
- "Jayne", "Lucilla", "Charita", "Ewa", "Ella", "Maggie", "Ivey", "Bettie", "Jerri", "Marni", "Bibi",
- "Sabrina", "Sarah", "Marleen", "Katherin", "Remona", "Jamika", "Antonina", "Oliva", "Lajuana", "Fonda",
- "Sigrid", "Yael", "Billi", "Verona", "Arminda", "Mirna", "Tesha", "Katheleen", "Bonita", "Kamilah",
- "Patrica", "Julio", "Shaina", "Mellie", "Denyse", "Deandrea", "Alena", "Meg", "Kizzie", "Krissy", "Karly",
- "Alleen", "Yahaira", "Lucie", "Karena", "Elaine", "Eloise", "Buena", "Marianela", "Renee", "Nan",
- "Carolynn", "Windy", "Avril", "Jane", "Vida", "Thea", "Marvel", "Rosaline", "Tifany", "Robena", "Azucena",
- "Carlota", "Mindi", "Andera", "Jenny", "Courtney", "Lyndsey", "Willette", "Kristie", "Shaniqua", "Tabatha",
- "Ngoc", "Una", "Marlena", "Louetta", "Vernie", "Brandy", "Jacquelyne", "Jenelle", "Elna", "Erminia", "Ida",
- "Audie", "Louis", "Marisol", "Shawana", "Harriette", "Karol", "Kitty", "Esmeralda", "Vivienne", "Eloisa",
- "Iris", "Jeanice", "Cammie", "Jacinda", "Shena", "Floy", "Theda", "Lourdes", "Jayna", "Marg", "Kati",
- "Tanna", "Rosalyn", "Maxima", "Soon", "Angelika", "Shonna", "Merle", "Kassandra", "Deedee", "Heidi",
- "Marti", "Renae", "Arleen", "Alfredia", "Jewell", "Carley", "Pennie", "Corina", "Tonisha", "Natividad",
- "Lilliana", "Darcie", "Shawna", "Angel", "Piedad", "Josefa", "Rebbeca", "Natacha", "Nenita", "Petrina",
- "Carmon", "Chasidy", "Temika", "Dennise", "Renetta", "Augusta", "Shirlee", "Valeri", "Casimira", "Janay",
- "Berniece", "Deborah", "Yaeko", "Mimi", "Digna", "Irish", "Cher", "Yong", "Lucila", "Jimmie", "Junko",
- "Lezlie", "Waneta", "Sandee", "Marquita", "Eura", "Freeda", "Annabell", "Laree", "Jaye", "Wendy", "Toshia",
- "Kylee", "Aleta", "Emiko", "Clorinda", "Sixta", "Audrea", "Juanita", "Birdie", "Reita", "Latanya", "Nia",
- "Leora", "Laurine", "Krysten", "Jerrie", "Chantel", "Ira", "Sena", "Andre", "Jann", "Marla", "Precious",
- "Katy", "Gabrielle", "Yvette", "Brook", "Shirlene", "Eldora", "Laura", "Milda", "Euna", "Jettie", "Debora",
- "Lise", "Edythe", "Leandra", "Shandi", "Araceli", "Johanne", "Nieves", "Denese", "Carmelita", "Nohemi",
- "Annice", "Natalie", "Yolande", "Jeffie", "Vashti", "Vickie", "Obdulia", "Youlanda", "Lupe", "Tomoko",
- "Monserrate", "Domitila", "Etsuko", "Adrienne", "Lakesha", "Melissia", "Odessa", "Meagan", "Veronika",
- "Jolyn", "Isabelle", "Leah", "Rhiannon", "Gianna", "Audra", "Sommer", "Renate", "Perla", "Thao", "Myong",
- "Lavette", "Mark", "Emilia", "Ariane", "Karl", "Dorie", "Jacquie", "Mia", "Malka", "Shenita", "Tashina",
- "Christine", "Cherri", "Roni", "Fran", "Mildred", "Sara", "Clarissa", "Fredia", "Elease", "Samuel",
- "Earlene", "Vernita", "Mae", "Concha", "Renea", "Tamekia", "Hye", "Ingeborg", "Tessa", "Kelly", "Kristin",
- "Tam", "Sacha", "Kanisha", "Jillian", "Tiffanie", "Ashlee", "Madelyn", "Donya", "Clementine", "Mickie",
- "My", "Zena", "Terrie", "Samatha", "Gertie", "Tarra", "Natalia", "Sharlene", "Evie", "Shalon", "Rosalee",
- "Numbers", "Jodi", "Hattie", "Naoma", "Valene", "Whitley", "Claude", "Alline", "Jeanne", "Camie",
- "Maragret", "Viola", "Kris", "Marlo", "Arcelia", "Shari", "Jalisa", "Corrie", "Eleonor", "Angelyn", "Merry",
- "Lauren", "Melita", "Gita", "Elenor", "Aurelia", "Janae", "Lyndia", "Margeret", "Shawanda", "Rolande",
- "Shirl", "Madeleine", "Celinda", "Jaleesa", "Shemika", "Joye", "Tisa", "Trudie", "Kathrine", "Clarita",
- "Dinah", "Georgia", "Antoinette", "Janis", "Suzette", "Sherri", "Herta", "Arie", "Hedy", "Cassi", "Audrie",
- "Caryl", "Jazmine", "Jessica", "Beverly", "Elizbeth", "Marylee", "Londa", "Fredericka", "Argelia", "Nana",
- "Donnette", "Damaris", "Hailey", "Jamee", "Kathlene", "Glayds", "Lydia", "Apryl", "Verla", "Adam",
- "Concepcion", "Zelda", "Shonta", "Vernice", "Detra", "Meghann", "Sherley", "Sheri", "Kiyoko", "Margarita",
- "Adaline", "Mariela", "Velda", "Ailene", "Juliane", "Aiko", "Edyth", "Cecelia", "Shavon", "Florance",
- "Madeline", "Rheba", "Deann", "Ignacia", "Odelia", "Heide", "Mica", "Jennette", "Maricruz", "Ouida",
- "Darcy", "Laure", "Justina", "Amada", "Laine", "Cruz", "Sunny", "Francene", "Roxanna", "Nam", "Nancie",
- "Deanna", "Letty", "Britni", "Kazuko", "Lacresha", "Simon", "Caleb", "Milton", "Colton", "Travis", "Miles",
- "Jonathan", "Logan", "Rolf", "Emilio", "Roberto", "Marcus", "Tim", "Delmar", "Devon", "Kurt", "Edward",
- "Jeffrey", "Elvis", "Alfonso", "Blair", "Wm", "Sheldon", "Leonel", "Michal", "Federico", "Jacques",
- "Leslie", "Augustine", "Hugh", "Brant", "Hong", "Sal", "Modesto", "Curtis", "Jefferey", "Adam", "John",
- "Glenn", "Vance", "Alejandro", "Refugio", "Lucio", "Demarcus", "Chang", "Huey", "Neville", "Preston",
- "Bert", "Abram", "Foster", "Jamison", "Kirby", "Erich", "Manual", "Dustin", "Derrick", "Donnie", "Jospeh",
- "Chris", "Josue", "Stevie", "Russ", "Stanley", "Nicolas", "Samuel", "Waldo", "Jake", "Max", "Ernest",
- "Reinaldo", "Rene", "Gale", "Morris", "Nathan", "Maximo", "Courtney", "Theodore", "Octavio", "Otha",
- "Delmer", "Graham", "Dean", "Lowell", "Myles", "Colby", "Boyd", "Adolph", "Jarrod", "Nick", "Mark",
- "Clinton", "Kim", "Sonny", "Dalton", "Tyler", "Jody", "Orville", "Luther", "Rubin", "Hollis", "Rashad",
- "Barton", "Vicente", "Ted", "Rick", "Carmine", "Clifton", "Gayle", "Christopher", "Jessie", "Bradley",
- "Clay", "Theo", "Josh", "Mitchell", "Boyce", "Chung", "Eugenio", "August", "Norbert", "Sammie", "Jerry",
- "Adan", "Edmundo", "Homer", "Hilton", "Tod", "Kirk", "Emmett", "Milan", "Quincy", "Jewell", "Herb", "Steve",
- "Carmen", "Bobby", "Odis", "Daron", "Jeremy", "Carl", "Hunter", "Tuan", "Thurman", "Asa", "Brenton",
- "Shane", "Donny", "Andreas", "Teddy", "Dario", "Cyril", "Hoyt", "Teodoro", "Vincenzo", "Hilario", "Daren",
- "Agustin", "Marquis", "Ezekiel", "Brendan", "Johnson", "Alden", "Richie", "Granville", "Chad", "Joseph",
- "Lamont", "Jordon", "Gilberto", "Chong", "Rosendo", "Eddy", "Rob", "Dewitt", "Andre", "Titus", "Russell",
- "Rigoberto", "Dick", "Garland", "Gabriel", "Hank", "Darius", "Ignacio", "Lazaro", "Johnie", "Mauro",
- "Edmund", "Trent", "Harris", "Osvaldo", "Marvin", "Judson", "Rodney", "Randall", "Renato", "Richard",
- "Denny", "Jon", "Doyle", "Cristopher", "Wilson", "Christian", "Jamie", "Roland", "Ken", "Tad", "Romeo",
- "Seth", "Quinton", "Byron", "Ruben", "Darrel", "Deandre", "Broderick", "Harold", "Ty", "Monroe", "Landon",
- "Mohammed", "Angel", "Arlen", "Elias", "Andres", "Carlton", "Numbers", "Tony", "Thaddeus", "Issac", "Elmer",
- "Antoine", "Ned", "Fermin", "Grover", "Benito", "Abdul", "Cortez", "Eric", "Maxwell", "Coy", "Gavin",
- "Rich", "Andy", "Del", "Giovanni", "Major", "Efren", "Horacio", "Joaquin", "Charles", "Noah", "Deon",
- "Pasquale", "Reed", "Fausto", "Jermaine", "Irvin", "Ray", "Tobias", "Carter", "Yong", "Jorge", "Brent",
- "Daniel", "Zane", "Walker", "Thad", "Shaun", "Jaime", "Mckinley", "Bradford", "Nathanial", "Jerald",
- "Aubrey", "Virgil", "Abel", "Philip", "Chester", "Chadwick", "Dominick", "Britt", "Emmitt", "Ferdinand",
- "Julian", "Reid", "Santos", "Dwain", "Morgan", "James", "Marion", "Micheal", "Eddie", "Brett", "Stacy",
- "Kerry", "Dale", "Nicholas", "Darrick", "Freeman", "Scott", "Newton", "Sherman", "Felton", "Cedrick",
- "Winfred", "Brad", "Fredric", "Dewayne", "Virgilio", "Reggie", "Edgar", "Heriberto", "Shad", "Timmy",
- "Javier", "Nestor", "Royal", "Lynn", "Irwin", "Ismael", "Jonas", "Wiley", "Austin", "Kieth", "Gonzalo",
- "Paris", "Earnest", "Arron", "Jarred", "Todd", "Erik", "Maria", "Chauncey", "Neil", "Conrad", "Maurice",
- "Roosevelt", "Jacob", "Sydney", "Lee", "Basil", "Louis", "Rodolfo", "Rodger", "Roman", "Corey", "Ambrose",
- "Cristobal", "Sylvester", "Benton", "Franklin", "Marcelo", "Guillermo", "Toby", "Jeramy", "Donn", "Danny",
- "Dwight", "Clifford", "Valentine", "Matt", "Jules", "Kareem", "Ronny", "Lonny", "Son", "Leopoldo", "Dannie",
- "Gregg", "Dillon", "Orlando", "Weston", "Kermit", "Damian", "Abraham", "Walton", "Adrian", "Rudolf", "Will",
- "Les", "Norberto", "Fred", "Tyrone", "Ariel", "Terry", "Emmanuel", "Anderson", "Elton", "Otis", "Derek",
- "Frankie", "Gino", "Lavern", "Jarod", "Kenny", "Dane", "Keenan", "Bryant", "Eusebio", "Dorian", "Ali",
- "Lucas", "Wilford", "Jeremiah", "Warner", "Woodrow", "Galen", "Bob", "Johnathon", "Amado", "Michel",
- "Harry", "Zachery", "Taylor", "Booker", "Hershel", "Mohammad", "Darrell", "Kyle", "Stuart", "Marlin",
- "Hyman", "Jeffery", "Sidney", "Merrill", "Roy", "Garrett", "Porter", "Kenton", "Giuseppe", "Terrance",
- "Trey", "Felix", "Buster", "Von", "Jackie", "Linwood", "Darron", "Francisco", "Bernie", "Diego", "Brendon",
- "Cody", "Marco", "Ahmed", "Antonio", "Vince", "Brooks", "Kendrick", "Ross", "Mohamed", "Jim", "Benny",
- "Gerald", "Pablo", "Charlie", "Antony", "Werner", "Hipolito", "Minh", "Mel", "Derick", "Armand", "Fidel",
- "Lewis", "Donnell", "Desmond", "Vaughn", "Guadalupe", "Keneth", "Rodrick", "Spencer", "Chas", "Gus",
- "Harlan", "Wes", "Carmelo", "Jefferson", "Gerard", "Jarvis", "Haywood", "Hayden", "Sergio", "Gene",
- "Edgardo", "Colin", "Horace", "Dominic", "Aldo", "Adolfo", "Juan", "Man", "Lenard", "Clement", "Everett",
- "Hal", "Bryon", "Mason", "Emerson", "Earle", "Laurence", "Columbus", "Lamar", "Douglas", "Ian", "Fredrick",
- "Marc", "Loren", "Wallace", "Randell", "Noble", "Ricardo", "Rory", "Lindsey", "Boris", "Bill", "Carlos",
- "Domingo", "Grant", "Craig", "Ezra", "Matthew", "Van", "Rudy", "Danial", "Brock", "Maynard", "Vincent",
- "Cole", "Damion", "Ellsworth", "Marcel", "Markus", "Rueben", "Tanner", "Reyes", "Hung", "Kennith",
- "Lindsay", "Howard", "Ralph", "Jed", "Monte", "Garfield", "Avery", "Bernardo", "Malcolm", "Sterling",
- "Ezequiel", "Kristofer", "Luciano", "Casey", "Rosario", "Ellis", "Quintin", "Trevor", "Miquel", "Jordan",
- "Arthur", "Carson", "Tyron", "Grady", "Walter", "Jonathon", "Ricky", "Bennie", "Terrence", "Dion", "Dusty",
- "Roderick", "Isaac", "Rodrigo", "Harrison", "Zack", "Dee", "Devin", "Rey", "Ulysses", "Clint", "Greg",
- "Dino", "Frances", "Wade", "Franklyn", "Jude", "Bradly", "Salvador", "Rocky", "Weldon", "Lloyd", "Milford",
- "Clarence", "Alec", "Allan", "Bobbie", "Oswaldo", "Wilfred", "Raleigh", "Shelby", "Willy", "Alphonso",
- "Arnoldo", "Robbie", "Truman", "Nicky", "Quinn", "Damien", "Lacy", "Marcos", "Parker", "Burt", "Carroll",
- "Denver", "Buck", "Dong", "Normand", "Billie", "Edwin", "Troy", "Arden", "Rusty", "Tommy", "Kenneth", "Leo",
- "Claud", "Joel", "Kendall", "Dante", "Milo", "Cruz", "Lucien", "Ramon", "Jarrett", "Scottie", "Deshawn",
- "Ronnie", "Pete", "Alonzo", "Whitney", "Stefan", "Sebastian", "Edmond", "Enrique", "Branden", "Leonard",
- "Loyd", "Olin", "Ron", "Rhett", "Frederic", "Orval", "Tyrell", "Gail", "Eli", "Antonia", "Malcom", "Sandy",
- "Stacey", "Nickolas", "Hosea", "Santo", "Oscar", "Fletcher", "Dave", "Patrick", "Dewey", "Bo", "Vito",
- "Blaine", "Randy", "Robin", "Winston", "Sammy", "Edwardo", "Manuel", "Valentin", "Stanford", "Filiberto",
- "Buddy", "Zachariah", "Johnnie", "Elbert", "Paul", "Isreal", "Jerrold", "Leif", "Owen", "Sung", "Junior",
- "Raphael", "Josef", "Donte", "Allen", "Florencio", "Raymond", "Lauren", "Collin", "Eliseo", "Bruno",
- "Martin", "Lyndon", "Kurtis", "Salvatore", "Erwin", "Michael", "Sean", "Davis", "Alberto", "King",
- "Rolland", "Joe", "Tory", "Chase", "Dallas", "Vernon", "Beau", "Terrell", "Reynaldo", "Monty", "Jame",
- "Dirk", "Florentino", "Reuben", "Saul", "Emory", "Esteban", "Michale", "Claudio", "Jacinto", "Kelley",
- "Levi", "Andrea", "Lanny", "Wendell", "Elwood", "Joan", "Felipe", "Palmer", "Elmo", "Lawrence", "Hubert",
- "Rudolph", "Duane", "Cordell", "Everette", "Mack", "Alan", "Efrain", "Trenton", "Bryan", "Tom", "Wilmer",
- "Clyde", "Chance", "Lou", "Brain", "Justin", "Phil", "Jerrod", "George", "Kris", "Cyrus", "Emery", "Rickey",
- "Lincoln", "Renaldo", "Mathew", "Luke", "Dwayne", "Alexis", "Jackson", "Gil", "Marty", "Burton", "Emil",
- "Glen", "Willian", "Clemente", "Keven", "Barney", "Odell", "Reginald", "Aurelio", "Damon", "Ward",
- "Gustavo", "Harley", "Peter", "Anibal", "Arlie", "Nigel", "Oren", "Zachary", "Scot", "Bud", "Wilbert",
- "Bart", "Josiah", "Marlon", "Eldon", "Darryl", "Roger", "Anthony", "Omer", "Francis", "Patricia", "Moises",
- "Chuck", "Waylon", "Hector", "Jamaal", "Cesar", "Julius", "Rex", "Norris", "Ollie", "Isaias", "Quentin",
- "Graig", "Lyle", "Jeffry", "Karl", "Lester", "Danilo", "Mike", "Dylan", "Carlo", "Ryan", "Leon", "Percy",
- "Lucius", "Jamel", "Lesley", "Joey", "Cornelius", "Rico", "Arnulfo", "Chet", "Margarito", "Ernie",
- "Nathanael", "Amos", "Cleveland", "Luigi", "Alfonzo", "Phillip", "Clair", "Elroy", "Alva", "Hans", "Shon",
- "Gary", "Jesus", "Cary", "Silas", "Keith", "Israel", "Willard", "Randolph", "Dan", "Adalberto", "Claude",
- "Delbert", "Garry", "Mary", "Larry", "Riley", "Robt", "Darwin", "Barrett", "Steven", "Kelly", "Herschel",
- "Darnell", "Scotty", "Armando", "Miguel", "Lawerence", "Wesley", "Garth", "Carol", "Micah", "Alvin",
- "Billy", "Earl", "Pat", "Brady", "Cory", "Carey", "Bernard", "Jayson", "Nathaniel", "Gaylord", "Archie",
- "Dorsey", "Erasmo", "Angelo", "Elisha", "Long", "Augustus", "Hobert", "Drew", "Stan", "Sherwood", "Lorenzo",
- "Forrest", "Shawn", "Leigh", "Hiram", "Leonardo", "Gerry", "Myron", "Hugo", "Alvaro", "Leland", "Genaro",
- "Jamey", "Stewart", "Elden", "Irving", "Olen", "Antone", "Freddy", "Lupe", "Joshua", "Gregory", "Andrew",
- "Sang", "Wilbur", "Gerardo", "Merlin", "Williams", "Johnny", "Alex", "Tommie", "Jimmy", "Donovan", "Dexter",
- "Gaston", "Tracy", "Jeff", "Stephen", "Berry", "Anton", "Darell", "Fritz", "Willis", "Noel", "Mariano",
- "Crawford", "Zoey", "Alex", "Brianna", "Carlie", "Lloyd", "Cal", "Astor", "Randolf", "Magdalene",
- "Trevelyan", "Terance", "Roy", "Kermit", "Harriett", "Crystal", "Laurinda", "Kiersten", "Phyllida", "Liz",
- "Bettie", "Rena", "Colten", "Berenice", "Sindy", "Wilma", "Amos", "Candi", "Ritchie", "Dirk", "Kathlyn",
- "Callista", "Anona", "Flossie", "Sterling", "Calista", "Regan", "Erica", "Jeana", "Keaton", "York", "Nolan",
- "Daniel", "Benton", "Tommie", "Serenity", "Deanna", "Chas", "Heron", "Marlyn", "Xylia", "Tristin", "Lyndon",
- "Andriana", "Madelaine", "Maddison", "Leila", "Chantelle", "Audrey", "Connor", "Daley", "Tracee", "Tilda",
- "Eliot", "Merle", "Linwood", "Kathryn", "Silas", "Alvina", "Phinehas", "Janis", "Alvena", "Zubin",
- "Gwendolen", "Caitlyn", "Bertram", "Hailee", "Idelle", "Homer", "Jannah", "Delbert", "Rhianna", "Cy",
- "Jefferson", "Wayland", "Nona", "Tempest", "Reed", "Jenifer", "Ellery", "Nicolina", "Aldous", "Prince",
- "Lexia", "Vinnie", "Doug", "Alberic", "Kayleen", "Woody", "Rosanne", "Ysabel", "Skyler", "Twyla", "Geordie",
- "Leta", "Clive", "Aaron", "Scottie", "Celeste", "Chuck", "Erle", "Lallie", "Jaycob", "Ray", "Carrie",
- "Laurita", "Noreen", "Meaghan", "Ulysses", "Andy", "Drogo", "Dina", "Yasmin", "Mya", "Luvenia", "Urban",
- "Jacob", "Laetitia", "Sherry", "Love", "Michaela", "Deonne", "Summer", "Brendon", "Sheena", "Mason",
- "Jayson", "Linden", "Salal", "Darrell", "Diana", "Hudson", "Lennon", "Isador", "Charley", "April", "Ralph",
- "James", "Mina", "Jolyon", "Laurine", "Monna", "Carita", "Munro", "Elsdon", "Everette", "Radclyffe",
- "Darrin", "Herbert", "Gawain", "Sheree", "Trudy", "Emmaline", "Kassandra", "Rebecca", "Basil", "Jen", "Don",
- "Osborne", "Lilith", "Hannah", "Fox", "Rupert", "Paulene", "Darius", "Wally", "Baptist", "Sapphire", "Tia",
- "Sondra", "Kylee", "Ashton", "Jepson", "Joetta", "Val", "Adela", "Zacharias", "Zola", "Marmaduke",
- "Shannah", "Posie", "Oralie", "Brittany", "Ernesta", "Raymund", "Denzil", "Daren", "Roosevelt", "Nelson",
- "Fortune", "Mariel", "Nick", "Jaden", "Upton", "Oz", "Margaux", "Precious", "Albert", "Bridger", "Jimmy",
- "Nicola", "Rosalynne", "Keith", "Walt", "Della", "Joanna", "Xenia", "Esmeralda", "Major", "Simon", "Rexana",
- "Stacy", "Calanthe", "Sherley", "Kaitlyn", "Graham", "Ramsey", "Abbey", "Madlyn", "Kelvin", "Bill", "Rue",
- "Monica", "Caileigh", "Laraine", "Booker", "Jayna", "Greta", "Jervis", "Sherman", "Kendrick", "Tommy",
- "Iris", "Geffrey", "Kaelea", "Kerr", "Garrick", "Jep", "Audley", "Nic", "Bronte", "Beulah", "Patricia",
- "Jewell", "Deidra", "Cory", "Everett", "Harper", "Charity", "Godfrey", "Jaime", "Sinclair", "Talbot",
- "Dayna", "Cooper", "Rosaline", "Jennie", "Eileen", "Latanya", "Corinna", "Roxie", "Caesar", "Charles",
- "Pollie", "Lindsey", "Sorrel", "Dwight", "Jocelyn", "Weston", "Shyla", "Valorie", "Bessie", "Josh",
- "Lessie", "Dayton", "Kathi", "Chasity", "Wilton", "Adam", "William", "Ash", "Angela", "Ivor", "Ria",
- "Jazmine", "Hailey", "Jo", "Silvestra", "Ernie", "Clifford", "Levi", "Matilda", "Quincey", "Camilla",
- "Delicia", "Phemie", "Laurena", "Bambi", "Lourdes", "Royston", "Chastity", "Lynwood", "Elle", "Brenda",
- "Phoebe", "Timothy", "Raschelle", "Lilly", "Burt", "Rina", "Rodney", "Maris", "Jaron", "Wilf", "Harlan",
- "Audra", "Vincent", "Elwyn", "Drew", "Wynter", "Ora", "Lissa", "Virgil", "Xavier", "Chad", "Ollie",
- "Leyton", "Karolyn", "Skye", "Roni", "Gladys", "Dinah", "Penny", "August", "Osmund", "Whitaker", "Brande",
- "Cornell", "Phil", "Zara", "Kilie", "Gavin", "Coty", "Randy", "Teri", "Keira", "Pru", "Clemency", "Kelcey",
- "Nevil", "Poppy", "Gareth", "Christabel", "Bastian", "Wynonna", "Roselyn", "Goddard", "Collin", "Trace",
- "Neal", "Effie", "Denys", "Virginia", "Richard", "Isiah", "Harrietta", "Gaylord", "Diamond", "Trudi",
- "Elaine", "Jemmy", "Gage", "Annabel", "Quincy", "Syd", "Marianna", "Philomena", "Aubree", "Kathie", "Jacki",
- "Kelley", "Bess", "Cecil", "Maryvonne", "Kassidy", "Anselm", "Dona", "Darby", "Jamison", "Daryl", "Darell",
- "Teal", "Lennie", "Bartholomew", "Katie", "Maybelline", "Kimball", "Elvis", "Les", "Flick", "Harley",
- "Beth", "Bidelia", "Montague", "Helen", "Ozzy", "Stef", "Debra", "Maxene", "Stefanie", "Russ", "Avril",
- "Johnathan", "Orson", "Chelsey", "Josephine", "Deshaun", "Wendell", "Lula", "Ferdinanda", "Greg", "Brad",
- "Kynaston", "Dena", "Russel", "Robertina", "Misti", "Leon", "Anjelica", "Bryana", "Myles", "Judi", "Curtis",
- "Davin", "Kristia", "Chrysanta", "Hayleigh", "Hector", "Osbert", "Eustace", "Cary", "Tansy", "Cayley",
- "Maryann", "Alissa", "Ike", "Tranter", "Reina", "Alwilda", "Sidony", "Columbine", "Astra", "Jillie",
- "Stephania", "Jonah", "Kennedy", "Ferdinand", "Allegria", "Donella", "Kelleigh", "Darian", "Eldreda",
- "Jayden", "Herbie", "Jake", "Winston", "Vi", "Annie", "Cherice", "Hugo", "Tricia", "Haydee", "Cassarah",
- "Darden", "Mallory", "Alton", "Hadley", "Romayne", "Lacey", "Ern", "Alayna", "Cecilia", "Seward", "Tilly",
- "Edgar", "Concordia", "Ibbie", "Dahlia", "Oswin", "Stu", "Brett", "Maralyn", "Kristeen", "Dotty", "Robyn",
- "Nessa", "Tresha", "Guinevere", "Emerson", "Haze", "Lyn", "Henderson", "Lexa", "Jaylen", "Gail", "Lizette",
- "Tiara", "Robbie", "Destiny", "Alice", "Livia", "Rosy", "Leah", "Jan", "Zach", "Vita", "Gia", "Micheal",
- "Rowina", "Alysha", "Bobbi", "Delores", "Osmond", "Karaugh", "Wilbur", "Kasandra", "Renae", "Kaety", "Dora",
- "Gaye", "Amaryllis", "Katelyn", "Dacre", "Prudence", "Ebony", "Camron", "Jerrold", "Vivyan", "Randall",
- "Donna", "Misty", "Damon", "Selby", "Esmund", "Rian", "Garry", "Julius", "Raelene", "Clement", "Dom",
- "Tibby", "Moss", "Millicent", "Gwendoline", "Berry", "Ashleigh", "Lilac", "Quin", "Vere", "Creighton",
- "Harriet", "Malvina", "Lianne", "Pearle", "Kizzie", "Kara", "Petula", "Jeanie", "Maria", "Pacey",
- "Victoria", "Huey", "Toni", "Rose", "Wallis", "Diggory", "Josiah", "Delma", "Keysha", "Channing", "Prue",
- "Lee", "Ryan", "Sidney", "Valerie", "Clancy", "Ezra", "Gilbert", "Clare", "Laz", "Crofton", "Mike",
- "Annabella", "Tara", "Eldred", "Arthur", "Jaylon", "Peronel", "Paden", "Dot", "Marian", "Amyas", "Alexus",
- "Esmond", "Abbie", "Stanley", "Brittani", "Vickie", "Errol", "Kimberlee", "Uland", "Ebenezer", "Howie",
- "Eveline", "Andrea", "Trish", "Hopkin", "Bryanna", "Temperance", "Valarie", "Femie", "Alix", "Terrell",
- "Lewin", "Lorrin", "Happy", "Micah", "Rachyl", "Sloan", "Gertrude", "Elizabeth", "Dorris", "Andra", "Bram",
- "Gary", "Jeannine", "Maurene", "Irene", "Yolonda", "Jonty", "Coleen", "Cecelia", "Chantal", "Stuart",
- "Caris", "Ros", "Kaleigh", "Mirabelle", "Kolby", "Primrose", "Susannah", "Ginny", "Jinny", "Dolly",
- "Lettice", "Sonny", "Melva", "Ernest", "Garret", "Reagan", "Trenton", "Gallagher", "Edwin", "Nikolas",
- "Corrie", "Lynette", "Ettie", "Sly", "Debbi", "Eudora", "Brittney", "Tacey", "Marius", "Anima", "Gordon",
- "Olivia", "Kortney", "Shantel", "Kolleen", "Nevaeh", "Buck", "Sera", "Liliana", "Aric", "Kalyn", "Mick",
- "Libby", "Ingram", "Alexandria", "Darleen", "Jacklyn", "Hughie", "Tyler", "Aida", "Ronda", "Deemer",
- "Taryn", "Laureen", "Samantha", "Dave", "Hardy", "Baldric", "Montgomery", "Gus", "Ellis", "Titania", "Luke",
- "Chase", "Haidee", "Mayra", "Isabell", "Trinity", "Milo", "Abigail", "Tacita", "Meg", "Hervey", "Natasha",
- "Sadie", "Holden", "Dee", "Mansel", "Perry", "Randi", "Frederica", "Georgina", "Kolour", "Debbie",
- "Seraphina", "Elspet", "Julyan", "Raven", "Zavia", "Jarvis", "Jaymes", "Grover", "Cairo", "Alea", "Jordon",
- "Braxton", "Donny", "Rhoda", "Tonya", "Bee", "Alyssia", "Ashlyn", "Reanna", "Lonny", "Arlene", "Deb",
- "Jane", "Nikole", "Bettina", "Harrison", "Tamzen", "Arielle", "Adelaide", "Faith", "Bridie", "Wilburn",
- "Fern", "Nan", "Shaw", "Zeke", "Alan", "Dene", "Gina", "Alexa", "Bailey", "Sal", "Tammy", "Maximillian",
- "America", "Sylvana", "Fitz", "Mo", "Marissa", "Cass", "Eldon", "Wilfrid", "Tel", "Joann", "Kendra",
- "Tolly", "Leanne", "Ferdie", "Haven", "Lucas", "Marlee", "Cyrilla", "Red", "Phoenix", "Jazmin", "Carin",
- "Gena", "Lashonda", "Tucker", "Genette", "Kizzy", "Winifred", "Melody", "Keely", "Kaylyn", "Radcliff",
- "Lettie", "Foster", "Lyndsey", "Nicholas", "Farley", "Louisa", "Dana", "Dortha", "Francine", "Doran",
- "Bonita", "Hal", "Sawyer", "Reginald", "Aislin", "Nathan", "Baylee", "Abilene", "Ladonna", "Maurine",
- "Shelly", "Deandre", "Jasmin", "Roderic", "Tiffany", "Amanda", "Verity", "Wilford", "Gayelord", "Whitney",
- "Demelza", "Kenton", "Alberta", "Kyra", "Tabitha", "Sampson", "Korey", "Lillian", "Edison", "Clayton",
- "Steph", "Maya", "Dusty", "Jim", "Ronny", "Adrianne", "Bernard", "Harris", "Kiley", "Alexander", "Kisha",
- "Ethalyn", "Patience", "Briony", "Indigo", "Aureole", "Makenzie", "Molly", "Sherilyn", "Barry", "Laverne",
- "Hunter", "Rocky", "Tyreek", "Madalyn", "Phyliss", "Chet", "Beatrice", "Faye", "Lavina", "Madelyn",
- "Tracey", "Gyles", "Patti", "Carlyn", "Stephanie", "Jackalyn", "Larrie", "Kimmy", "Isolda", "Emelina",
- "Lis", "Zillah", "Cody", "Sheard", "Rufus", "Paget", "Mae", "Rexanne", "Luvinia", "Tamsen", "Rosanna",
- "Greig", "Stacia", "Mabelle", "Quianna", "Lotus", "Delice", "Bradford", "Angus", "Cosmo", "Earlene",
- "Adrian", "Arlie", "Noelle", "Sabella", "Isa", "Adelle", "Innocent", "Kirby", "Trixie", "Kenelm", "Nelda",
- "Melia", "Kendal", "Dorinda", "Placid", "Linette", "Kam", "Sherisse", "Evan", "Ewart", "Janice", "Linton",
- "Jacaline", "Charissa", "Douglas", "Aileen", "Kemp", "Oli", "Amethyst", "Rosie", "Nigella", "Sherill",
- "Anderson", "Alanna", "Eric", "Claudia", "Jennifer", "Boniface", "Harriet", "Vernon", "Lucy", "Shawnee",
- "Gerard", "Cecily", "Romey", "Randall", "Wade", "Lux", "Dawson", "Gregg", "Kade", "Roxanne", "Melinda",
- "Rolland", "Rowanne", "Fannie", "Isidore", "Melia", "Harvie", "Salal", "Eleonor", "Jacquette", "Lavone",
- "Shanika", "Tarquin", "Janet", "Josslyn", "Maegan", "Augusta", "Aubree", "Francene", "Martie", "Marisa",
- "Tyreek", "Tatianna", "Caleb", "Sheridan", "Nellie", "Barbara", "Wat", "Jayla", "Esmaralda", "Graeme",
- "Lavena", "Jemima", "Nikolas", "Triston", "Portia", "Kyla", "Marcus", "Raeburn", "Jamison", "Earl", "Wren",
- "Leighton", "Lagina", "Lucasta", "Dina", "Amaranta", "Jessika", "Claud", "Bernard", "Winifred", "Ebba",
- "Sammi", "Gall", "Chloe", "Ottoline", "Herbert", "Janice", "Gareth", "Channing", "Caleigh", "Kailee",
- "Ralphie", "Tamzen", "Quincy", "Beaumont", "Albert", "Jadyn", "Violet", "Luanna", "Moriah", "Humbert",
- "Jed", "Leona", "Hale", "Mitch", "Marlin", "Nivek", "Darwin", "Dirk", "Liliana", "Meadow", "Bernadine",
- "Jorie", "Peyton", "Astra", "Roscoe", "Gina", "Lovell", "Jewel", "Romayne", "Rosy", "Imogene", "Margaretta",
- "Lorinda", "Hopkin", "Bobby", "Flossie", "Bennie", "Horatio", "Jonah", "Lyn", "Deana", "Juliana", "Blanch",
- "Wright", "Kendal", "Woodrow", "Tania", "Austyn", "Val", "Mona", "Charla", "Rudyard", "Pamela", "Raven",
- "Zena", "Nicola", "Kaelea", "Conor", "Virgil", "Sonnie", "Goodwin", "Christianne", "Linford", "Myron",
- "Denton", "Charita", "Brody", "Ginnie", "Harrison", "Jeanine", "Quin", "Isolda", "Zoie", "Pearce", "Margie",
- "Larrie", "Angelina", "Marcia", "Jessamine", "Delilah", "Dick", "Luana", "Delicia", "Lake", "Luvenia",
- "Vaughan", "Concordia", "Gayelord", "Cheyenne", "Felix", "Dorris", "Pen", "Kristeen", "Parris", "Everitt",
- "Josephina", "Amy", "Tommie", "Adrian", "April", "Rosaline", "Zachery", "Trace", "Phoebe", "Jenelle",
- "Kameron", "Katharine", "Media", "Colton", "Tad", "Quianna", "Kerenza", "Greta", "Luvinia", "Pete", "Tonya",
- "Beckah", "Barbra", "Jon", "Tetty", "Corey", "Sylvana", "Kizzy", "Korey", "Trey", "Haydee", "Penny",
- "Mandy", "Panda", "Coline", "Ramsey", "Sukie", "Annabel", "Sarina", "Corbin", "Suzanna", "Rob", "Duana",
- "Shell", "Jason", "Eddy", "Rube", "Roseann", "Celia", "Brianne", "Nerissa", "Jera", "Humphry", "Ashlynn",
- "Terrence", "Philippina", "Coreen", "Kolour", "Indiana", "Paget", "Marlyn", "Hester", "Isbel", "Ocean",
- "Harris", "Leslie", "Vere", "Monroe", "Isabelle", "Bertie", "Clitus", "Dave", "Alethea", "Lessie", "Louiza",
- "Madlyn", "Garland", "Wolf", "Lalo", "Donny", "Amabel", "Tianna", "Louie", "Susie", "Mackenzie", "Renie",
- "Tess", "Marmaduke", "Gwendolen", "Bettina", "Beatrix", "Esmund", "Minnie", "Carlie", "Barnabas", "Ruthie",
- "Honour", "Haylie", "Xavior", "Freddie", "Ericka", "Aretha", "Edie", "Madelina", "Anson", "Tabby",
- "Derrick", "Jocosa", "Deirdre", "Aislin", "Chastity", "Abigail", "Wynonna", "Zo", "Eldon", "Krystine",
- "Ghislaine", "Zavia", "Nolene", "Marigold", "Kelley", "Sylvester", "Odell", "George", "Laurene", "Franklyn",
- "Clarice", "Mo", "Dustin", "Debbi", "Lina", "Tony", "Acacia", "Hettie", "Natalee", "Marcie", "Brittany",
- "Elnora", "Rachel", "Dawn", "Basil", "Christal", "Anjelica", "Fran", "Tawny", "Delroy", "Tameka", "Lillie",
- "Ceara", "Deanna", "Deshaun", "Ken", "Bradford", "Justina", "Merle", "Draven", "Gretta", "Harriette",
- "Webster", "Nathaniel", "Anemone", "Coleen", "Ruth", "Chryssa", "Hortensia", "Saffie", "Deonne", "Leopold",
- "Harlan", "Lea", "Eppie", "Lucinda", "Tilda", "Fanny", "Titty", "Lockie", "Jepson", "Sherisse", "Maralyn",
- "Ethel", "Sly", "Ebenezer", "Canute", "Ella", "Freeman", "Reuben", "Olivette", "Nona", "Rik", "Amice",
- "Kristine", "Kathie", "Jayne", "Jeri", "Mckenna", "Bertram", "Kaylee", "Livia", "Gil", "Wallace", "Maryann",
- "Keeleigh", "Laurinda", "Doran", "Khloe", "Dakota", "Yaron", "Kimberleigh", "Gytha", "Doris", "Marylyn",
- "Benton", "Linnette", "Esther", "Jakki", "Rowina", "Marian", "Roselyn", "Norbert", "Maggie", "Caesar",
- "Phinehas", "Jerry", "Jasmine", "Antonette", "Miriam", "Monna", "Maryvonne", "Jacquetta", "Bernetta",
- "Napier", "Annie", "Gladwin", "Sheldon", "Aric", "Elouise", "Gawain", "Kristia", "Gabe", "Kyra", "Red",
- "Tod", "Dudley", "Lorraine", "Ryley", "Sabina", "Poppy", "Leland", "Aileen", "Eglantine", "Alicia", "Jeni",
- "Addy", "Tiffany", "Geffrey", "Lavina", "Collin", "Clover", "Vin", "Jerome", "Doug", "Vincent", "Florence",
- "Scarlet", "Celeste", "Desdemona", "Tiphanie", "Kassandra", "Ashton", "Madison", "Art", "Magdalene", "Iona",
- "Josepha", "Anise", "Ferne", "Derek", "Huffie", "Qiana", "Ysabel", "Tami", "Shannah", "Xavier", "Willard",
- "Winthrop", "Vickie", "Maura", "Placid", "Tiara", "Reggie", "Elissa", "Isa", "Chrysanta", "Jeff", "Bessie",
- "Terri", "Amilia", "Brett", "Daniella", "Damion", "Carolina", "Maximillian", "Travers", "Benjamin", "Oprah",
- "Darcy", "Yolanda", "Nicolina", "Crofton", "Jarrett", "Kaitlin", "Shauna", "Keren", "Bevis", "Kalysta",
- "Sharron", "Alyssa", "Blythe", "Zelma", "Caelie", "Norwood", "Billie", "Patrick", "Gary", "Cambria",
- "Tylar", "Mason", "Helen", "Melyssa", "Gene", "Gilberta", "Carter", "Herbie", "Harmonie", "Leola",
- "Eugenia", "Clint", "Pauletta", "Edwyna", "Georgina", "Teal", "Harper", "Izzy", "Dillon", "Kezia",
- "Evangeline", "Colene", "Madelaine", "Zilla", "Rudy", "Dottie", "Caris", "Morton", "Marge", "Tacey",
- "Parker", "Troy", "Liza", "Lewin", "Tracie", "Justine", "Dallas", "Linden", "Ray", "Loretta", "Teri",
- "Elvis", "Diane", "Julianna", "Manfred", "Denise", "Eireen", "Ann", "Kenith", "Linwood", "Kathlyn",
- "Bernice", "Shelley", "Oswald", "Amedeus", "Homer", "Tanzi", "Ted", "Ralphina", "Hyacinth", "Lotus",
- "Matthias", "Arlette", "Clark", "Cecil", "Elspeth", "Alvena", "Noah", "Millard", "Brenden", "Cole",
- "Philipa", "Nina", "Thelma", "Iantha", "Reid", "Jefferson", "Meg", "Elsie", "Shirlee", "Nathan", "Nancy",
- "Simona", "Racheal", "Carin", "Emory", "Delice", "Kristi", "Karaugh", "Kaety", "Tilly", "Em", "Alanis",
- "Darrin", "Jerrie", "Hollis", "Cary", "Marly", "Carita", "Jody", "Farley", "Hervey", "Rosalin", "Cuthbert",
- "Stewart", "Jodene", "Caileigh", "Briscoe", "Dolores", "Sheree", "Eustace", "Nigel", "Detta", "Barret",
- "Rowland", "Kenny", "Githa", "Zoey", "Adela", "Petronella", "Opal", "Coleman", "Niles", "Cyril", "Dona",
- "Alberic", "Allannah", "Jules", "Avalon", "Hadley", "Thomas", "Renita", "Calanthe", "Heron", "Shawnda",
- "Chet", "Malina", "Manny", "Rina", "Frieda", "Eveleen", "Deshawn", "Amos", "Raelene", "Paige", "Molly",
- "Nannie", "Ileen", "Brendon", "Milford", "Unice", "Rebeccah", "Caedmon", "Gae", "Doreen", "Vivian", "Louis",
- "Raphael", "Vergil", "Lise", "Glenn", "Karyn", "Terance", "Reina", "Jake", "Gordon", "Wisdom", "Isiah",
- "Gervase", "Fern", "Marylou", "Roddy", "Justy", "Derick", "Shantelle", "Adam", "Chantel", "Madoline",
- "Emmerson", "Lexie", "Mickey", "Stephen", "Dane", "Stacee", "Elwin", "Tracey", "Alexandra", "Ricky", "Ian",
- "Kasey", "Rita", "Alanna", "Georgene", "Deon", "Zavier", "Ophelia", "Deforest", "Lowell", "Zubin", "Hardy",
- "Osmund", "Tabatha", "Debby", "Katlyn", "Tallulah", "Priscilla", "Braden", "Wil", "Keziah", "Jen", "Aggie",
- "Korbin", "Lemoine", "Barnaby", "Tranter", "Goldie", "Roderick", "Trina", "Emery", "Pris", "Sidony",
- "Adelle", "Tate", "Wilf", "Zola", "Brande", "Chris", "Calanthia", "Lilly", "Kaycee", "Lashonda", "Jasmin",
- "Elijah", "Shantel", "Simon", "Rosalind", "Jarod", "Kaylie", "Corrine", "Joselyn", "Archibald",
- "Mariabella", "Winton", "Merlin", "Chad", "Ursula", "Kristopher", "Hewie", "Adrianna", "Lyndsay", "Jasmyn",
- "Tim", "Evette", "Margaret", "Samson", "Bronte", "Terence", "Leila", "Candice", "Tori", "Jamey",
- "Coriander", "Conrad", "Floyd", "Karen", "Lorin", "Maximilian", "Cairo", "Emily", "Yasmin", "Karolyn",
- "Bryan", "Lanny", "Kimberly", "Rick", "Chaz", "Krystle", "Lyric", "Laura", "Garrick", "Flip", "Monty",
- "Brendan", "Ermintrude", "Rayner", "Merla", "Titus", "Marva", "Patricia", "Leone", "Tracy", "Jaqueline",
- "Hallam", "Delores", "Cressida", "Carlyle", "Leann", "Kelcey", "Laurence", "Ryan", "Reynold", "Mark",
- "Collyn", "Audie", "Sammy", "Ellery", "Sallie", "Pamelia", "Adolph", "Lydia", "Titania", "Ron", "Bridger",
- "Aline", "Read", "Kelleigh", "Weldon", "Irving", "Garey", "Diggory", "Evander", "Kylee", "Deidre", "Ormond",
- "Laurine", "Reannon", "Arline", "Pat"
-
- };
-
- public static String[] jargon = { "wireless", "signal", "network", "3G", "plan", "touch-screen", "customer-service",
- "reachability", "voice-command", "shortcut-menu", "customization", "platform", "speed", "voice-clarity",
- "voicemail-service" };
-
- public static String[] vendors = { "at&t", "verizon", "t-mobile", "sprint", "motorola", "samsung", "iphone" };
-
- public static String[] org_list = { "Latsonity", "ganjalax", "Zuncan", "Lexitechno", "Hot-tech", "subtam",
- "Coneflex", "Ganjatax", "physcane", "Tranzap", "Qvohouse", "Zununoing", "jaydax", "Keytech", "goldendexon",
- "Villa-tech", "Trustbam", "Newcom", "Voltlane", "Ontohothex", "Ranhotfan", "Alphadax", "Transhigh",
- "kin-ron", "Doublezone", "Solophase", "Vivaace", "silfind", "Basecone", "sonstreet", "Freshfix",
- "Techitechi", "Kanelectrics", "linedexon", "Goldcity", "Newfase", "Technohow", "Zimcone", "Salthex",
- "U-ron", "Solfix", "whitestreet", "Xx-technology", "Hexviafind", "over-it", "Strongtone", "Tripplelane",
- "geomedia", "Scotcity", "Inchex", "Vaiatech", "Striptaxon", "Hatcom", "tresline", "Sanjodax", "freshdox",
- "Sumlane", "Quadlane", "Newphase", "overtech", "Voltbam", "Icerunin", "Fixdintex", "Hexsanhex", "Statcode",
- "Greencare", "U-electrics", "Zamcorporation", "Ontotanin", "Tanzimcare", "Groovetex", "Ganjastrip",
- "Redelectronics", "Dandamace", "Whitemedia", "strongex", "Streettax", "highfax", "Mathtech", "Xx-drill",
- "Sublamdox", "Unijobam", "Rungozoom", "Fixelectrics", "Villa-dox", "Ransaofan", "Plexlane", "itlab",
- "Lexicone", "Fax-fax", "Viatechi", "Inchdox", "Kongreen", "Doncare", "Y-geohex", "Opeelectronics",
- "Medflex", "Dancode", "Roundhex", "Labzatron", "Newhotplus", "Sancone", "Ronholdings", "Quoline",
- "zoomplus", "Fix-touch", "Codetechno", "Tanzumbam", "Indiex", "Canline" };
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
index 7d27e45..e795730 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
@@ -174,7 +174,6 @@ public class ExternalDataConstants {
public static final String ALIAS_LOCALFS_PUSH_ADAPTER = "push_localfs";
public static final String ALIAS_HDFS_ADAPTER = "hdfs";
public static final String ALIAS_SOCKET_ADAPTER = "socket_adapter";
- public static final String ALIAS_TWITTER_FIREHOSE_ADAPTER = "twitter_firehose";
public static final String ALIAS_SOCKET_CLIENT_ADAPTER = "socket_client";
public static final String ALIAS_RSS_ADAPTER = "rss";
public static final String ALIAS_FILE_FEED_ADAPTER = "file_feed";
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/TweetGenerator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/TweetGenerator.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/TweetGenerator.java
deleted file mode 100644
index b86c170..0000000
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/TweetGenerator.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.external.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.asterix.external.util.DataGenerator.InitializationInfo;
-import org.apache.asterix.external.util.DataGenerator.TweetMessage;
-import org.apache.asterix.external.util.DataGenerator.TweetMessageIterator;
-
-public class TweetGenerator {
- private static final Logger LOGGER = Logger.getLogger(TweetGenerator.class.getName());
-
- public static final String KEY_DURATION = "duration";
- public static final String KEY_TPS = "tps";
- public static final String KEY_VERBOSE = "verbose";
- public static final String KEY_FIELDS = "fields";
- public static final int INFINITY = 0;
-
- private static final int DEFAULT_DURATION = INFINITY;
-
- private final int duration;
- private TweetMessageIterator tweetIterator = null;
- private final int partition;
- private long tweetCount = 0;
- private int frameTweetCount = 0;
- private int numFlushedTweets = 0;
- private DataGenerator dataGenerator = null;
- private final ByteBuffer outputBuffer = ByteBuffer.allocate(32 * 1024);
- private final String[] fields;
- private final List<OutputStream> subscribers;
- private final Object lock = new Object();
- private final List<OutputStream> subscribersForRemoval = new ArrayList<OutputStream>();
-
- public TweetGenerator(Map<String, String> configuration, int partition) {
- this.partition = partition;
- String value = configuration.get(KEY_DURATION);
- this.duration = value != null ? Integer.parseInt(value) : DEFAULT_DURATION;
- dataGenerator = new DataGenerator(new InitializationInfo());
- tweetIterator = dataGenerator.new TweetMessageIterator(duration);
- this.fields = configuration.get(KEY_FIELDS) != null ? configuration.get(KEY_FIELDS).split(",") : null;
- this.subscribers = new ArrayList<OutputStream>();
- }
-
- private void writeTweetString(TweetMessage tweetMessage) throws IOException {
- String tweet = tweetMessage.getAdmEquivalent(fields) + "\n";
- tweetCount++;
- byte[] b = tweet.getBytes();
- if ((outputBuffer.position() + b.length) > outputBuffer.limit()) {
- flush();
- numFlushedTweets += frameTweetCount;
- frameTweetCount = 0;
- outputBuffer.put(b);
- } else {
- outputBuffer.put(b);
- }
- frameTweetCount++;
- }
-
- private void flush() throws IOException {
- outputBuffer.flip();
- synchronized (lock) {
- for (OutputStream os : subscribers) {
- try {
- os.write(outputBuffer.array(), 0, outputBuffer.limit());
- } catch (Exception e) {
- subscribersForRemoval.add(os);
- }
- }
- if (!subscribersForRemoval.isEmpty()) {
- subscribers.removeAll(subscribersForRemoval);
- subscribersForRemoval.clear();
- }
- }
- outputBuffer.position(0);
- outputBuffer.limit(32 * 1024);
- }
-
- public boolean generateNextBatch(int numTweets) throws Exception {
- boolean moreData = tweetIterator.hasNext();
- if (!moreData) {
- if (outputBuffer.position() > 0) {
- flush();
- }
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info("Reached end of batch. Tweet Count: [" + partition + "]" + tweetCount);
- }
- return false;
- } else {
- int count = 0;
- while (count < numTweets) {
- writeTweetString(tweetIterator.next());
- count++;
- }
- return true;
- }
- }
-
- public int getNumFlushedTweets() {
- return numFlushedTweets;
- }
-
- public void registerSubscriber(OutputStream os) {
- synchronized (lock) {
- subscribers.add(os);
- }
- }
-
- public void deregisterSubscribers(OutputStream os) {
- synchronized (lock) {
- subscribers.remove(os);
- }
- }
-
- public void close() throws IOException {
- synchronized (lock) {
- for (OutputStream os : subscribers) {
- os.close();
- }
- }
- }
-
- public boolean isSubscribed() {
- return !subscribers.isEmpty();
- }
-
- public long getTweetCount() {
- return tweetCount;
- }
-
-}
[3/8] asterixdb git commit: Move Twitter Firehose Datasource to Test
Source Folder
Posted by mb...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/TweetGeneratorForSpatialIndexEvaluation.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/TweetGeneratorForSpatialIndexEvaluation.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/TweetGeneratorForSpatialIndexEvaluation.java
deleted file mode 100644
index fcaa2a4..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/TweetGeneratorForSpatialIndexEvaluation.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.asterix.tools.external.data;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.asterix.tools.external.data.DataGeneratorForSpatialIndexEvaluation.InitializationInfo;
-import org.apache.asterix.tools.external.data.DataGeneratorForSpatialIndexEvaluation.TweetMessage;
-import org.apache.asterix.tools.external.data.DataGeneratorForSpatialIndexEvaluation.TweetMessageIterator;
-
-public class TweetGeneratorForSpatialIndexEvaluation {
-
- private static Logger LOGGER = Logger.getLogger(TweetGeneratorForSpatialIndexEvaluation.class.getName());
-
- public static final String KEY_DURATION = "duration";
- public static final String KEY_TPS = "tps";
- public static final String KEY_GUID_SEED = "guid-seed";
- public static final String KEY_OPENSTREETMAP_FILEPATH = "open-street-map-filepath";
- public static final String KEY_LOCATION_SAMPLE_INTERVAL = "location-sample-interval";
-
- public static final String OUTPUT_FORMAT = "output-format";
- public static final String OUTPUT_FORMAT_ARECORD = "arecord";
- public static final String OUTPUT_FORMAT_ADM_STRING = "adm-string";
-
- private static final int DEFAULT_DURATION = 60; //seconds
- private static final int DEFAULT_GUID_SEED = 0;
- private static final int DEFAULT_SAMPLE_INTERVAL = 1;
-
- private int duration;
- private TweetMessageIterator tweetIterator = null;
- private int partition;
- private int tweetCount = 0;
- private int frameTweetCount = 0;
- private int numFlushedTweets = 0;
- private OutputStream os;
- private DataGeneratorForSpatialIndexEvaluation dataGenerator = null;
- private ByteBuffer outputBuffer = ByteBuffer.allocate(32 * 1024);
- private GULongIDGenerator uidGenerator;
- private String openStreetMapFilePath;
- private int locationSampleInterval;
-
- public int getTweetCount() {
- return tweetCount;
- }
-
- public TweetGeneratorForSpatialIndexEvaluation(Map<String, String> configuration, int partition, String format,
- OutputStream os) throws Exception {
- this.partition = partition;
- String value = configuration.get(KEY_DURATION);
- this.duration = value != null ? Integer.parseInt(value) : DEFAULT_DURATION;
- openStreetMapFilePath = configuration.get(KEY_OPENSTREETMAP_FILEPATH);
- String lsi = configuration.get(KEY_LOCATION_SAMPLE_INTERVAL);
- this.locationSampleInterval = lsi != null ? Integer.parseInt(lsi) : DEFAULT_SAMPLE_INTERVAL;
- int guidSeed = configuration.get(KEY_GUID_SEED) != null ? Integer.parseInt(configuration.get(KEY_GUID_SEED))
- : DEFAULT_GUID_SEED;
- uidGenerator = new GULongIDGenerator(partition, (byte) (guidSeed));
- dataGenerator = new DataGeneratorForSpatialIndexEvaluation(new InitializationInfo(), openStreetMapFilePath,
- locationSampleInterval);
- tweetIterator = dataGenerator.new TweetMessageIterator(duration, uidGenerator);
- this.os = os;
- }
-
- private void writeTweetString(TweetMessage tweetMessage) throws IOException {
- String tweet = tweetMessage.toString() + "\n";
- tweetCount++;
- byte[] b = tweet.getBytes();
- if (outputBuffer.position() + b.length > outputBuffer.limit()) {
- flush();
- numFlushedTweets += frameTweetCount;
- frameTweetCount = 0;
- outputBuffer.put(b);
- } else {
- outputBuffer.put(b);
- }
- frameTweetCount++;
- }
-
- public int getNumFlushedTweets() {
- return numFlushedTweets;
- }
-
- private void flush() throws IOException {
- outputBuffer.flip();
- os.write(outputBuffer.array(), 0, outputBuffer.limit());
- outputBuffer.position(0);
- outputBuffer.limit(32 * 1024);
- }
-
- public boolean setNextRecordBatch(int numTweetsInBatch) throws Exception {
- boolean moreData = tweetIterator.hasNext();
- if (!moreData) {
- if (outputBuffer.position() > 0) {
- flush();
- numFlushedTweets += frameTweetCount;
- frameTweetCount = 0;
- }
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info("Reached end of batch. Tweet Count: [" + partition + "]" + tweetCount);
- }
- return false;
- } else {
- int count = 0;
- while (count < numTweetsInBatch) {
- writeTweetString(tweetIterator.next());
- count++;
- }
- return true;
- }
- }
-
- public void resetDurationAndFlushedTweetCount(int duration) {
- tweetIterator.resetDuration(duration);
- numFlushedTweets = 0;
- tweetCount = 0;
-
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/tbltoadm/TblToAdm.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/tbltoadm/TblToAdm.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/tbltoadm/TblToAdm.java
deleted file mode 100644
index 26656f6..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/tbltoadm/TblToAdm.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.tools.tbltoadm;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-public class TblToAdm {
-
- private static final String SEPARATOR_STRING = "\\|\\s*";
- private static final char SEPARATOR_CHAR = '|';
-
- private static void convertFile(String inputFileName, String outputFileName, String scmFileName) throws IOException {
- File scmFile = new File(scmFileName);
- File inFile = new File(inputFileName);
- File outFile = new File(outputFileName);
-
- BufferedReader scmReader = new BufferedReader(new FileReader(scmFile));
- String scmStr = scmReader.readLine();
- String[] fieldInfo = scmStr.split(SEPARATOR_STRING);
- String[] fieldNames = new String[fieldInfo.length];
- boolean[] fieldIsString = new boolean[fieldInfo.length];
- for (int i = 0; i < fieldInfo.length; i++) {
- String[] f = fieldInfo[i].split(":\\s*");
- fieldNames[i] = f[0];
- fieldIsString[i] = f[1].equals("string");
- }
- scmReader.close();
-
- BufferedReader reader = new BufferedReader(new FileReader(inFile));
- PrintWriter writer = new PrintWriter(outFile);
- String row;
- while ((row = reader.readLine()) != null) {
- // String[] fields = row.split(SEPARATOR);
- if (row.length() == 0 || row.charAt(0) == ' ' || row.charAt(0) == '\n') {
- continue;
- }
- writer.write("{ ");
- int pos = 0;
- int strlen = row.length();
- for (int i = 0; i < fieldNames.length; i++) {
- if (i > 0) {
- writer.write(", ");
- }
- writer.print('"');
- writer.write(fieldNames[i]);
- writer.write("\": ");
- if (fieldIsString[i]) {
- writer.print('"');
- }
- for (; pos < strlen; pos++) {
- char c = row.charAt(pos);
- if (c != SEPARATOR_CHAR) {
- writer.print(c);
-
- } else {
- ++pos;
- break;
- }
- }
- if (fieldIsString[i]) {
- writer.print('"');
- }
- }
- writer.write(" }\n");
- }
- writer.close();
- reader.close();
- }
-
- public static void main(String args[]) throws Exception {
- if (args.length != 3) {
- System.err.println("Usage: bash tbl2adm <srcfile.tbl> <destfile.adm> <schema-file>");
- return;
- }
- convertFile(args[0], args[1], args[2]);
- }
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/translator/ADGenDmlTranslator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/translator/ADGenDmlTranslator.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/translator/ADGenDmlTranslator.java
deleted file mode 100644
index a525b1b..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/translator/ADGenDmlTranslator.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.tools.translator;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.asterix.common.annotations.TypeDataGen;
-import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.lang.common.base.Statement;
-import org.apache.asterix.lang.common.statement.DataverseDecl;
-import org.apache.asterix.lang.common.statement.TypeDecl;
-import org.apache.asterix.metadata.MetadataException;
-import org.apache.asterix.metadata.MetadataTransactionContext;
-import org.apache.asterix.om.types.IAType;
-import org.apache.asterix.om.types.TypeSignature;
-import org.apache.asterix.translator.AbstractLangTranslator;
-import org.apache.asterix.translator.TypeTranslator;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-
-public class ADGenDmlTranslator extends AbstractLangTranslator {
-
- private final MetadataTransactionContext mdTxnCtx;
- private final List<Statement> aqlStatements;
- private Map<TypeSignature, IAType> types;
- private Map<TypeSignature, TypeDataGen> typeDataGenMap;
-
- public ADGenDmlTranslator(MetadataTransactionContext mdTxnCtx, List<Statement> aqlStatements) {
- this.mdTxnCtx = mdTxnCtx;
- this.aqlStatements = aqlStatements;
- }
-
- public void translate() throws AsterixException, MetadataException, AlgebricksException {
- String defaultDataverse = getDefaultDataverse();
- types = new HashMap<TypeSignature, IAType>();
- typeDataGenMap = new HashMap<TypeSignature, TypeDataGen>();
-
- for (Statement stmt : aqlStatements) {
- if (stmt.getKind() == Statement.Kind.TYPE_DECL) {
- TypeDecl td = (TypeDecl) stmt;
- String typeDataverse =
- td.getDataverseName() == null ? defaultDataverse : td.getDataverseName().getValue();
-
- Map<TypeSignature, IAType> typeInStmt = TypeTranslator.computeTypes(mdTxnCtx, td.getTypeDef(),
- td.getIdent().getValue(), typeDataverse, types);
- types.putAll(typeInStmt);
-
- TypeSignature signature = new TypeSignature(typeDataverse, td.getIdent().getValue());
- TypeDataGen tdg = td.getDatagenAnnotation();
- if (tdg != null) {
- typeDataGenMap.put(signature, tdg);
- }
- }
- }
- }
-
- private String getDefaultDataverse() {
- for (Statement stmt : aqlStatements) {
- if (stmt.getKind() == Statement.Kind.DATAVERSE_DECL) {
- return ((DataverseDecl) stmt).getDataverseName().getValue();
- }
- }
- return null;
- }
-
- public Map<TypeSignature, IAType> getTypeMap() {
- return types;
- }
-
- public Map<TypeSignature, TypeDataGen> getTypeDataGenMap() {
- return typeDataGenMap;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdgClientDriver.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdgClientDriver.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdgClientDriver.java
new file mode 100644
index 0000000..8a1adb0
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdgClientDriver.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.tools.datagen;
+
+import java.io.File;
+
+import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.CmdLineParser;
+
+public class AdgClientDriver {
+
+ public static final int NUMBER_OF_ARGUMENTS = 2;
+
+ public static class AdgClientConfig {
+
+ @Argument(index = 0, required = true, metaVar = "ARG1", usage = "The file containing the annotated schema.")
+ private File schemaFile;
+
+ @Argument(index = 1, required = true, metaVar = "ARG2", usage = "The output directory path.")
+ private File outputDir;
+ }
+
+ public static void main(String[] args) throws Exception {
+ AdgClientConfig acc = new AdgClientConfig();
+ CmdLineParser cmdParser = new CmdLineParser(acc);
+ try {
+ cmdParser.parseArgument(args);
+ } catch (Exception e) {
+ cmdParser.printUsage(System.err);
+ throw e;
+ }
+ AdmDataGen adg = new AdmDataGen(acc.schemaFile, acc.outputDir);
+ adg.init();
+ adg.dataGen();
+ }
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
new file mode 100644
index 0000000..2918575
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
@@ -0,0 +1,1020 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.tools.datagen;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import org.apache.asterix.common.annotations.AutoDataGen;
+import org.apache.asterix.common.annotations.DateBetweenYearsDataGen;
+import org.apache.asterix.common.annotations.DatetimeAddRandHoursDataGen;
+import org.apache.asterix.common.annotations.DatetimeBetweenYearsDataGen;
+import org.apache.asterix.common.annotations.FieldIntervalDataGen;
+import org.apache.asterix.common.annotations.FieldValFileDataGen;
+import org.apache.asterix.common.annotations.FieldValFileSameIndexDataGen;
+import org.apache.asterix.common.annotations.IRecordFieldDataGen;
+import org.apache.asterix.common.annotations.IRecordTypeAnnotation;
+import org.apache.asterix.common.annotations.IRecordTypeAnnotation.Kind;
+import org.apache.asterix.common.annotations.InsertRandIntDataGen;
+import org.apache.asterix.common.annotations.ListDataGen;
+import org.apache.asterix.common.annotations.ListValFileDataGen;
+import org.apache.asterix.common.annotations.RecordDataGenAnnotation;
+import org.apache.asterix.common.annotations.TypeDataGen;
+import org.apache.asterix.common.annotations.UndeclaredFieldsDataGen;
+import org.apache.asterix.common.exceptions.ACIDException;
+import org.apache.asterix.common.exceptions.AsterixException;
+import org.apache.asterix.common.transactions.JobId;
+import org.apache.asterix.lang.aql.parser.AQLParserFactory;
+import org.apache.asterix.lang.aql.parser.ParseException;
+import org.apache.asterix.lang.common.base.IParser;
+import org.apache.asterix.lang.common.base.IParserFactory;
+import org.apache.asterix.lang.common.base.Statement;
+import org.apache.asterix.metadata.MetadataException;
+import org.apache.asterix.metadata.MetadataTransactionContext;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.AUnionType;
+import org.apache.asterix.om.types.AbstractCollectionType;
+import org.apache.asterix.om.types.BuiltinType;
+import org.apache.asterix.om.types.IAType;
+import org.apache.asterix.om.types.TypeSignature;
+import org.apache.asterix.om.util.NonTaggedFormatUtil;
+import org.apache.asterix.tools.translator.ADGenDmlTranslator;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
+import org.apache.hyracks.algebricks.data.utils.WriteValueTools;
+
+public class AdmDataGen {
+
+ class DataGeneratorContext {
+ private Map<File, String[]> fileToLoadedDataMap = new HashMap<File, String[]>();
+
+ public Map<File, String[]> getFileToLoadedDataMap() {
+ return fileToLoadedDataMap;
+ }
+ }
+
+ public static void printDate(int year, int month, int day, PrintStream out) throws IOException {
+ WriteValueTools.writeInt(year, out);
+ out.print("-");
+ if (month < 10) {
+ out.print("0");
+ }
+ WriteValueTools.writeInt(month, out);
+ out.print("-");
+ if (day < 10) {
+ out.print("0");
+ }
+ WriteValueTools.writeInt(day, out);
+ }
+
+ abstract class AbstractValueGenerator {
+ protected PrintStream out;
+ protected DataGeneratorContext ctx;
+
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ this.out = out;
+ this.ctx = ctx;
+ }
+
+ public abstract void generate() throws IOException;
+ }
+
+ abstract class RandomValueGenerator extends AbstractValueGenerator {
+ protected Random rnd;
+
+ @Override
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ super.init(out, ctx);
+ this.rnd = new Random(51);
+ }
+
+ }
+
+ class IntAutoGenerator extends AbstractValueGenerator {
+
+ private final int initValue;
+ private int val;
+
+ public IntAutoGenerator(int initValue) {
+ this.initValue = initValue;
+ }
+
+ @Override
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ super.init(out, ctx);
+ val = initValue;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ WriteValueTools.writeInt(val, out);
+ val++;
+ }
+
+ }
+
+ class LongAutoGenerator extends AbstractValueGenerator {
+
+ private final long initValue;
+ private long val;
+
+ public LongAutoGenerator(long initValue) {
+ this.initValue = initValue;
+ }
+
+ @Override
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ super.init(out, ctx);
+ val = initValue;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ WriteValueTools.writeLong(val, out);
+ out.print("i64");
+ val++;
+ }
+
+ }
+
+ class StringFromArrayGenerator extends RandomValueGenerator {
+ private final String[][] array;
+ private int lastIndex;
+ private final String constructor;
+ private String[] chosen;
+
+ public StringFromArrayGenerator(String[][] array, String constructor) {
+ this.array = array;
+ this.constructor = constructor;
+ }
+
+ @Override
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ super.init(out, ctx);
+ this.lastIndex = -1;
+ this.chosen = new String[array.length];
+ }
+
+ @Override
+ public void generate() throws IOException {
+ for (int i = 0; i < array.length; i++) {
+ lastIndex = Math.abs(rnd.nextInt()) % array[i].length;
+ chosen[i] = array[i][lastIndex];
+ }
+ if (constructor != null) {
+ out.print(constructor);
+ out.print("(");
+ }
+ out.print("\"");
+ for (int i = 0; i < chosen.length; i++) {
+ out.print(chosen[i]);
+ }
+ out.print("\"");
+ if (constructor != null) {
+ out.print(")");
+ }
+ }
+
+ public int getLastIndex() {
+ return lastIndex;
+ }
+ }
+
+ abstract class AbstractCollectionDataGenerator extends RandomValueGenerator {
+ protected final AbstractCollectionType act;
+ protected final int min;
+ protected final int max;
+ protected final String startList;
+ protected final String endList;
+
+ public AbstractCollectionDataGenerator(AbstractCollectionType act, int min, int max) {
+ this.act = act;
+ this.min = min;
+ this.max = max;
+ if (act.getTypeTag() == ATypeTag.ORDEREDLIST) {
+ startList = "[";
+ endList = "]";
+ } else {
+ startList = "{{";
+ endList = "}}";
+ }
+ }
+
+ }
+
+ class ListDataGenerator extends AbstractCollectionDataGenerator {
+
+ private AbstractValueGenerator itemGen;
+
+ public ListDataGenerator(AbstractCollectionType act, int min, int max) {
+ super(act, min, max);
+ }
+
+ @Override
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ super.init(out, ctx);
+ IAType t = act.getItemType();
+ if (t.getTypeTag() != ATypeTag.RECORD) {
+ throw new NotImplementedException("list annotation only works with record item types for now.");
+ }
+ ARecordType rt = (ARecordType) t;
+ RecordDataGenAnnotation dga = firstDataGenAnnotation(rt);
+ if (dga == null) {
+ throw new Exception("No annotation on item type " + t);
+ }
+ itemGen = new RecordGenerator(rt, dga, null);
+ itemGen.init(out, ctx);
+ }
+
+ @Override
+ public void generate() throws IOException {
+ out.print(startList);
+ int numItems = rnd.nextInt(max - min + 1) + min;
+ for (int i = 0; i < numItems; i++) {
+ if (i > 0) {
+ out.print(", ");
+ }
+ itemGen.generate();
+ }
+ out.print(endList);
+ }
+
+ }
+
+ class ListFromArrayGenerator extends AbstractCollectionDataGenerator {
+
+ private final String[] array;
+ private String constructor;
+
+ public ListFromArrayGenerator(AbstractCollectionType act, String[] array, int min, int max) {
+ super(act, min, max);
+ this.array = array;
+ }
+
+ @Override
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ super.init(out, ctx);
+ if (act.getItemType().getTypeTag() == ATypeTag.STRING) {
+ constructor = null;
+ } else {
+ constructor = getConstructor(act.getItemType());
+ }
+ }
+
+ @Override
+ public void generate() throws IOException {
+ out.print(startList);
+ int numItems = rnd.nextInt(max - min + 1) + min;
+ for (int i = 0; i < numItems; i++) {
+ if (i > 0) {
+ out.print(", ");
+ }
+ int c = Math.abs(rnd.nextInt()) % array.length;
+ if (constructor != null) {
+ out.print(constructor);
+ out.print("(");
+ }
+ out.print("\"");
+ out.print(array[c]);
+ out.print("\"");
+ if (constructor != null) {
+ out.print(")");
+ }
+ }
+ out.print(endList);
+ }
+
+ }
+
+ class StringFromArraySameIndexGenerator extends AbstractValueGenerator {
+ private final String[] array;
+ private final StringFromArrayGenerator sfag;
+ private final String constructor;
+
+ public StringFromArraySameIndexGenerator(String[] array, StringFromArrayGenerator sfag, String constructor) {
+ this.array = array;
+ this.sfag = sfag;
+ this.constructor = constructor;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ String val = array[sfag.getLastIndex()];
+ if (constructor != null) {
+ out.print(constructor);
+ out.print("(");
+ }
+ out.print("\"");
+ out.print(val);
+ out.print("\"");
+ if (constructor != null) {
+ out.print(")");
+ }
+ }
+ }
+
+ class IntIntervalGenerator extends RandomValueGenerator {
+
+ private final int min;
+ private final int max;
+ private final String prefix;
+ private final String suffix;
+
+ public IntIntervalGenerator(int min, int max, String prefix, String suffix) {
+ this.min = min;
+ this.max = max;
+ this.prefix = prefix;
+ this.suffix = suffix;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ int v = Math.abs(rnd.nextInt() % (max - min + 1)) + min;
+ if (prefix != null) {
+ out.print(prefix);
+ }
+ WriteValueTools.writeInt(v, out);
+ if (suffix != null) {
+ out.print(suffix);
+ }
+ }
+
+ }
+
+ class LongIntervalGenerator extends RandomValueGenerator {
+
+ private final long min;
+ private final long max;
+ private final String prefix;
+ private final String suffix;
+
+ public LongIntervalGenerator(long min, long max, String prefix, String suffix) {
+ this.min = min;
+ this.max = max;
+ this.prefix = prefix;
+ this.suffix = suffix;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ long v = Math.abs(rnd.nextLong() % (max - min + 1)) + min;
+ if (prefix != null) {
+ out.print(prefix);
+ }
+ WriteValueTools.writeLong(v, out);
+ if (suffix != null) {
+ out.print(suffix);
+ }
+ }
+
+ }
+
+ class DoubleIntervalGenerator extends RandomValueGenerator {
+
+ private final double min;
+ private final double max;
+ private final String prefix;
+ private final String suffix;
+
+ public DoubleIntervalGenerator(double min, double max, String prefix, String suffix) {
+ this.min = min;
+ this.max = max;
+ this.prefix = prefix;
+ this.suffix = suffix;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ double v = Math.abs(rnd.nextDouble() % (max - min)) + min;
+ if (prefix != null) {
+ out.print(prefix);
+ }
+ out.print(v);
+ if (suffix != null) {
+ out.print(suffix);
+ }
+ }
+
+ }
+
+ class InsertRandIntGenerator extends RandomValueGenerator {
+
+ private final String str1;
+ private final String str2;
+
+ public InsertRandIntGenerator(String str1, String str2) {
+ this.str1 = "\"" + str1;
+ this.str2 = str2 + "\"";
+ }
+
+ @Override
+ public void generate() throws IOException {
+ int v = Math.abs(rnd.nextInt());
+ out.print(str1);
+ WriteValueTools.writeInt(v, out);
+ out.print(str2);
+ }
+
+ }
+
+ interface AccessibleDateGenerator {
+ public int getYear();
+
+ public int getMonth();
+
+ public int getDay();
+ }
+
+ abstract class DateGenerator extends RandomValueGenerator implements AccessibleDateGenerator {
+
+ private int year;
+ private int month;
+ private int day;
+
+ protected void generateDate(int minYear, int maxYear) throws IOException {
+ year = rnd.nextInt(maxYear - minYear + 1) + minYear;
+ month = Math.abs(rnd.nextInt()) % 12 + 1;
+ day = Math.abs(rnd.nextInt()) % 28 + 1;
+ printDate(year, month, day, out);
+ }
+
+ @Override
+ public int getYear() {
+ return year;
+ }
+
+ @Override
+ public int getMonth() {
+ return month;
+ }
+
+ @Override
+ public int getDay() {
+ return day;
+ }
+ }
+
+ class DateBetweenYearsGenerator extends DateGenerator {
+
+ private final int minYear;
+ private final int maxYear;
+
+ public DateBetweenYearsGenerator(int minYear, int maxYear) {
+ this.minYear = minYear;
+ this.maxYear = maxYear;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ out.print("date(\"");
+ generateDate(minYear, maxYear);
+ out.print("\")");
+ }
+
+ }
+
+ interface AccessibleDatetimeGenerator extends AccessibleDateGenerator {
+ public int getHour();
+
+ public int getMinute();
+
+ public int getSecond();
+ }
+
+ class DatetimeBetweenYearsGenerator extends DateGenerator implements AccessibleDatetimeGenerator {
+ private final int minYear;
+ private final int maxYear;
+ private int hour;
+
+ public DatetimeBetweenYearsGenerator(int minYear, int maxYear) {
+ this.minYear = minYear;
+ this.maxYear = maxYear;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ out.print("datetime(\"");
+ generateDate(minYear, maxYear);
+ out.print("T");
+ hour = rnd.nextInt(24);
+ if (hour < 10) {
+ out.print("0");
+ }
+ WriteValueTools.writeInt(hour, out);
+ out.print(":00:00\")");
+ }
+
+ @Override
+ public int getHour() {
+ return hour;
+ }
+
+ @Override
+ public int getMinute() {
+ return 0;
+ }
+
+ @Override
+ public int getSecond() {
+ return 0;
+ }
+
+ }
+
+ class DatetimeAddRandHoursGenerator extends RandomValueGenerator {
+
+ private final int minHours;
+ private final int maxHours;
+ private final AccessibleDatetimeGenerator adtg;
+
+ public DatetimeAddRandHoursGenerator(int minHours, int maxHours, AccessibleDatetimeGenerator adtg) {
+ this.minHours = minHours;
+ this.maxHours = maxHours;
+ this.adtg = adtg;
+ }
+
+ @Override
+ public void generate() throws IOException {
+ int addHours = rnd.nextInt(maxHours - minHours + 1) + minHours;
+
+ out.print("datetime(\"");
+ printDate(adtg.getYear(), adtg.getMonth(), adtg.getDay(), out);
+ out.print("T");
+ int h = adtg.getHour() + addHours;
+ if (h > 23) {
+ h = 23;
+ }
+ if (h < 10) {
+ out.print("0");
+ }
+ WriteValueTools.writeInt(h, out);
+ out.print(":");
+ int m = adtg.getMinute();
+ if (m < 10) {
+ out.print("0");
+ }
+ WriteValueTools.writeInt(m, out);
+ out.print(":");
+ int s = adtg.getSecond();
+ if (s < 10) {
+ out.print("0");
+ }
+ WriteValueTools.writeInt(s, out);
+ out.print("\")");
+ }
+
+ }
+
+ class GenFieldsIntGenerator extends RandomValueGenerator {
+ private final int minFields;
+ private final int maxFields;
+ private final String prefix;
+ private final int startIndex;
+ private String[] fieldNames;
+ private int[] id;
+ private int[] x;
+
+ public GenFieldsIntGenerator(int startIndex, int minFields, int maxFields, String prefix) {
+ this.startIndex = startIndex;
+ this.minFields = minFields;
+ this.maxFields = maxFields;
+ this.prefix = prefix;
+ }
+
+ @Override
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ super.init(out, ctx);
+ fieldNames = new String[maxFields];
+ for (int i = 0; i < maxFields; i++) {
+ fieldNames[i] = prefix + "_" + i;
+ }
+ id = new int[maxFields];
+ for (int i = 0; i < maxFields; i++) {
+ id[i] = i;
+ }
+ x = new int[maxFields];
+ }
+
+ @Override
+ public void generate() throws IOException {
+ int numFields = rnd.nextInt(maxFields - minFields + 1) + minFields;
+ System.arraycopy(id, 0, x, 0, maxFields);
+ int n = numFields;
+ boolean first = startIndex < 1;
+ while (n > 0) {
+ int c = rnd.nextInt(n);
+ if (first) {
+ first = false;
+ } else {
+ out.print(",");
+ }
+ out.print(" \"");
+ out.print(fieldNames[x[c]]);
+ out.print("\": ");
+ WriteValueTools.writeInt(Math.abs(rnd.nextInt()), out);
+ x[c] = x[n - 1];
+ n--;
+ }
+ }
+ }
+
+ class RecordGenerator extends RandomValueGenerator {
+
+ private AbstractValueGenerator[] declaredFieldsGenerators;
+ private boolean[] nullable;
+ private AbstractValueGenerator undeclaredFieldsGenerator;
+ private final ARecordType recType;
+ private final RecordDataGenAnnotation annot;
+ private final String printAfter;
+
+ public RecordGenerator(ARecordType type, RecordDataGenAnnotation annot, String printAfter) {
+ this.recType = type;
+ this.annot = annot;
+ this.printAfter = printAfter;
+ }
+
+ @Override
+ public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
+ super.init(out, ctx);
+ if (declaredFieldsGenerators == null) {
+ int m = annot.getDeclaredFieldsDatagen().length;
+ declaredFieldsGenerators = new AbstractValueGenerator[m];
+ nullable = new boolean[m];
+ for (int i = 0; i < m; i++) {
+ IAType ti = recType.getFieldTypes()[i];
+ if (NonTaggedFormatUtil.isOptional(ti)) {
+ ti = ((AUnionType) ti).getActualType();
+ nullable[i] = true;
+ }
+ IRecordFieldDataGen rfdg = annot.getDeclaredFieldsDatagen()[i];
+ if (rfdg == null) {
+ if (ti.getTypeTag() == ATypeTag.RECORD) {
+ ARecordType rt = (ARecordType) ti;
+ RecordDataGenAnnotation dga = null;
+ for (IRecordTypeAnnotation annot : rt.getAnnotations()) {
+ if (annot.getKind() == Kind.RECORD_DATA_GEN) {
+ dga = (RecordDataGenAnnotation) annot;
+ break;
+ }
+ }
+ if (dga != null) {
+ declaredFieldsGenerators[i] = new RecordGenerator(rt, dga, null);
+ continue;
+ }
+ }
+ if (declaredFieldsGenerators[i] == null) {
+ throw new Exception("No data generator annotation for field " + recType.getFieldNames()[i]
+ + " in type " + recType);
+ }
+ }
+ switch (rfdg.getKind()) {
+ case VALFILE: {
+ FieldValFileDataGen vf = (FieldValFileDataGen) rfdg;
+ int numFiles = vf.getFiles().length;
+ String[][] a = new String[numFiles][];
+ for (int k = 0; k < numFiles; k++) {
+ File f = vf.getFiles()[k];
+ a[k] = ctx.getFileToLoadedDataMap().get(f);
+ if (a[k] == null) {
+ a[k] = readFileAsStringArray(f);
+ ctx.getFileToLoadedDataMap().put(f, a[k]);
+ }
+ }
+ String constructor;
+ if (ti.getTypeTag() == ATypeTag.STRING) {
+ constructor = null;
+ } else {
+ constructor = getConstructor(ti);
+ }
+ declaredFieldsGenerators[i] = new StringFromArrayGenerator(a, constructor);
+ break;
+ }
+ case LISTVALFILE: {
+ ListValFileDataGen lvf = (ListValFileDataGen) rfdg;
+ String[] a = ctx.getFileToLoadedDataMap().get(lvf.getFile());
+ if (a == null) {
+ a = readFileAsStringArray(lvf.getFile());
+ ctx.getFileToLoadedDataMap().put(lvf.getFile(), a);
+ }
+ if (ti.getTypeTag() != ATypeTag.ORDEREDLIST && ti.getTypeTag() != ATypeTag.UNORDEREDLIST) {
+ throw new Exception(
+ "list-val-file annotation cannot be used for field of type " + ti.getTypeTag());
+ }
+ AbstractCollectionType act = (AbstractCollectionType) ti;
+ declaredFieldsGenerators[i] = new ListFromArrayGenerator(act, a, lvf.getMin(),
+ lvf.getMax());
+ break;
+ }
+ case VALFILESAMEINDEX: {
+ FieldValFileSameIndexDataGen vfsi = (FieldValFileSameIndexDataGen) rfdg;
+ String[] a = ctx.getFileToLoadedDataMap().get(vfsi.getFile());
+ if (a == null) {
+ a = readFileAsStringArray(vfsi.getFile());
+ ctx.getFileToLoadedDataMap().put(vfsi.getFile(), a);
+ }
+ StringFromArrayGenerator sfag = null;
+ for (int j = 0; j < i; j++) {
+ if (recType.getFieldNames()[j].equals(vfsi.getSameAsField())) {
+ if (declaredFieldsGenerators[j] instanceof StringFromArrayGenerator) {
+ sfag = (StringFromArrayGenerator) declaredFieldsGenerators[j];
+ break;
+ } else {
+ throw new Exception("Data generator for field " + recType.getFieldNames()[j]
+ + " is not based on values from a text file, as required by generator for field "
+ + recType.getFieldNames()[i]);
+ }
+ }
+ }
+ if (sfag == null) {
+ throw new Exception("Couldn't find field " + vfsi.getSameAsField() + " before field "
+ + recType.getFieldNames()[i]);
+ }
+ String constructor;
+ if (ti.getTypeTag() == ATypeTag.STRING) {
+ constructor = null;
+ } else {
+ constructor = getConstructor(ti);
+ }
+ declaredFieldsGenerators[i] = new StringFromArraySameIndexGenerator(a, sfag, constructor);
+ break;
+ }
+ case INTERVAL: {
+ FieldIntervalDataGen fi = (FieldIntervalDataGen) rfdg;
+ String prefix = null;
+ String suffix = null;
+ if (ti.getTypeTag() == ATypeTag.STRING) {
+ prefix = "\"";
+ suffix = "\"";
+ }
+ switch (fi.getValueType()) {
+ case INT: {
+ declaredFieldsGenerators[i] = new IntIntervalGenerator(
+ Integer.parseInt(fi.getMin()), Integer.parseInt(fi.getMax()), prefix,
+ suffix);
+ break;
+ }
+ case LONG: {
+ declaredFieldsGenerators[i] = new LongIntervalGenerator(Long.parseLong(fi.getMin()),
+ Long.parseLong(fi.getMax()), prefix, suffix);
+ break;
+ }
+ case DOUBLE: {
+ declaredFieldsGenerators[i] = new DoubleIntervalGenerator(
+ Double.parseDouble(fi.getMin()), Double.parseDouble(fi.getMax()), prefix,
+ suffix);
+ break;
+ }
+ default: {
+ throw new NotImplementedException();
+ }
+ }
+ break;
+ }
+ case INSERTRANDINT: {
+ InsertRandIntDataGen iri = (InsertRandIntDataGen) rfdg;
+ declaredFieldsGenerators[i] = new InsertRandIntGenerator(iri.getStr1(), iri.getStr2());
+ break;
+ }
+ case LIST: {
+ ListDataGen l = (ListDataGen) rfdg;
+ if (ti.getTypeTag() != ATypeTag.ORDEREDLIST && ti.getTypeTag() != ATypeTag.UNORDEREDLIST) {
+ throw new Exception(
+ "list-val-file annotation cannot be used for field of type " + ti.getTypeTag());
+ }
+ AbstractCollectionType act = (AbstractCollectionType) ti;
+ declaredFieldsGenerators[i] = new ListDataGenerator(act, l.getMin(), l.getMax());
+ break;
+ }
+ case DATEBETWEENYEARS: {
+ DateBetweenYearsDataGen dby = (DateBetweenYearsDataGen) rfdg;
+ declaredFieldsGenerators[i] = new DateBetweenYearsGenerator(dby.getMinYear(),
+ dby.getMaxYear());
+ break;
+ }
+ case DATETIMEBETWEENYEARS: {
+ DatetimeBetweenYearsDataGen dtby = (DatetimeBetweenYearsDataGen) rfdg;
+ declaredFieldsGenerators[i] = new DatetimeBetweenYearsGenerator(dtby.getMinYear(),
+ dtby.getMaxYear());
+ break;
+ }
+ case DATETIMEADDRANDHOURS: {
+ DatetimeAddRandHoursDataGen dtarh = (DatetimeAddRandHoursDataGen) rfdg;
+ AccessibleDatetimeGenerator adtg = null;
+ for (int j = 0; j < i; j++) {
+ if (recType.getFieldNames()[j].equals(dtarh.getAddToField())) {
+ if (declaredFieldsGenerators[j] instanceof AccessibleDatetimeGenerator) {
+ adtg = (AccessibleDatetimeGenerator) declaredFieldsGenerators[j];
+ break;
+ } else {
+ throw new Exception("Data generator for field " + recType.getFieldNames()[j]
+ + " is not based on accessible datetime values, as required by generator for field "
+ + recType.getFieldNames()[i]);
+ }
+ }
+ }
+ if (adtg == null) {
+ throw new Exception("Couldn't find field " + dtarh.getAddToField() + " before field "
+ + recType.getFieldNames()[i]);
+ }
+ declaredFieldsGenerators[i] = new DatetimeAddRandHoursGenerator(dtarh.getMinHour(),
+ dtarh.getMaxHour(), adtg);
+ break;
+ }
+ case AUTO: {
+ AutoDataGen auto = (AutoDataGen) rfdg;
+ switch (ti.getTypeTag()) {
+ case INT32: {
+ declaredFieldsGenerators[i] = new IntAutoGenerator(
+ Integer.parseInt(auto.getInitValueStr()));
+ break;
+ }
+ case INT64: {
+ declaredFieldsGenerators[i] = new LongAutoGenerator(
+ Long.parseLong(auto.getInitValueStr()));
+ break;
+ }
+ default: {
+ throw new IllegalStateException(rfdg.getKind()
+ + " annotation is not implemented for type " + ti.getTypeTag());
+ }
+ }
+ break;
+ }
+ default: {
+ throw new NotImplementedException(rfdg.getKind() + " is not implemented");
+ }
+ }
+ }
+ }
+ for (int i = 0; i < declaredFieldsGenerators.length; i++) {
+ declaredFieldsGenerators[i].init(out, ctx);
+ }
+ if (undeclaredFieldsGenerator == null) {
+ UndeclaredFieldsDataGen ufdg = annot.getUndeclaredFieldsDataGen();
+ if (ufdg != null) {
+ if (!recType.isOpen()) {
+ throw new Exception("Cannot generate undeclared fields for closed type " + recType);
+ }
+ undeclaredFieldsGenerator = new GenFieldsIntGenerator(declaredFieldsGenerators.length,
+ ufdg.getMinUndeclaredFields(), ufdg.getMaxUndeclaredFields(),
+ ufdg.getUndeclaredFieldsPrefix());
+ }
+ }
+ if (undeclaredFieldsGenerator != null) {
+ undeclaredFieldsGenerator.init(out, ctx);
+ }
+ }
+
+ @Override
+ public void generate() throws IOException {
+ out.print("{");
+ boolean first = true;
+ for (int i = 0; i < declaredFieldsGenerators.length; i++) {
+ boolean pick;
+ if (nullable[i]) {
+ pick = rnd.nextBoolean();
+ } else {
+ pick = true;
+ }
+ if (pick) {
+ if (first) {
+ first = false;
+ } else {
+ out.print(",");
+ }
+ out.print(" \"");
+ out.print(this.recType.getFieldNames()[i]);
+ out.print("\": ");
+ declaredFieldsGenerators[i].generate();
+ }
+ }
+ if (undeclaredFieldsGenerator != null) {
+ undeclaredFieldsGenerator.generate();
+ }
+ out.print(" }");
+ if (printAfter != null) {
+ out.print(printAfter);
+ }
+ }
+
+ }
+
+ private final File schemaFile;
+ private final File outputDir;
+ private Map<TypeSignature, IAType> typeMap;
+ private Map<TypeSignature, TypeDataGen> typeAnnotMap;
+ private DataGeneratorContext dgCtx;
+ private final IParserFactory parserFactory = new AQLParserFactory();
+
+ public AdmDataGen(File schemaFile, File outputDir) {
+ this.schemaFile = schemaFile;
+ this.outputDir = outputDir;
+ }
+
+ public void init() throws IOException, ParseException, AsterixException, ACIDException, MetadataException,
+ AlgebricksException {
+ FileReader aql = new FileReader(schemaFile);
+ IParser parser = parserFactory.createParser(aql);
+ List<Statement> statements = parser.parse();
+ aql.close();
+ // TODO: Need to fix how to use transactions here.
+ MetadataTransactionContext mdTxnCtx = new MetadataTransactionContext(new JobId(-1));
+ ADGenDmlTranslator dmlt = new ADGenDmlTranslator(mdTxnCtx, statements);
+ dmlt.translate();
+ typeMap = dmlt.getTypeMap();
+ typeAnnotMap = dmlt.getTypeDataGenMap();
+ dgCtx = new DataGeneratorContext();
+ }
+
+ public void dataGen() throws Exception {
+ for (Map.Entry<TypeSignature, IAType> me : typeMap.entrySet()) {
+ TypeSignature tn = me.getKey();
+ TypeDataGen tdg = typeAnnotMap.get(tn);
+ if (tdg.isDataGen()) {
+ IAType t = me.getValue();
+
+ if (t.getTypeTag() != ATypeTag.RECORD) {
+ throw new NotImplementedException();
+ }
+ ARecordType rt = (ARecordType) t;
+ RecordDataGenAnnotation dga = firstDataGenAnnotation(rt);
+ if (dga == null) {
+ throw new Exception("No data generator annotations for type " + tn);
+ }
+ File outFile = new File(outputDir + File.separator + tdg.getOutputFileName());
+ PrintStream outStream = new PrintStream(new BufferedOutputStream(new FileOutputStream(outFile)));
+ RecordGenerator rg = new RecordGenerator(rt, dga, "\n");
+ rg.init(outStream, dgCtx);
+ for (long i = 0; i < tdg.getNumValues(); i++) {
+ rg.generate();
+ }
+ outStream.close();
+ }
+ }
+ }
+
+ private static RecordDataGenAnnotation firstDataGenAnnotation(ARecordType rt) {
+ for (IRecordTypeAnnotation annot : rt.getAnnotations()) {
+ if (annot.getKind() == Kind.RECORD_DATA_GEN) {
+ return (RecordDataGenAnnotation) annot;
+ }
+ }
+ return null;
+ }
+
+ private static String[] readFileAsStringArray(File file) throws IOException {
+ List<String> tmp = new ArrayList<String>();
+ FileInputStream fstream = new FileInputStream(file);
+ DataInputStream in = new DataInputStream(fstream);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String strLine;
+ while ((strLine = br.readLine()) != null) {
+ tmp.add(strLine);
+ }
+ in.close();
+ return tmp.toArray(new String[0]);
+ }
+
+ private static String getConstructor(IAType t) throws Exception {
+ if (t instanceof BuiltinType) {
+ String s = ((BuiltinType) t).getConstructor();
+ if (s == null) {
+ throw new Exception("Type " + t + " has no constructors.");
+ }
+ return s;
+ } else {
+ throw new Exception("No string constructor for type " + t);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/CustOrdDataGen.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/CustOrdDataGen.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/CustOrdDataGen.java
new file mode 100644
index 0000000..b605f73
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/CustOrdDataGen.java
@@ -0,0 +1,476 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.tools.datagen;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+
+public class CustOrdDataGen {
+
+ // for customers
+ private static final String FIRST_NAMES_FILE_NAME = "/opt/us_census_names/dist.all.first.cleaned";
+ private static final String LAST_NAMES_FILE_NAME = "/opt/us_census_names/dist.all.last.cleaned";
+ private static final int MIN_AGE = 10;
+ private static final int MAX_AGE = 90;
+
+ private static final String[] STREETS = { "Main St.", "Oak St.", "7th St.", "Washington St.", "Cedar St.",
+ "Lake St.", "Hill St.", "Park St.", "View St." };
+ private static final int MIN_STREET_NUM = 1;
+ private static final int MAX_STREET_NUM = 10000;
+ private static final String[] CITIES = { "Seattle", "San Jose", "Mountain View", "Los Angeles", "Sunnyvale",
+ "Portland" };
+
+ private static final int MIN_INTERESTS = 0;
+ private static final int MAX_INTERESTS = 5;
+ private String[] INTERESTS = { "Bass", "Music", "Databases", "Fishing", "Tennis", "Squash", "Computers", "Books",
+ "Movies", "Cigars", "Wine", "Running", "Walking", "Skiing", "Basketball", "Video Games", "Cooking",
+ "Coffee", "Base Jumping", "Puzzles", "Chess", "Programming", "Reddit", "Soccer", "Hockey", "Money",
+ "Dancing", "Brewing", "Gardening", "Hacking", "Reading" };
+
+ private static final int MIN_CHILD_AGE = 0;
+
+ private static final int MIN_CHILDREN = 0;
+ private static final int MAX_CHILDREN = 5;
+
+ // for orders
+ private static final int MIN_ORDERS_PER_CUST = 1;
+ private static final int MAX_ORDERS_PER_CUST = 10;
+
+ private String[] CLERKS = { "Kathrin", "Katherine", "Cathryn", "Catherine", "Cat", "Kathryne", "Cathrin" };
+ private String[] ORDER_PRIORITIES = { "LOW", "MEDIUM", "HIGH", "PREMIUM" };
+ private String[] ORDER_STATUSES = { "ORDER_PLACED", "PAYMENT_RECEIVED", "ORDER_SHIPPED", "ORDER_DELIVERED" };
+
+ private String[] firstNames = { "Joe", "John", "Jill", "Gill", "Bill", "William", "Kathy", "Cathey", "Jane",
+ "Albert" };
+ private String[] lastNames = { "Doe", "Smith", "Li", "Singh", "Williams", "Davis", "Brown", "Wilson", "Moore",
+ "Thomas" };
+
+ private static final String[] UNDECLARED_FIELD_NAMES = { "param1", "param2", "param3", "param4", "param5",
+ "param6", "param7", "param8", "param9", "param10" };
+
+ private int currentCID = 0;
+ private int currentOID = 0;
+
+ private Random rndValue = new Random(50);
+
+ private Random rndChildAgeField = new Random(50);
+ private Random rndCustAgeField = new Random(50);
+ private Random rndCustAddressField = new Random(50);
+
+ private Random[] rndUndeclaredOrderFields;
+
+ private class Child {
+ public String name;
+ public int age;
+
+ public void generateFieldValues(String lastName, int maxChildAge) {
+ // name
+ int firstNameIx = Math.abs(rndValue.nextInt()) % firstNames.length;
+ name = firstNames[firstNameIx] + " " + lastName;
+
+ // age
+ age = -1;
+ if (rndChildAgeField.nextBoolean()) {
+ if (maxChildAge >= 0) {
+ if (maxChildAge == MIN_CHILD_AGE) {
+ age = maxChildAge;
+ } else {
+ age = Math.abs((rndValue.nextInt()) % (maxChildAge - MIN_CHILD_AGE)) + MIN_AGE;
+ }
+ }
+ }
+ }
+
+ public String getJSON() {
+ StringBuilder jsonString = new StringBuilder();
+
+ jsonString.append("{ "); // start child
+
+ // name
+ jsonString.append(" \"name\": ");
+ jsonString.append("\"" + name + "\"");
+
+ // age
+ if (age >= 0) {
+ jsonString.append(", ");
+ jsonString.append(" \"age\": ");
+ jsonString.append(age);
+ }
+
+ jsonString.append(" }"); // end child
+
+ return jsonString.toString();
+ }
+
+ }
+
+ private class Customer {
+
+ private int cid;
+ private String name;
+ private int age;
+
+ private String streetName;
+ private int streetNumber;
+ private String city;
+
+ private int[] custInterests;
+ private Child[] custChildren;
+
+ public void generateFieldValues() {
+ cid = currentCID++;
+
+ int firstNameIx = Math.abs(rndValue.nextInt()) % firstNames.length;
+ int lastNameIx = Math.abs(rndValue.nextInt()) % lastNames.length;
+ name = firstNames[firstNameIx] + " " + lastNames[lastNameIx];
+
+ if (rndCustAgeField.nextBoolean()) {
+ age = Math.abs((rndValue.nextInt()) % (MAX_AGE - MIN_AGE)) + MIN_AGE;
+ } else {
+ age = -1;
+ }
+
+ if (rndCustAddressField.nextBoolean()) {
+ streetNumber = Math.abs(rndValue.nextInt()) % (MAX_STREET_NUM - MIN_STREET_NUM) + MIN_STREET_NUM;
+
+ int streetIx = Math.abs(rndValue.nextInt()) % STREETS.length;
+ streetName = STREETS[streetIx];
+
+ int cityIx = Math.abs(rndValue.nextInt()) % CITIES.length;
+ city = CITIES[cityIx];
+ } else {
+ streetNumber = -1;
+ streetName = null;
+ city = null;
+ }
+
+ int numInterests = Math.abs((rndValue.nextInt()) % (MAX_INTERESTS - MIN_INTERESTS)) + MIN_INTERESTS;
+ custInterests = new int[numInterests];
+ for (int i = 0; i < numInterests; i++) {
+ custInterests[i] = Math.abs(rndValue.nextInt()) % INTERESTS.length;
+ }
+
+ int numChildren = Math.abs((rndValue.nextInt()) % (MAX_CHILDREN - MIN_CHILDREN)) + MIN_CHILDREN;
+ custChildren = new Child[numChildren];
+ for (int i = 0; i < numChildren; i++) {
+ Child c = new Child();
+ int maxChildAge = age <= 0 ? 50 : (age - 20);
+ c.generateFieldValues(lastNames[lastNameIx], maxChildAge);
+ custChildren[i] = c;
+ }
+ }
+
+ public String getJSON() {
+ StringBuilder jsonString = new StringBuilder();
+
+ jsonString.append("{ "); // start customer
+
+ // customer id
+ jsonString.append(" \"cid\": ");
+ jsonString.append(cid);
+ jsonString.append(", ");
+
+ // name
+ jsonString.append(" \"name\": ");
+ jsonString.append("\"" + name + "\"");
+
+ // age
+ if (age >= 0) {
+ jsonString.append(", ");
+ jsonString.append(" \"age\": ");
+ jsonString.append(age);
+ }
+
+ // nested address
+ if (streetNumber >= 0) {
+ jsonString.append(", ");
+ jsonString.append(" \"address\": ");
+ jsonString.append("{ "); // start address
+
+ // number
+ jsonString.append(" \"number\": ");
+ jsonString.append(streetNumber);
+ jsonString.append(", ");
+
+ // street
+ jsonString.append(" \"street\": ");
+ jsonString.append("\"" + streetName + "\"");
+ jsonString.append(", ");
+
+ // city
+ jsonString.append(" \"city\": ");
+ jsonString.append("\"" + city + "\"");
+
+ jsonString.append(" }"); // end address
+ }
+
+ jsonString.append(", ");
+
+ // interests
+ jsonString.append(" \"interests\": ");
+ jsonString.append("{{ "); // start interests
+ for (int i = 0; i < custInterests.length; i++) {
+ jsonString.append("\"" + INTERESTS[custInterests[i]] + "\"");
+ if (i != custInterests.length - 1) {
+ jsonString.append(", ");
+ }
+ }
+ jsonString.append(" }}"); // end interests
+ jsonString.append(", ");
+
+ // children
+ jsonString.append(" \"children\": ");
+ jsonString.append("[ "); // start children
+ for (int i = 0; i < custChildren.length; i++) {
+ String jsonChild = custChildren[i].getJSON();
+ jsonString.append(jsonChild);
+ if (i != custChildren.length - 1) {
+ jsonString.append(", ");
+ }
+ }
+ jsonString.append(" ]"); // end children
+
+ jsonString.append(" }"); // end customer
+
+ return jsonString.toString();
+ }
+ }
+
+ private class Order {
+ public int oid;
+ public int cid;
+ public String orderStatus;
+ public String orderPriority;
+ public String clerk;
+ public String total;
+
+ private int[] undeclaredFields;
+ private BitSet nullMap;
+
+ public void generateFieldValues(Customer cust) {
+ cid = cust.cid;
+ oid = currentOID++;
+ float t = Math.abs(rndValue.nextFloat()) * 100;
+ total = t + "f";
+
+ int orderStatusIx = Math.abs(rndValue.nextInt()) % ORDER_STATUSES.length;
+ orderStatus = ORDER_STATUSES[orderStatusIx];
+
+ int orderPriorityIx = Math.abs(rndValue.nextInt()) % ORDER_PRIORITIES.length;
+ orderPriority = ORDER_PRIORITIES[orderPriorityIx];
+
+ int clerkIx = Math.abs(rndValue.nextInt()) % CLERKS.length;
+ clerk = CLERKS[clerkIx];
+
+ int m = rndUndeclaredOrderFields.length;
+ undeclaredFields = new int[m];
+ nullMap = new BitSet(m);
+ for (int i = 0; i < m; i++) {
+ if (rndUndeclaredOrderFields[i].nextBoolean()) {
+ undeclaredFields[i] = rndValue.nextInt();
+ } else {
+ nullMap.set(i);
+ }
+ }
+ }
+
+ public String getJSON() {
+ StringBuilder jsonString = new StringBuilder();
+
+ jsonString.append("{ "); // start order
+
+ // oid
+ jsonString.append(" \"oid\": ");
+ jsonString.append(oid);
+ jsonString.append(", ");
+
+ // cid
+ jsonString.append(" \"cid\": ");
+ jsonString.append(cid);
+ jsonString.append(", ");
+
+ // orderStatus
+ jsonString.append(" \"orderstatus\": ");
+ jsonString.append("\"" + orderStatus + "\"");
+ jsonString.append(", ");
+
+ // orderPriority
+ jsonString.append(" \"orderpriority\": ");
+ jsonString.append("\"" + orderPriority + "\"");
+ jsonString.append(", ");
+
+ // clerk
+ jsonString.append(" \"clerk\": ");
+ jsonString.append("\"" + clerk + "\"");
+ jsonString.append(", ");
+
+ // / cid
+ jsonString.append(" \"total\": ");
+ jsonString.append(total);
+
+ for (int i = 0; i < undeclaredFields.length; i++) {
+ if (!nullMap.get(i)) {
+ jsonString.append(", ");
+ jsonString.append(" \"" + UNDECLARED_FIELD_NAMES[i] + "\": ");
+ jsonString.append(undeclaredFields[i]);
+ }
+ }
+
+ jsonString.append(" }"); // end order
+ return jsonString.toString();
+ }
+ }
+
+ public void init() {
+ try {
+ List<String> tmpFirstNames = new ArrayList<String>();
+
+ FileInputStream fstream = new FileInputStream(FIRST_NAMES_FILE_NAME);
+ DataInputStream in = new DataInputStream(fstream);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String strLine;
+ while ((strLine = br.readLine()) != null) {
+ String firstLetter = strLine.substring(0, 1);
+ String remainder = strLine.substring(1);
+ String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
+ tmpFirstNames.add(capitalized);
+ }
+ in.close();
+ firstNames = tmpFirstNames.toArray(firstNames);
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ List<String> tmpLastNames = new ArrayList<String>();
+
+ FileInputStream fstream = new FileInputStream(LAST_NAMES_FILE_NAME);
+ DataInputStream in = new DataInputStream(fstream);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String strLine;
+ while ((strLine = br.readLine()) != null) {
+ String firstLetter = strLine.substring(0, 1);
+ String remainder = strLine.substring(1);
+ String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
+ tmpLastNames.add(capitalized);
+ }
+ in.close();
+ lastNames = tmpLastNames.toArray(firstNames);
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ rndUndeclaredOrderFields = new Random[UNDECLARED_FIELD_NAMES.length];
+ for (int i = 0; i < rndUndeclaredOrderFields.length; i++) {
+ rndUndeclaredOrderFields[i] = new Random(50);
+ }
+ }
+
+ public void writeOrdersList(List<Order> ordersList, FileWriter ordersFile) throws IOException {
+ while (!ordersList.isEmpty()) {
+ int ix = Math.abs(rndValue.nextInt()) % ordersList.size();
+ ordersFile.write(ordersList.get(ix).getJSON() + "\n");
+ ordersList.remove(ix);
+ }
+ }
+
+ public void writeCustomerList(List<Customer> customerList, Order[] ordersBatch, List<Order> ordersList,
+ FileWriter customersFile, FileWriter ordersFile) throws IOException {
+ while (!customerList.isEmpty()) {
+ int ix = Math.abs(rndValue.nextInt()) % customerList.size();
+ customersFile.write(customerList.get(ix).getJSON() + "\n");
+
+ // generate orders
+ int numOrders = Math.abs(rndValue.nextInt()) % (MAX_ORDERS_PER_CUST - MIN_ORDERS_PER_CUST)
+ + MIN_ORDERS_PER_CUST;
+ for (int i = 0; i < numOrders; i++) {
+ ordersBatch[i].generateFieldValues(customerList.get(ix));
+ ordersList.add(ordersBatch[i]);
+ }
+ writeOrdersList(ordersList, ordersFile);
+
+ customerList.remove(ix);
+ }
+ }
+
+ public static void main(String[] args) throws IOException {
+ if (args.length != 2) {
+ System.err.println("MUST PROVIDE 2 PARAMS, 1. output dir name and 2. number of records to generate.");
+ System.exit(1);
+ }
+
+ String outputFile = args[0];
+ int numRecords = Integer.parseInt(args[1]);
+
+ FileWriter customersFile = new FileWriter(outputFile + File.separator + "customer.adm");
+ FileWriter ordersFile = new FileWriter(outputFile + File.separator + "orders.adm");
+
+ CustOrdDataGen dataGen = new CustOrdDataGen();
+ dataGen.init();
+
+ int batchSize = 1000;
+ Customer[] customerBatch = new Customer[batchSize];
+ for (int i = 0; i < batchSize; i++) {
+ customerBatch[i] = dataGen.new Customer();
+ }
+
+ Order[] ordersBatch = new Order[MAX_ORDERS_PER_CUST];
+ for (int i = 0; i < MAX_ORDERS_PER_CUST; i++) {
+ ordersBatch[i] = dataGen.new Order();
+ }
+
+ List<Customer> customerList = new LinkedList<Customer>();
+ List<Order> ordersList = new LinkedList<Order>();
+ int custIx = 0;
+ for (int i = 0; i < numRecords; i++) {
+
+ customerBatch[custIx].generateFieldValues();
+ customerList.add(customerBatch[custIx]);
+ custIx++;
+
+ if (customerList.size() >= batchSize) {
+ dataGen.writeCustomerList(customerList, ordersBatch, ordersList, customersFile, ordersFile);
+ custIx = 0;
+ }
+ }
+ dataGen.writeCustomerList(customerList, ordersBatch, ordersList, customersFile, ordersFile);
+ customersFile.flush();
+ customersFile.close();
+
+ ordersFile.flush();
+ ordersFile.close();
+ }
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/EventDataGen.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/EventDataGen.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/EventDataGen.java
new file mode 100644
index 0000000..b175b42
--- /dev/null
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/EventDataGen.java
@@ -0,0 +1,237 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.tools.datagen;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+public class EventDataGen {
+ private static final String FIRST_NAMES_FILE_NAME = "/opt/us_census_names/dist.all.first.cleaned";
+ private static final String LAST_NAMES_FILE_NAME = "/opt/us_census_names/dist.all.last.cleaned";
+
+ private String[] firstNames = new String[10];
+ private String[] lastNames = new String[10];
+
+ private static final int MIN_USER_INTERESTS = 0;
+ private static final int MAX_USER_INTERESTS = 7;
+ private String[] INTERESTS = { "bass", "music", "databases", "fishing", "tennis", "squash", "computers", "books",
+ "movies", "cigars", "wine", "running", "walking", "skiing", "basketball", "video games", "cooking",
+ "coffee", "base jumping", "puzzles" };
+
+ private static final String[] STREETS = { "Main St.", "Oak St.", "7th St.", "Washington St.", "Cedar St.",
+ "Lake St.", "Hill St.", "Park St.", "View St." };
+ private static final int MIN_STREET_NUM = 1;
+ private static final int MAX_STREET_NUM = 10000;
+ private static final String[] CITIES = { "Seattle", "Irvine", "Laguna Beach", "Los Angeles", "San Clemente",
+ "Huntington Beach", "Portland" };
+ private static final int MIN_ZIP = 100000;
+ private static final int MAX_ZIP = 999999;
+ private static final String[] LAT_LONGS = { "47,-122", "33,-117", "33,-117", "34,-118", "33,-117", "33,-117",
+ "45,-122" };
+
+ private static final int MIN_MEMBERSHIPS = 1;
+ private static final int MAX_MEMBERSHIPS = 10;
+ private static final int MIN_SIG_ID = 1;
+ private static final int MAX_SIG_ID = 100;
+ private static final String[] CHAPTER_NAMES = { "Seattle", "Irvine", "Laguna Beach", "Los Angeles", "San Clemente",
+ "Huntington Beach", "Portland", "Newport Beach", "Kirkland" };
+ private static final int MEMBER_SINCE_MIN_YEAR = 1970;
+ private static final int MEMBER_SINCE_MAX_YEAR = 1998;
+
+ private Random rndValue = new Random(50);
+ private User user;
+
+ private final class User {
+ private int firstNameIdx;
+ private int lastNameIdx;
+ private int[] interests = new int[MAX_USER_INTERESTS - MIN_USER_INTERESTS];
+ int numInterests;
+ private int streetNumber;
+ private String street;
+ private String city;
+ private int zip;
+ private String latlong;
+ int numMemberships;
+ private int[] member_sigid = new int[MAX_MEMBERSHIPS];
+ private String[] member_chap_name = new String[MAX_MEMBERSHIPS];
+ private String[] member_since_date = new String[MAX_MEMBERSHIPS];
+
+ public void generateFieldValues() {
+ firstNameIdx = Math.abs(rndValue.nextInt()) % firstNames.length;
+ lastNameIdx = Math.abs(rndValue.nextInt()) % lastNames.length;
+ // name = firstNames[firstNameIx] + " " + lastNames[lastNameIx];
+ numInterests = Math.abs((rndValue.nextInt()) % (MAX_USER_INTERESTS - MIN_USER_INTERESTS))
+ + MIN_USER_INTERESTS;
+ for (int i = 0; i < numInterests; i++) {
+ interests[i] = Math.abs(rndValue.nextInt()) % INTERESTS.length;
+ }
+ streetNumber = Math.abs(rndValue.nextInt()) % (MAX_STREET_NUM - MIN_STREET_NUM) + MIN_STREET_NUM;
+ street = STREETS[Math.abs(rndValue.nextInt()) % STREETS.length];
+ int cityIdx = Math.abs(rndValue.nextInt()) % CITIES.length;
+ city = CITIES[cityIdx];
+ zip = Math.abs(rndValue.nextInt() % (MAX_ZIP - MIN_ZIP)) + MIN_ZIP;
+ latlong = LAT_LONGS[cityIdx];
+ numMemberships = Math.abs(rndValue.nextInt()) % (MAX_MEMBERSHIPS - MIN_MEMBERSHIPS) + MIN_MEMBERSHIPS;
+ for (int i = 0; i < numMemberships; i++) {
+ member_sigid[i] = Math.abs(rndValue.nextInt()) % (MAX_SIG_ID - MIN_SIG_ID) + MIN_SIG_ID;
+ int cnIdx = Math.abs(rndValue.nextInt()) % CHAPTER_NAMES.length;
+ member_chap_name[i] = CHAPTER_NAMES[cnIdx];
+ int msYear = Math.abs(rndValue.nextInt()) % (MEMBER_SINCE_MAX_YEAR - MEMBER_SINCE_MIN_YEAR)
+ + MEMBER_SINCE_MIN_YEAR;
+ int msMo = Math.abs(rndValue.nextInt()) % 12 + 1;
+ int msDay = Math.abs(rndValue.nextInt()) % 28 + 1;
+ member_since_date[i] = msYear + "-" + (msMo < 10 ? "0" : "") + msMo + "-" + (msDay < 10 ? "0" : "")
+ + msDay;
+ }
+ }
+
+ public void write(Writer writer) throws IOException {
+ writer.append("{");
+ writer.append(" \"name\": \"");
+ writer.append(firstNames[firstNameIdx]);
+ writer.append(" ");
+ writer.append(lastNames[lastNameIdx]);
+ writer.append("\", ");
+
+ writer.append(" \"email\": \"");
+ writer.append(firstNames[firstNameIdx]);
+ writer.append(".");
+ writer.append(lastNames[lastNameIdx]);
+ writer.append("@example.com\", ");
+
+ writer.append(" \"interests\": <");
+ for (int i = 0; i < numInterests; i++) {
+ if (i > 0) {
+ writer.append(", ");
+ }
+ writer.append("\"");
+ writer.append(INTERESTS[interests[i]]);
+ writer.append("\"");
+ }
+ writer.append(">, ");
+
+ writer.append(" \"address\": {");
+ writer.append(" \"street\": \"");
+ writer.append(streetNumber + " " + street);
+ writer.append("\",");
+ writer.append(" \"city\": \"");
+ writer.append(city);
+ writer.append("\",");
+ writer.append(" \"zip\": \"");
+ writer.append(zip + "\",");
+ writer.append(" \"latlong\": point(\"");
+ writer.append(latlong);
+ writer.append("\")");
+ writer.append("}, ");
+
+ writer.append(" \"member_of\": <");
+ for (int i = 0; i < numMemberships; i++) {
+ if (i > 0) {
+ writer.append(", ");
+ }
+ writer.append("{");
+ writer.append(" \"sig_id\": ");
+ writer.append(member_sigid[i] + ",");
+ writer.append(" \"chapter_name\": \"");
+ writer.append(member_chap_name[i]);
+ writer.append("\",");
+ writer.append(" \"member_since\": date(\"");
+ writer.append(member_since_date[i]);
+ writer.append("\") }");
+ }
+ writer.append(">");
+
+ writer.append(" }\n");
+ }
+ }
+
+ public void init() throws IOException {
+ {
+ List<String> tmpFirstNames = new ArrayList<String>();
+
+ FileInputStream fstream = new FileInputStream(FIRST_NAMES_FILE_NAME);
+ DataInputStream in = new DataInputStream(fstream);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String strLine;
+ while ((strLine = br.readLine()) != null) {
+ String firstLetter = strLine.substring(0, 1);
+ String remainder = strLine.substring(1);
+ String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
+ tmpFirstNames.add(capitalized);
+ }
+ in.close();
+ firstNames = tmpFirstNames.toArray(firstNames);
+ }
+ {
+ List<String> tmpLastNames = new ArrayList<String>();
+
+ FileInputStream fstream = new FileInputStream(LAST_NAMES_FILE_NAME);
+ DataInputStream in = new DataInputStream(fstream);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String strLine;
+ while ((strLine = br.readLine()) != null) {
+ String firstLetter = strLine.substring(0, 1);
+ String remainder = strLine.substring(1);
+ String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
+ tmpLastNames.add(capitalized);
+ }
+ in.close();
+ lastNames = tmpLastNames.toArray(firstNames);
+ }
+ user = new User();
+ }
+
+ public void generate() {
+ user.generateFieldValues();
+ }
+
+ public void write(Writer w) throws IOException {
+ user.write(w);
+ }
+
+ public static void main(String[] args) throws IOException {
+ if (args.length != 2) {
+ System.err
+ .println("MUST PROVIDE 2 PARAMETERS, 1. output directory path and 2. number of records to generate.");
+ System.exit(1);
+ }
+ String outputFile = args[0];
+ int numRecords = Integer.parseInt(args[1]);
+ Writer userFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile + File.separator
+ + "user.adm")));
+ EventDataGen dgen = new EventDataGen();
+ dgen.init();
+ for (int i = 0; i < numRecords; i++) {
+ dgen.generate();
+ dgen.write(userFile);
+ }
+ userFile.close();
+ }
+}
[6/8] asterixdb git commit: Move Twitter Firehose Datasource to Test
Source Folder
Posted by mb...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/generator/DataGenerator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/generator/DataGenerator.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/generator/DataGenerator.java
new file mode 100644
index 0000000..f61c7d0
--- /dev/null
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/generator/DataGenerator.java
@@ -0,0 +1,1192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.generator;
+
+import java.nio.CharBuffer;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+
+import org.apache.asterix.external.util.Datatypes;
+import org.apache.asterix.external.util.Datatypes.Tweet;
+
+public class DataGenerator {
+
+ private RandomDateGenerator randDateGen;
+ private RandomNameGenerator randNameGen;
+ private RandomMessageGenerator randMessageGen;
+ private RandomLocationGenerator randLocationGen;
+ private Random random = new Random();
+ private TwitterUser twUser = new TwitterUser();
+ private TweetMessage twMessage = new TweetMessage();
+ private static final String DEFAULT_COUNTRY = "US";
+
+ public DataGenerator(InitializationInfo info) {
+ initialize(info);
+ }
+
+ public class TweetMessageIterator implements Iterator<TweetMessage> {
+
+ private final int duration;
+ private long startTime = 0;
+ private int tweetId;
+
+ public TweetMessageIterator(int duration) {
+ this.duration = duration;
+ this.startTime = System.currentTimeMillis();
+ }
+
+ @Override
+ public boolean hasNext() {
+ if (duration == TweetGenerator.INFINITY) {
+ return true;
+ }
+ return System.currentTimeMillis() - startTime <= duration * 1000;
+ }
+
+ @Override
+ public TweetMessage next() {
+ tweetId++;
+ TweetMessage msg = null;
+ getTwitterUser(null);
+ Message message = randMessageGen.getNextRandomMessage();
+ Point location = randLocationGen.getRandomPoint();
+ DateTime sendTime = randDateGen.getNextRandomDatetime();
+ twMessage.reset(tweetId, twUser, location.getLatitude(), location.getLongitude(), sendTime.toString(),
+ message, DEFAULT_COUNTRY);
+ msg = twMessage;
+ return msg;
+ }
+
+ @Override
+ public void remove() {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+
+ public static class InitializationInfo {
+ public Date startDate = new Date(1, 1, 2005);
+ public Date endDate = new Date(8, 20, 2012);
+ public String[] lastNames = DataGenerator.lastNames;
+ public String[] firstNames = DataGenerator.firstNames;
+ public String[] vendors = DataGenerator.vendors;
+ public String[] jargon = DataGenerator.jargon;
+ public String[] org_list = DataGenerator.org_list;
+ }
+
+ public void initialize(InitializationInfo info) {
+ randDateGen = new RandomDateGenerator(info.startDate, info.endDate);
+ randNameGen = new RandomNameGenerator(info.firstNames, info.lastNames);
+ randLocationGen = new RandomLocationGenerator(24, 49, 66, 98);
+ randMessageGen = new RandomMessageGenerator(info.vendors, info.jargon);
+ }
+
+ public void getTwitterUser(String usernameSuffix) {
+ String suggestedName = randNameGen.getRandomName();
+ String[] nameComponents = suggestedName.split(" ");
+ String screenName = nameComponents[0] + nameComponents[1] + randNameGen.getRandomNameSuffix();
+ String name = suggestedName;
+ if (usernameSuffix != null) {
+ name = name + usernameSuffix;
+ }
+ int numFriends = random.nextInt((100)); // draw from Zipfian
+ int statusesCount = random.nextInt(500); // draw from Zipfian
+ int followersCount = random.nextInt((200));
+ twUser.reset(screenName, numFriends, statusesCount, name, followersCount);
+ }
+
+ public static class RandomDateGenerator {
+
+ private final Date startDate;
+ private final Date endDate;
+ private final Random random = new Random();
+ private final int yearDifference;
+ private Date workingDate;
+ private Date recentDate;
+ private DateTime dateTime;
+
+ public RandomDateGenerator(Date startDate, Date endDate) {
+ this.startDate = startDate;
+ this.endDate = endDate;
+ this.yearDifference = endDate.getYear() - startDate.getYear() + 1;
+ this.workingDate = new Date();
+ this.recentDate = new Date();
+ this.dateTime = new DateTime();
+ }
+
+ public Date getStartDate() {
+ return startDate;
+ }
+
+ public Date getEndDate() {
+ return endDate;
+ }
+
+ public Date getNextRandomDate() {
+ int year = random.nextInt(yearDifference) + startDate.getYear();
+ int month;
+ int day;
+ if (year == endDate.getYear()) {
+ month = random.nextInt(endDate.getMonth()) + 1;
+ if (month == endDate.getMonth()) {
+ day = random.nextInt(endDate.getDay()) + 1;
+ } else {
+ day = random.nextInt(28) + 1;
+ }
+ } else {
+ month = random.nextInt(12) + 1;
+ day = random.nextInt(28) + 1;
+ }
+ workingDate.reset(month, day, year);
+ return workingDate;
+ }
+
+ public DateTime getNextRandomDatetime() {
+ Date randomDate = getNextRandomDate();
+ dateTime.reset(randomDate);
+ return dateTime;
+ }
+
+ public Date getNextRecentDate(Date date) {
+ int year = date.getYear()
+ + (date.getYear() == endDate.getYear() ? 0 : random.nextInt(endDate.getYear() - date.getYear()));
+ int month = (year == endDate.getYear())
+ ? date.getMonth() == endDate.getMonth() ? (endDate.getMonth())
+ : (date.getMonth() + random.nextInt(endDate.getMonth() - date.getMonth()))
+ : random.nextInt(12) + 1;
+
+ int day = (year == endDate.getYear())
+ ? month == endDate.getMonth()
+ ? date.getDay() == endDate.getDay() ? endDate.getDay()
+ : date.getDay() + random.nextInt(endDate.getDay() - date.getDay())
+ : random.nextInt(28) + 1
+ : random.nextInt(28) + 1;
+ recentDate.reset(month, day, year);
+ return recentDate;
+ }
+
+ }
+
+ public static class DateTime extends Date {
+
+ private String hour = "10";
+ private String min = "10";
+ private String sec = "00";
+
+ public DateTime(int month, int day, int year, String hour, String min, String sec) {
+ super(month, day, year);
+ this.hour = hour;
+ this.min = min;
+ this.sec = sec;
+ }
+
+ public DateTime() {
+ }
+
+ public void reset(int month, int day, int year, String hour, String min, String sec) {
+ super.setDay(month);
+ super.setDay(day);
+ super.setYear(year);
+ this.hour = hour;
+ this.min = min;
+ this.sec = sec;
+ }
+
+ public DateTime(Date date) {
+ super(date.getMonth(), date.getDay(), date.getYear());
+ }
+
+ public void reset(Date date) {
+ reset(date.getMonth(), date.getDay(), date.getYear());
+ }
+
+ public DateTime(Date date, int hour, int min, int sec) {
+ super(date.getMonth(), date.getDay(), date.getYear());
+ this.hour = (hour < 10) ? "0" : "" + hour;
+ this.min = (min < 10) ? "0" : "" + min;
+ this.sec = (sec < 10) ? "0" : "" + sec;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("\"");
+ builder.append(super.getYear());
+ builder.append("-");
+ builder.append(super.getMonth() < 10 ? "0" + super.getMonth() : super.getMonth());
+ builder.append("-");
+ builder.append(super.getDay() < 10 ? "0" + super.getDay() : super.getDay());
+ builder.append("T");
+ builder.append(hour + ":" + min + ":" + sec);
+ builder.append("\"");
+ return builder.toString();
+ }
+ }
+
+ public static class Message {
+
+ private char[] message = new char[500];
+ private List<String> referredTopics;
+ private int length;
+
+ public Message(char[] m, List<String> referredTopics) {
+ System.arraycopy(m, 0, message, 0, m.length);
+ length = m.length;
+ this.referredTopics = referredTopics;
+ }
+
+ public Message() {
+ referredTopics = new ArrayList<String>();
+ length = 0;
+ }
+
+ public List<String> getReferredTopics() {
+ return referredTopics;
+ }
+
+ public void reset(char[] m, int offset, int length, List<String> referredTopics) {
+ System.arraycopy(m, offset, message, 0, length);
+ this.length = length;
+ this.referredTopics = referredTopics;
+ }
+
+ public int getLength() {
+ return length;
+ }
+
+ public char charAt(int index) {
+ return message[index];
+ }
+
+ }
+
+ public static class Point {
+
+ private float latitude;
+ private float longitude;
+
+ public float getLatitude() {
+ return latitude;
+ }
+
+ public float getLongitude() {
+ return longitude;
+ }
+
+ public Point(float latitude, float longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ public void reset(float latitude, float longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ public Point() {
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("point(\"" + latitude + "," + longitude + "\")");
+ return builder.toString();
+ }
+ }
+
+ public static class RandomNameGenerator {
+
+ private String[] firstNames;
+ private String[] lastNames;
+
+ private final Random random = new Random();
+
+ private final String[] connectors = new String[] { "_", "#", "$", "@" };
+
+ public RandomNameGenerator(String[] firstNames, String[] lastNames) {
+ this.firstNames = firstNames;
+ this.lastNames = lastNames;
+ }
+
+ public String getRandomName() {
+ String name;
+ name = getSuggestedName();
+ return name;
+
+ }
+
+ private String getSuggestedName() {
+ int firstNameIndex = random.nextInt(firstNames.length);
+ int lastNameIndex = random.nextInt(lastNames.length);
+ String suggestedName = firstNames[firstNameIndex] + " " + lastNames[lastNameIndex];
+ return suggestedName;
+ }
+
+ public String getRandomNameSuffix() {
+ return connectors[random.nextInt(connectors.length)] + random.nextInt(1000);
+ }
+ }
+
+ public static class RandomMessageGenerator {
+
+ private final MessageTemplate messageTemplate;
+
+ public RandomMessageGenerator(String[] vendors, String[] jargon) {
+ List<String> vendorList = new ArrayList<String>();
+ for (String v : vendors) {
+ vendorList.add(v);
+ }
+ List<String> jargonList = new ArrayList<String>();
+ for (String j : jargon) {
+ jargonList.add(j);
+ }
+ this.messageTemplate = new MessageTemplate(vendorList, jargonList);
+ }
+
+ public Message getNextRandomMessage() {
+ return messageTemplate.getNextMessage();
+ }
+ }
+
+ public static class AbstractMessageTemplate {
+
+ protected final Random random = new Random();
+
+ protected String[] positiveVerbs = new String[] { "like", "love" };
+ protected String[] negativeVerbs = new String[] { "dislike", "hate", "can't stand" };
+
+ protected String[] negativeAdjectives = new String[] { "horrible", "bad", "terrible", "OMG" };
+ protected String[] postiveAdjectives = new String[] { "good", "awesome", "amazing", "mind-blowing" };
+
+ protected String[] otherWords = new String[] { "the", "its" };
+ }
+
+ public static class MessageTemplate extends AbstractMessageTemplate {
+
+ private List<String> vendors;
+ private List<String> jargon;
+ private CharBuffer buffer;
+ private List<String> referredTopics;
+ private Message message = new Message();
+
+ public MessageTemplate(List<String> vendors, List<String> jargon) {
+ this.vendors = vendors;
+ this.jargon = jargon;
+ buffer = CharBuffer.allocate(2500);
+ referredTopics = new ArrayList<String>();
+ }
+
+ public Message getNextMessage() {
+ buffer.position(0);
+ buffer.limit(2500);
+ referredTopics.clear();
+ boolean isPositive = random.nextBoolean();
+ String[] verbArray = isPositive ? positiveVerbs : negativeVerbs;
+ String[] adjectiveArray = isPositive ? postiveAdjectives : negativeAdjectives;
+ String verb = verbArray[random.nextInt(verbArray.length)];
+ String adjective = adjectiveArray[random.nextInt(adjectiveArray.length)];
+
+ buffer.put(" ");
+ buffer.put(verb);
+ buffer.put(" ");
+ String vendor = vendors.get(random.nextInt(vendors.size()));
+ referredTopics.add(vendor);
+ buffer.append(vendor);
+ buffer.append(" ");
+ buffer.append(otherWords[random.nextInt(otherWords.length)]);
+ buffer.append(" ");
+ String jargonTerm = jargon.get(random.nextInt(jargon.size()));
+ referredTopics.add(jargonTerm);
+ buffer.append(jargonTerm);
+ buffer.append(" is ");
+ buffer.append(adjective);
+ if (random.nextBoolean()) {
+ buffer.append(isPositive ? ":)" : ":(");
+ }
+
+ buffer.flip();
+ message.reset(buffer.array(), 0, buffer.limit(), referredTopics);
+ return message;
+ }
+ }
+
+ public static class RandomUtil {
+
+ public static Random random = new Random();
+
+ public static int[] getKFromN(int k, int n) {
+ int[] result = new int[k];
+ int cnt = 0;
+ HashSet<Integer> values = new HashSet<Integer>();
+ while (cnt < k) {
+ int val = random.nextInt(n + 1);
+ if (values.contains(val)) {
+ continue;
+ }
+
+ result[cnt++] = val;
+ values.add(val);
+ }
+ return result;
+ }
+ }
+
+ public static class RandomLocationGenerator {
+
+ private Random random = new Random();
+
+ private final int beginLat;
+ private final int endLat;
+ private final int beginLong;
+ private final int endLong;
+
+ private Point point;
+
+ public RandomLocationGenerator(int beginLat, int endLat, int beginLong, int endLong) {
+ this.beginLat = beginLat;
+ this.endLat = endLat;
+ this.beginLong = beginLong;
+ this.endLong = endLong;
+ this.point = new Point();
+ }
+
+ public Point getRandomPoint() {
+ int latMajor = beginLat + random.nextInt(endLat - beginLat);
+ int latMinor = random.nextInt(100);
+ float latitude = latMajor + ((float) latMinor) / 100;
+
+ int longMajor = beginLong + random.nextInt(endLong - beginLong);
+ int longMinor = random.nextInt(100);
+ float longitude = longMajor + ((float) longMinor) / 100;
+
+ point.reset(latitude, longitude);
+ return point;
+ }
+
+ }
+
+ public static class TweetMessage {
+
+ private static final String[] DEFAULT_FIELDS = new String[] { TweetFields.TWEETID, TweetFields.USER,
+ TweetFields.LATITUDE, TweetFields.LONGITUDE, TweetFields.MESSAGE_TEXT, TweetFields.CREATED_AT,
+ TweetFields.COUNTRY };
+
+ private int id;
+ private TwitterUser user;
+ private double latitude;
+ private double longitude;
+ private String created_at;
+ private Message messageText;
+ private String country;
+
+ public static final class TweetFields {
+ public static final String TWEETID = "id";
+ public static final String USER = "user";
+ public static final String LATITUDE = "latitude";
+ public static final String LONGITUDE = "longitude";
+ public static final String MESSAGE_TEXT = "message_text";
+ public static final String CREATED_AT = "created_at";
+ public static final String COUNTRY = "country";
+
+ }
+
+ public TweetMessage() {
+ }
+
+ public TweetMessage(int tweetid, TwitterUser user, double latitude, double longitude, String created_at,
+ Message messageText, String country) {
+ this.id = tweetid;
+ this.user = user;
+ this.latitude = latitude;
+ this.longitude = longitude;
+ this.created_at = created_at;
+ this.messageText = messageText;
+ this.country = country;
+ }
+
+ public void reset(int tweetid, TwitterUser user, double latitude, double longitude, String created_at,
+ Message messageText, String country) {
+ this.id = tweetid;
+ this.user = user;
+ this.latitude = latitude;
+ this.longitude = longitude;
+ this.created_at = created_at;
+ this.messageText = messageText;
+ this.country = country;
+ }
+
+ public String getAdmEquivalent(String[] fields) {
+ if (fields == null) {
+ fields = DEFAULT_FIELDS;
+ }
+ StringBuilder builder = new StringBuilder();
+ builder.append("{");
+ for (String field : fields) {
+ switch (field) {
+ case Datatypes.Tweet.ID:
+ appendFieldName(builder, Datatypes.Tweet.ID);
+ builder.append("int64(\"" + id + "\")");
+ break;
+ case Datatypes.Tweet.USER:
+ appendFieldName(builder, Datatypes.Tweet.USER);
+ builder.append(user);
+ break;
+ case Datatypes.Tweet.LATITUDE:
+ appendFieldName(builder, Datatypes.Tweet.LATITUDE);
+ builder.append(latitude);
+ break;
+ case Datatypes.Tweet.LONGITUDE:
+ appendFieldName(builder, Datatypes.Tweet.LONGITUDE);
+ builder.append(longitude);
+ break;
+ case Datatypes.Tweet.MESSAGE:
+ appendFieldName(builder, Datatypes.Tweet.MESSAGE);
+ builder.append("\"");
+ for (int i = 0; i < messageText.getLength(); i++) {
+ builder.append(messageText.charAt(i));
+ }
+ builder.append("\"");
+ break;
+ case Datatypes.Tweet.CREATED_AT:
+ appendFieldName(builder, Datatypes.Tweet.CREATED_AT);
+ builder.append(created_at);
+ break;
+ case Datatypes.Tweet.COUNTRY:
+ appendFieldName(builder, Datatypes.Tweet.COUNTRY);
+ builder.append("\"" + country + "\"");
+ break;
+ }
+ builder.append(",");
+ }
+ builder.deleteCharAt(builder.length() - 1);
+ builder.append("}");
+ return builder.toString();
+ }
+
+ private void appendFieldName(StringBuilder builder, String fieldName) {
+ builder.append("\"" + fieldName + "\":");
+ }
+
+ public int getTweetid() {
+ return id;
+ }
+
+ public void setTweetid(int tweetid) {
+ this.id = tweetid;
+ }
+
+ public TwitterUser getUser() {
+ return user;
+ }
+
+ public void setUser(TwitterUser user) {
+ this.user = user;
+ }
+
+ public double getLatitude() {
+ return latitude;
+ }
+
+ public String getSendTime() {
+ return created_at;
+ }
+
+ public Message getMessageText() {
+ return messageText;
+ }
+
+ public void setMessageText(Message messageText) {
+ this.messageText = messageText;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ }
+
+ public static class TwitterUser {
+
+ private String screenName;
+ private String lang = "en";
+ private int friendsCount;
+ private int statusesCount;
+ private String name;
+ private int followersCount;
+
+ public TwitterUser() {
+
+ }
+
+ public TwitterUser(String screenName, int friendsCount, int statusesCount, String name, int followersCount) {
+ this.screenName = screenName;
+ this.friendsCount = friendsCount;
+ this.statusesCount = statusesCount;
+ this.name = name;
+ this.followersCount = followersCount;
+ }
+
+ public void reset(String screenName, int friendsCount, int statusesCount, String name, int followersCount) {
+ this.screenName = screenName;
+ this.friendsCount = friendsCount;
+ this.statusesCount = statusesCount;
+ this.name = name;
+ this.followersCount = followersCount;
+ }
+
+ public String getScreenName() {
+ return screenName;
+ }
+
+ public int getFriendsCount() {
+ return friendsCount;
+ }
+
+ public int getStatusesCount() {
+ return statusesCount;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getFollowersCount() {
+ return followersCount;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("{");
+ builder.append("\"screen_name\":" + "\"" + screenName + "\"");
+ builder.append(",");
+ builder.append("\"language\":" + "\"" + lang + "\"");
+ builder.append(",");
+ builder.append("\"friends_count\":" + friendsCount);
+ builder.append(",");
+ builder.append("\"status_count\":" + statusesCount);
+ builder.append(",");
+ builder.append("\"name\":" + "\"" + name + "\"");
+ builder.append(",");
+ builder.append("\"followers_count\":" + followersCount);
+ builder.append("}");
+ return builder.toString();
+ }
+
+ }
+
+ public static class Date {
+
+ private int day;
+ private int month;
+ private int year;
+
+ public Date(int month, int day, int year) {
+ this.month = month;
+ this.day = day;
+ this.year = year;
+ }
+
+ public void reset(int month, int day, int year) {
+ this.month = month;
+ this.day = day;
+ this.year = year;
+ }
+
+ public int getDay() {
+ return day;
+ }
+
+ public int getMonth() {
+ return month;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ public Date() {
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("date");
+ builder.append("(\"");
+ builder.append(year);
+ builder.append("-");
+ builder.append(month < 10 ? "0" + month : "" + month);
+ builder.append("-");
+ builder.append(day < 10 ? "0" + day : "" + day);
+ builder.append("\")");
+ return builder.toString();
+ }
+
+ public void setDay(int day) {
+ this.day = day;
+ }
+
+ public void setMonth(int month) {
+ this.month = month;
+ }
+
+ public void setYear(int year) {
+ this.year = year;
+ }
+ }
+
+ public static String[] lastNames = { "Hoopengarner", "Harrow", "Gardner", "Blyant", "Best", "Buttermore", "Gronko",
+ "Mayers", "Countryman", "Neely", "Ruhl", "Taggart", "Bash", "Cason", "Hil", "Zalack", "Mingle", "Carr",
+ "Rohtin", "Wardle", "Pullman", "Wire", "Kellogg", "Hiles", "Keppel", "Bratton", "Sutton", "Wickes",
+ "Muller", "Friedline", "Llora", "Elizabeth", "Anderson", "Gaskins", "Rifler", "Vinsant", "Stanfield",
+ "Black", "Guest", "Hujsak", "Carter", "Weidemann", "Hays", "Patton", "Hayhurst", "Paynter", "Cressman",
+ "Fiddler", "Evans", "Sherlock", "Woodworth", "Jackson", "Bloise", "Schneider", "Ring", "Kepplinger",
+ "James", "Moon", "Bennett", "Bashline", "Ryals", "Zeal", "Christman", "Milliron", "Nash", "Ewing", "Camp",
+ "Mason", "Richardson", "Bowchiew", "Hahn", "Wilson", "Wood", "Toyley", "Williamson", "Lafortune", "Errett",
+ "Saltser", "Hirleman", "Brindle", "Newbiggin", "Ulery", "Lambert", "Shick", "Kuster", "Moore", "Finck",
+ "Powell", "Jolce", "Townsend", "Sauter", "Cowher", "Wolfe", "Cavalet", "Porter", "Laborde", "Ballou",
+ "Murray", "Stoddard", "Pycroft", "Milne", "King", "Todd", "Staymates", "Hall", "Romanoff", "Keilbach",
+ "Sandford", "Hamilton", "Fye", "Kline", "Weeks", "Mcelroy", "Mccullough", "Bryant", "Hill", "Moore",
+ "Ledgerwood", "Prevatt", "Eckert", "Read", "Hastings", "Doverspike", "Allshouse", "Bryan", "Mccallum",
+ "Lombardi", "Mckendrick", "Cattley", "Barkley", "Steiner", "Finlay", "Priebe", "Armitage", "Hall", "Elder",
+ "Erskine", "Hatcher", "Walker", "Pearsall", "Dunkle", "Haile", "Adams", "Miller", "Newbern", "Basinger",
+ "Fuhrer", "Brinigh", "Mench", "Blackburn", "Bastion", "Mccune", "Bridger", "Hynes", "Quinn", "Courtney",
+ "Geddinge", "Field", "Seelig", "Cable", "Earhart", "Harshman", "Roby", "Beals", "Berry", "Reed", "Hector",
+ "Pittman", "Haverrman", "Kalp", "Briner", "Joghs", "Cowart", "Close", "Wynne", "Harden", "Weldy",
+ "Stephenson", "Hildyard", "Moberly", "Wells", "Mackendoerfer", "Fisher", "Oppie", "Oneal", "Churchill",
+ "Keister", "Alice", "Tavoularis", "Fisher", "Hair", "Burns", "Veith", "Wile", "Fuller", "Fields", "Clark",
+ "Randolph", "Stone", "Mcclymonds", "Holtzer", "Donkin", "Wilkinson", "Rosensteel", "Albright", "Stahl",
+ "Fox", "Kadel", "Houser", "Hanseu", "Henderson", "Davis", "Bicknell", "Swain", "Mercer", "Holdeman",
+ "Enderly", "Caesar", "Margaret", "Munshower", "Elless", "Lucy", "Feufer", "Schofield", "Graham",
+ "Blatenberger", "Benford", "Akers", "Campbell", "Ann", "Sadley", "Ling", "Gongaware", "Schmidt", "Endsley",
+ "Groah", "Flanders", "Reichard", "Lowstetter", "Sandblom", "Griffis", "Basmanoff", "Coveney", "Hawker",
+ "Archibald", "Hutton", "Barnes", "Diegel", "Raybould", "Focell", "Breitenstein", "Murray", "Chauvin",
+ "Busk", "Pheleps", "Teagarden", "Northey", "Baumgartner", "Fleming", "Harris", "Parkinson", "Carpenter",
+ "Whirlow", "Bonner", "Wortman", "Rogers", "Scott", "Lowe", "Mckee", "Huston", "Bullard", "Throckmorton",
+ "Rummel", "Mathews", "Dull", "Saline", "Tue", "Woolery", "Lalty", "Schrader", "Ramsey", "Eisenmann",
+ "Philbrick", "Sybilla", "Wallace", "Fonblanque", "Paul", "Orbell", "Higgens", "Casteel", "Franks", "Demuth",
+ "Eisenman", "Hay", "Robinson", "Fischer", "Hincken", "Wylie", "Leichter", "Bousum", "Littlefield",
+ "Mcdonald", "Greif", "Rhodes", "Wall", "Steele", "Baldwin", "Smith", "Stewart", "Schere", "Mary", "Aultman",
+ "Emrick", "Guess", "Mitchell", "Painter", "Aft", "Hasely", "Weldi", "Loewentsein", "Poorbaugh", "Kepple",
+ "Noton", "Judge", "Jackson", "Style", "Adcock", "Diller", "Marriman", "Johnston", "Children", "Monahan",
+ "Ehret", "Shaw", "Congdon", "Pinney", "Millard", "Crissman", "Tanner", "Rose", "Knisely", "Cypret",
+ "Sommer", "Poehl", "Hardie", "Bender", "Overholt", "Gottwine", "Beach", "Leslie", "Trevithick", "Langston",
+ "Magor", "Shotts", "Howe", "Hunter", "Cross", "Kistler", "Dealtry", "Christner", "Pennington", "Thorley",
+ "Eckhardstein", "Van", "Stroh", "Stough", "Stall", "Beedell", "Shea", "Garland", "Mays", "Pritchard",
+ "Frankenberger", "Rowley", "Lane", "Baum", "Alliman", "Park", "Jardine", "Butler", "Cherry", "Kooser",
+ "Baxter", "Billimek", "Downing", "Hurst", "Wood", "Baird", "Watkins", "Edwards", "Kemerer", "Harding",
+ "Owens", "Eiford", "Keener", "Garneis", "Fiscina", "Mang", "Draudy", "Mills", "Gibson", "Reese", "Todd",
+ "Ramos", "Levett", "Wilks", "Ward", "Mosser", "Dunlap", "Kifer", "Christopher", "Ashbaugh", "Wynter",
+ "Rawls", "Cribbs", "Haynes", "Thigpen", "Schreckengost", "Bishop", "Linton", "Chapman", "James", "Jerome",
+ "Hook", "Omara", "Houston", "Maclagan", "Sandys", "Pickering", "Blois", "Dickson", "Kemble", "Duncan",
+ "Woodward", "Southern", "Henley", "Treeby", "Cram", "Elsas", "Driggers", "Warrick", "Overstreet", "Hindman",
+ "Buck", "Sulyard", "Wentzel", "Swink", "Butt", "Schaeffer", "Hoffhants", "Bould", "Willcox", "Lotherington",
+ "Bagley", "Graff", "White", "Wheeler", "Sloan", "Rodacker", "Hanford", "Jowers", "Kunkle", "Cass", "Powers",
+ "Gilman", "Mcmichaels", "Hobbs", "Herndon", "Prescott", "Smail", "Mcdonald", "Biery", "Orner", "Richards",
+ "Mueller", "Isaman", "Bruxner", "Goodman", "Barth", "Turzanski", "Vorrasi", "Stainforth", "Nehling", "Rahl",
+ "Erschoff", "Greene", "Mckinnon", "Reade", "Smith", "Pery", "Roose", "Greenwood", "Weisgarber", "Curry",
+ "Holts", "Zadovsky", "Parrish", "Putnam", "Munson", "Mcindoe", "Nickolson", "Brooks", "Bollinger",
+ "Stroble", "Siegrist", "Fulton", "Tomey", "Zoucks", "Roberts", "Otis", "Clarke", "Easter", "Johnson",
+ "Fylbrigg", "Taylor", "Swartzbaugh", "Weinstein", "Gadow", "Sayre", "Marcotte", "Wise", "Atweeke", "Mcfall",
+ "Napier", "Eisenhart", "Canham", "Sealis", "Baughman", "Gertraht", "Losey", "Laurence", "Eva", "Pershing",
+ "Kern", "Pirl", "Rega", "Sanborn", "Kanaga", "Sanders", "Anderson", "Dickinson", "Osteen", "Gettemy",
+ "Crom", "Snyder", "Reed", "Laurenzi", "Riggle", "Tillson", "Fowler", "Raub", "Jenner", "Koepple", "Soames",
+ "Goldvogel", "Dimsdale", "Zimmer", "Giesen", "Baker", "Beail", "Mortland", "Bard", "Sanner", "Knopsnider",
+ "Jenkins", "Bailey", "Werner", "Barrett", "Faust", "Agg", "Tomlinson", "Williams", "Little", "Greenawalt",
+ "Wells", "Wilkins", "Gisiko", "Bauerle", "Harrold", "Prechtl", "Polson", "Faast", "Winton", "Garneys",
+ "Peters", "Potter", "Porter", "Tennant", "Eve", "Dugger", "Jones", "Burch", "Cowper", "Whittier" };
+
+ public static String[] firstNames = { "Albert", "Jacquelin", "Dona", "Alia", "Mayme", "Genoveva", "Emma", "Lena",
+ "Melody", "Vilma", "Katelyn", "Jeremy", "Coral", "Leann", "Lita", "Gilda", "Kayla", "Alvina", "Maranda",
+ "Verlie", "Khadijah", "Karey", "Patrice", "Kallie", "Corey", "Mollie", "Daisy", "Melanie", "Sarita",
+ "Nichole", "Pricilla", "Terresa", "Berneice", "Arianne", "Brianne", "Lavinia", "Ulrike", "Lesha", "Adell",
+ "Ardelle", "Marisha", "Laquita", "Karyl", "Maryjane", "Kendall", "Isobel", "Raeann", "Heike", "Barbera",
+ "Norman", "Yasmine", "Nevada", "Mariam", "Edith", "Eugena", "Lovie", "Maren", "Bennie", "Lennie", "Tamera",
+ "Crystal", "Randi", "Anamaria", "Chantal", "Jesenia", "Avis", "Shela", "Randy", "Laurena", "Sharron",
+ "Christiane", "Lorie", "Mario", "Elizabeth", "Reina", "Adria", "Lakisha", "Brittni", "Azzie", "Dori",
+ "Shaneka", "Asuncion", "Katheryn", "Laurice", "Sharita", "Krystal", "Reva", "Inger", "Alpha", "Makeda",
+ "Anabel", "Loni", "Tiara", "Meda", "Latashia", "Leola", "Chin", "Daisey", "Ivory", "Amalia", "Logan",
+ "Tyler", "Kyong", "Carolann", "Maryetta", "Eufemia", "Anya", "Doreatha", "Lorna", "Rutha", "Ehtel",
+ "Debbie", "Chassidy", "Sang", "Christa", "Lottie", "Chun", "Karine", "Peggie", "Amina", "Melany", "Alayna",
+ "Scott", "Romana", "Naomi", "Christiana", "Salena", "Taunya", "Mitsue", "Regina", "Chelsie", "Charity",
+ "Dacia", "Aletha", "Latosha", "Lia", "Tamica", "Chery", "Bianca", "Shu", "Georgianne", "Myriam", "Austin",
+ "Wan", "Mallory", "Jana", "Georgie", "Jenell", "Kori", "Vicki", "Delfina", "June", "Mellisa", "Catherina",
+ "Claudie", "Tynisha", "Dayle", "Enriqueta", "Belen", "Pia", "Sarai", "Rosy", "Renay", "Kacie", "Frieda",
+ "Cayla", "Elissa", "Claribel", "Sabina", "Mackenzie", "Raina", "Cira", "Mitzie", "Aubrey", "Serafina",
+ "Maria", "Katharine", "Esperanza", "Sung", "Daria", "Billye", "Stefanie", "Kasha", "Holly", "Suzanne",
+ "Inga", "Flora", "Andria", "Genevie", "Eladia", "Janet", "Erline", "Renna", "Georgeanna", "Delorse",
+ "Elnora", "Rudy", "Rima", "Leanora", "Letisha", "Love", "Alverta", "Pinkie", "Domonique", "Jeannie", "Jose",
+ "Jacqueline", "Tara", "Lily", "Erna", "Tennille", "Galina", "Tamala", "Kirby", "Nichelle", "Myesha",
+ "Farah", "Santa", "Ludie", "Kenia", "Yee", "Micheline", "Maryann", "Elaina", "Ethelyn", "Emmaline",
+ "Shanell", "Marina", "Nila", "Alane", "Shakira", "Dorris", "Belinda", "Elois", "Barbie", "Carita", "Gisela",
+ "Lura", "Fransisca", "Helga", "Peg", "Leonarda", "Earlie", "Deetta", "Jacquetta", "Blossom", "Kayleigh",
+ "Deloras", "Keshia", "Christinia", "Dulce", "Bernie", "Sheba", "Lashanda", "Tula", "Claretta", "Kary",
+ "Jeanette", "Lupita", "Lenora", "Hisako", "Sherise", "Glynda", "Adela", "Chia", "Sudie", "Mindy", "Caroyln",
+ "Lindsey", "Xiomara", "Mercedes", "Onie", "Loan", "Alexis", "Tommie", "Donette", "Monica", "Soo",
+ "Camellia", "Lavera", "Valery", "Ariana", "Sophia", "Loris", "Ginette", "Marielle", "Tari", "Julissa",
+ "Alesia", "Suzanna", "Emelda", "Erin", "Ladawn", "Sherilyn", "Candice", "Nereida", "Fairy", "Carl", "Joel",
+ "Marilee", "Gracia", "Cordie", "So", "Shanita", "Drew", "Cassie", "Sherie", "Marget", "Norma", "Delois",
+ "Debera", "Chanelle", "Catarina", "Aracely", "Carlene", "Tricia", "Aleen", "Katharina", "Marguerita",
+ "Guadalupe", "Margorie", "Mandie", "Kathe", "Chong", "Sage", "Faith", "Maryrose", "Stephany", "Ivy",
+ "Pauline", "Susie", "Cristen", "Jenifer", "Annette", "Debi", "Karmen", "Luci", "Shayla", "Hope", "Ocie",
+ "Sharie", "Tami", "Breana", "Kerry", "Rubye", "Lashay", "Sondra", "Katrice", "Brunilda", "Cortney", "Yan",
+ "Zenobia", "Penni", "Addie", "Lavona", "Noel", "Anika", "Herlinda", "Valencia", "Bunny", "Tory", "Victoria",
+ "Carrie", "Mikaela", "Wilhelmina", "Chung", "Hortencia", "Gerda", "Wen", "Ilana", "Sibyl", "Candida",
+ "Victorina", "Chantell", "Casie", "Emeline", "Dominica", "Cecila", "Delora", "Miesha", "Nova", "Sally",
+ "Ronald", "Charlette", "Francisca", "Mina", "Jenna", "Loraine", "Felisa", "Lulu", "Page", "Lyda", "Babara",
+ "Flor", "Walter", "Chan", "Sherika", "Kala", "Luna", "Vada", "Syreeta", "Slyvia", "Karin", "Renata",
+ "Robbi", "Glenda", "Delsie", "Lizzie", "Genia", "Caitlin", "Bebe", "Cory", "Sam", "Leslee", "Elva", "Caren",
+ "Kasie", "Leticia", "Shannan", "Vickey", "Sandie", "Kyle", "Chang", "Terrilyn", "Sandra", "Elida",
+ "Marketta", "Elsy", "Tu", "Carman", "Ashlie", "Vernia", "Albertine", "Vivian", "Elba", "Bong", "Margy",
+ "Janetta", "Xiao", "Teofila", "Danyel", "Nickole", "Aleisha", "Tera", "Cleotilde", "Dara", "Paulita",
+ "Isela", "Maricela", "Rozella", "Marivel", "Aurora", "Melissa", "Carylon", "Delinda", "Marvella",
+ "Candelaria", "Deidre", "Tawanna", "Myrtie", "Milagro", "Emilie", "Coretta", "Ivette", "Suzann", "Ammie",
+ "Lucina", "Lory", "Tena", "Eleanor", "Cherlyn", "Tiana", "Brianna", "Myra", "Flo", "Carisa", "Kandi",
+ "Erlinda", "Jacqulyn", "Fermina", "Riva", "Palmira", "Lindsay", "Annmarie", "Tamiko", "Carline", "Amelia",
+ "Quiana", "Lashawna", "Veola", "Belva", "Marsha", "Verlene", "Alex", "Leisha", "Camila", "Mirtha", "Melva",
+ "Lina", "Arla", "Cythia", "Towanda", "Aracelis", "Tasia", "Aurore", "Trinity", "Bernadine", "Farrah",
+ "Deneen", "Ines", "Betty", "Lorretta", "Dorethea", "Hertha", "Rochelle", "Juli", "Shenika", "Yung", "Lavon",
+ "Deeanna", "Nakia", "Lynnette", "Dinorah", "Nery", "Elene", "Carolee", "Mira", "Franchesca", "Lavonda",
+ "Leida", "Paulette", "Dorine", "Allegra", "Keva", "Jeffrey", "Bernardina", "Maryln", "Yoko", "Faviola",
+ "Jayne", "Lucilla", "Charita", "Ewa", "Ella", "Maggie", "Ivey", "Bettie", "Jerri", "Marni", "Bibi",
+ "Sabrina", "Sarah", "Marleen", "Katherin", "Remona", "Jamika", "Antonina", "Oliva", "Lajuana", "Fonda",
+ "Sigrid", "Yael", "Billi", "Verona", "Arminda", "Mirna", "Tesha", "Katheleen", "Bonita", "Kamilah",
+ "Patrica", "Julio", "Shaina", "Mellie", "Denyse", "Deandrea", "Alena", "Meg", "Kizzie", "Krissy", "Karly",
+ "Alleen", "Yahaira", "Lucie", "Karena", "Elaine", "Eloise", "Buena", "Marianela", "Renee", "Nan",
+ "Carolynn", "Windy", "Avril", "Jane", "Vida", "Thea", "Marvel", "Rosaline", "Tifany", "Robena", "Azucena",
+ "Carlota", "Mindi", "Andera", "Jenny", "Courtney", "Lyndsey", "Willette", "Kristie", "Shaniqua", "Tabatha",
+ "Ngoc", "Una", "Marlena", "Louetta", "Vernie", "Brandy", "Jacquelyne", "Jenelle", "Elna", "Erminia", "Ida",
+ "Audie", "Louis", "Marisol", "Shawana", "Harriette", "Karol", "Kitty", "Esmeralda", "Vivienne", "Eloisa",
+ "Iris", "Jeanice", "Cammie", "Jacinda", "Shena", "Floy", "Theda", "Lourdes", "Jayna", "Marg", "Kati",
+ "Tanna", "Rosalyn", "Maxima", "Soon", "Angelika", "Shonna", "Merle", "Kassandra", "Deedee", "Heidi",
+ "Marti", "Renae", "Arleen", "Alfredia", "Jewell", "Carley", "Pennie", "Corina", "Tonisha", "Natividad",
+ "Lilliana", "Darcie", "Shawna", "Angel", "Piedad", "Josefa", "Rebbeca", "Natacha", "Nenita", "Petrina",
+ "Carmon", "Chasidy", "Temika", "Dennise", "Renetta", "Augusta", "Shirlee", "Valeri", "Casimira", "Janay",
+ "Berniece", "Deborah", "Yaeko", "Mimi", "Digna", "Irish", "Cher", "Yong", "Lucila", "Jimmie", "Junko",
+ "Lezlie", "Waneta", "Sandee", "Marquita", "Eura", "Freeda", "Annabell", "Laree", "Jaye", "Wendy", "Toshia",
+ "Kylee", "Aleta", "Emiko", "Clorinda", "Sixta", "Audrea", "Juanita", "Birdie", "Reita", "Latanya", "Nia",
+ "Leora", "Laurine", "Krysten", "Jerrie", "Chantel", "Ira", "Sena", "Andre", "Jann", "Marla", "Precious",
+ "Katy", "Gabrielle", "Yvette", "Brook", "Shirlene", "Eldora", "Laura", "Milda", "Euna", "Jettie", "Debora",
+ "Lise", "Edythe", "Leandra", "Shandi", "Araceli", "Johanne", "Nieves", "Denese", "Carmelita", "Nohemi",
+ "Annice", "Natalie", "Yolande", "Jeffie", "Vashti", "Vickie", "Obdulia", "Youlanda", "Lupe", "Tomoko",
+ "Monserrate", "Domitila", "Etsuko", "Adrienne", "Lakesha", "Melissia", "Odessa", "Meagan", "Veronika",
+ "Jolyn", "Isabelle", "Leah", "Rhiannon", "Gianna", "Audra", "Sommer", "Renate", "Perla", "Thao", "Myong",
+ "Lavette", "Mark", "Emilia", "Ariane", "Karl", "Dorie", "Jacquie", "Mia", "Malka", "Shenita", "Tashina",
+ "Christine", "Cherri", "Roni", "Fran", "Mildred", "Sara", "Clarissa", "Fredia", "Elease", "Samuel",
+ "Earlene", "Vernita", "Mae", "Concha", "Renea", "Tamekia", "Hye", "Ingeborg", "Tessa", "Kelly", "Kristin",
+ "Tam", "Sacha", "Kanisha", "Jillian", "Tiffanie", "Ashlee", "Madelyn", "Donya", "Clementine", "Mickie",
+ "My", "Zena", "Terrie", "Samatha", "Gertie", "Tarra", "Natalia", "Sharlene", "Evie", "Shalon", "Rosalee",
+ "Numbers", "Jodi", "Hattie", "Naoma", "Valene", "Whitley", "Claude", "Alline", "Jeanne", "Camie",
+ "Maragret", "Viola", "Kris", "Marlo", "Arcelia", "Shari", "Jalisa", "Corrie", "Eleonor", "Angelyn", "Merry",
+ "Lauren", "Melita", "Gita", "Elenor", "Aurelia", "Janae", "Lyndia", "Margeret", "Shawanda", "Rolande",
+ "Shirl", "Madeleine", "Celinda", "Jaleesa", "Shemika", "Joye", "Tisa", "Trudie", "Kathrine", "Clarita",
+ "Dinah", "Georgia", "Antoinette", "Janis", "Suzette", "Sherri", "Herta", "Arie", "Hedy", "Cassi", "Audrie",
+ "Caryl", "Jazmine", "Jessica", "Beverly", "Elizbeth", "Marylee", "Londa", "Fredericka", "Argelia", "Nana",
+ "Donnette", "Damaris", "Hailey", "Jamee", "Kathlene", "Glayds", "Lydia", "Apryl", "Verla", "Adam",
+ "Concepcion", "Zelda", "Shonta", "Vernice", "Detra", "Meghann", "Sherley", "Sheri", "Kiyoko", "Margarita",
+ "Adaline", "Mariela", "Velda", "Ailene", "Juliane", "Aiko", "Edyth", "Cecelia", "Shavon", "Florance",
+ "Madeline", "Rheba", "Deann", "Ignacia", "Odelia", "Heide", "Mica", "Jennette", "Maricruz", "Ouida",
+ "Darcy", "Laure", "Justina", "Amada", "Laine", "Cruz", "Sunny", "Francene", "Roxanna", "Nam", "Nancie",
+ "Deanna", "Letty", "Britni", "Kazuko", "Lacresha", "Simon", "Caleb", "Milton", "Colton", "Travis", "Miles",
+ "Jonathan", "Logan", "Rolf", "Emilio", "Roberto", "Marcus", "Tim", "Delmar", "Devon", "Kurt", "Edward",
+ "Jeffrey", "Elvis", "Alfonso", "Blair", "Wm", "Sheldon", "Leonel", "Michal", "Federico", "Jacques",
+ "Leslie", "Augustine", "Hugh", "Brant", "Hong", "Sal", "Modesto", "Curtis", "Jefferey", "Adam", "John",
+ "Glenn", "Vance", "Alejandro", "Refugio", "Lucio", "Demarcus", "Chang", "Huey", "Neville", "Preston",
+ "Bert", "Abram", "Foster", "Jamison", "Kirby", "Erich", "Manual", "Dustin", "Derrick", "Donnie", "Jospeh",
+ "Chris", "Josue", "Stevie", "Russ", "Stanley", "Nicolas", "Samuel", "Waldo", "Jake", "Max", "Ernest",
+ "Reinaldo", "Rene", "Gale", "Morris", "Nathan", "Maximo", "Courtney", "Theodore", "Octavio", "Otha",
+ "Delmer", "Graham", "Dean", "Lowell", "Myles", "Colby", "Boyd", "Adolph", "Jarrod", "Nick", "Mark",
+ "Clinton", "Kim", "Sonny", "Dalton", "Tyler", "Jody", "Orville", "Luther", "Rubin", "Hollis", "Rashad",
+ "Barton", "Vicente", "Ted", "Rick", "Carmine", "Clifton", "Gayle", "Christopher", "Jessie", "Bradley",
+ "Clay", "Theo", "Josh", "Mitchell", "Boyce", "Chung", "Eugenio", "August", "Norbert", "Sammie", "Jerry",
+ "Adan", "Edmundo", "Homer", "Hilton", "Tod", "Kirk", "Emmett", "Milan", "Quincy", "Jewell", "Herb", "Steve",
+ "Carmen", "Bobby", "Odis", "Daron", "Jeremy", "Carl", "Hunter", "Tuan", "Thurman", "Asa", "Brenton",
+ "Shane", "Donny", "Andreas", "Teddy", "Dario", "Cyril", "Hoyt", "Teodoro", "Vincenzo", "Hilario", "Daren",
+ "Agustin", "Marquis", "Ezekiel", "Brendan", "Johnson", "Alden", "Richie", "Granville", "Chad", "Joseph",
+ "Lamont", "Jordon", "Gilberto", "Chong", "Rosendo", "Eddy", "Rob", "Dewitt", "Andre", "Titus", "Russell",
+ "Rigoberto", "Dick", "Garland", "Gabriel", "Hank", "Darius", "Ignacio", "Lazaro", "Johnie", "Mauro",
+ "Edmund", "Trent", "Harris", "Osvaldo", "Marvin", "Judson", "Rodney", "Randall", "Renato", "Richard",
+ "Denny", "Jon", "Doyle", "Cristopher", "Wilson", "Christian", "Jamie", "Roland", "Ken", "Tad", "Romeo",
+ "Seth", "Quinton", "Byron", "Ruben", "Darrel", "Deandre", "Broderick", "Harold", "Ty", "Monroe", "Landon",
+ "Mohammed", "Angel", "Arlen", "Elias", "Andres", "Carlton", "Numbers", "Tony", "Thaddeus", "Issac", "Elmer",
+ "Antoine", "Ned", "Fermin", "Grover", "Benito", "Abdul", "Cortez", "Eric", "Maxwell", "Coy", "Gavin",
+ "Rich", "Andy", "Del", "Giovanni", "Major", "Efren", "Horacio", "Joaquin", "Charles", "Noah", "Deon",
+ "Pasquale", "Reed", "Fausto", "Jermaine", "Irvin", "Ray", "Tobias", "Carter", "Yong", "Jorge", "Brent",
+ "Daniel", "Zane", "Walker", "Thad", "Shaun", "Jaime", "Mckinley", "Bradford", "Nathanial", "Jerald",
+ "Aubrey", "Virgil", "Abel", "Philip", "Chester", "Chadwick", "Dominick", "Britt", "Emmitt", "Ferdinand",
+ "Julian", "Reid", "Santos", "Dwain", "Morgan", "James", "Marion", "Micheal", "Eddie", "Brett", "Stacy",
+ "Kerry", "Dale", "Nicholas", "Darrick", "Freeman", "Scott", "Newton", "Sherman", "Felton", "Cedrick",
+ "Winfred", "Brad", "Fredric", "Dewayne", "Virgilio", "Reggie", "Edgar", "Heriberto", "Shad", "Timmy",
+ "Javier", "Nestor", "Royal", "Lynn", "Irwin", "Ismael", "Jonas", "Wiley", "Austin", "Kieth", "Gonzalo",
+ "Paris", "Earnest", "Arron", "Jarred", "Todd", "Erik", "Maria", "Chauncey", "Neil", "Conrad", "Maurice",
+ "Roosevelt", "Jacob", "Sydney", "Lee", "Basil", "Louis", "Rodolfo", "Rodger", "Roman", "Corey", "Ambrose",
+ "Cristobal", "Sylvester", "Benton", "Franklin", "Marcelo", "Guillermo", "Toby", "Jeramy", "Donn", "Danny",
+ "Dwight", "Clifford", "Valentine", "Matt", "Jules", "Kareem", "Ronny", "Lonny", "Son", "Leopoldo", "Dannie",
+ "Gregg", "Dillon", "Orlando", "Weston", "Kermit", "Damian", "Abraham", "Walton", "Adrian", "Rudolf", "Will",
+ "Les", "Norberto", "Fred", "Tyrone", "Ariel", "Terry", "Emmanuel", "Anderson", "Elton", "Otis", "Derek",
+ "Frankie", "Gino", "Lavern", "Jarod", "Kenny", "Dane", "Keenan", "Bryant", "Eusebio", "Dorian", "Ali",
+ "Lucas", "Wilford", "Jeremiah", "Warner", "Woodrow", "Galen", "Bob", "Johnathon", "Amado", "Michel",
+ "Harry", "Zachery", "Taylor", "Booker", "Hershel", "Mohammad", "Darrell", "Kyle", "Stuart", "Marlin",
+ "Hyman", "Jeffery", "Sidney", "Merrill", "Roy", "Garrett", "Porter", "Kenton", "Giuseppe", "Terrance",
+ "Trey", "Felix", "Buster", "Von", "Jackie", "Linwood", "Darron", "Francisco", "Bernie", "Diego", "Brendon",
+ "Cody", "Marco", "Ahmed", "Antonio", "Vince", "Brooks", "Kendrick", "Ross", "Mohamed", "Jim", "Benny",
+ "Gerald", "Pablo", "Charlie", "Antony", "Werner", "Hipolito", "Minh", "Mel", "Derick", "Armand", "Fidel",
+ "Lewis", "Donnell", "Desmond", "Vaughn", "Guadalupe", "Keneth", "Rodrick", "Spencer", "Chas", "Gus",
+ "Harlan", "Wes", "Carmelo", "Jefferson", "Gerard", "Jarvis", "Haywood", "Hayden", "Sergio", "Gene",
+ "Edgardo", "Colin", "Horace", "Dominic", "Aldo", "Adolfo", "Juan", "Man", "Lenard", "Clement", "Everett",
+ "Hal", "Bryon", "Mason", "Emerson", "Earle", "Laurence", "Columbus", "Lamar", "Douglas", "Ian", "Fredrick",
+ "Marc", "Loren", "Wallace", "Randell", "Noble", "Ricardo", "Rory", "Lindsey", "Boris", "Bill", "Carlos",
+ "Domingo", "Grant", "Craig", "Ezra", "Matthew", "Van", "Rudy", "Danial", "Brock", "Maynard", "Vincent",
+ "Cole", "Damion", "Ellsworth", "Marcel", "Markus", "Rueben", "Tanner", "Reyes", "Hung", "Kennith",
+ "Lindsay", "Howard", "Ralph", "Jed", "Monte", "Garfield", "Avery", "Bernardo", "Malcolm", "Sterling",
+ "Ezequiel", "Kristofer", "Luciano", "Casey", "Rosario", "Ellis", "Quintin", "Trevor", "Miquel", "Jordan",
+ "Arthur", "Carson", "Tyron", "Grady", "Walter", "Jonathon", "Ricky", "Bennie", "Terrence", "Dion", "Dusty",
+ "Roderick", "Isaac", "Rodrigo", "Harrison", "Zack", "Dee", "Devin", "Rey", "Ulysses", "Clint", "Greg",
+ "Dino", "Frances", "Wade", "Franklyn", "Jude", "Bradly", "Salvador", "Rocky", "Weldon", "Lloyd", "Milford",
+ "Clarence", "Alec", "Allan", "Bobbie", "Oswaldo", "Wilfred", "Raleigh", "Shelby", "Willy", "Alphonso",
+ "Arnoldo", "Robbie", "Truman", "Nicky", "Quinn", "Damien", "Lacy", "Marcos", "Parker", "Burt", "Carroll",
+ "Denver", "Buck", "Dong", "Normand", "Billie", "Edwin", "Troy", "Arden", "Rusty", "Tommy", "Kenneth", "Leo",
+ "Claud", "Joel", "Kendall", "Dante", "Milo", "Cruz", "Lucien", "Ramon", "Jarrett", "Scottie", "Deshawn",
+ "Ronnie", "Pete", "Alonzo", "Whitney", "Stefan", "Sebastian", "Edmond", "Enrique", "Branden", "Leonard",
+ "Loyd", "Olin", "Ron", "Rhett", "Frederic", "Orval", "Tyrell", "Gail", "Eli", "Antonia", "Malcom", "Sandy",
+ "Stacey", "Nickolas", "Hosea", "Santo", "Oscar", "Fletcher", "Dave", "Patrick", "Dewey", "Bo", "Vito",
+ "Blaine", "Randy", "Robin", "Winston", "Sammy", "Edwardo", "Manuel", "Valentin", "Stanford", "Filiberto",
+ "Buddy", "Zachariah", "Johnnie", "Elbert", "Paul", "Isreal", "Jerrold", "Leif", "Owen", "Sung", "Junior",
+ "Raphael", "Josef", "Donte", "Allen", "Florencio", "Raymond", "Lauren", "Collin", "Eliseo", "Bruno",
+ "Martin", "Lyndon", "Kurtis", "Salvatore", "Erwin", "Michael", "Sean", "Davis", "Alberto", "King",
+ "Rolland", "Joe", "Tory", "Chase", "Dallas", "Vernon", "Beau", "Terrell", "Reynaldo", "Monty", "Jame",
+ "Dirk", "Florentino", "Reuben", "Saul", "Emory", "Esteban", "Michale", "Claudio", "Jacinto", "Kelley",
+ "Levi", "Andrea", "Lanny", "Wendell", "Elwood", "Joan", "Felipe", "Palmer", "Elmo", "Lawrence", "Hubert",
+ "Rudolph", "Duane", "Cordell", "Everette", "Mack", "Alan", "Efrain", "Trenton", "Bryan", "Tom", "Wilmer",
+ "Clyde", "Chance", "Lou", "Brain", "Justin", "Phil", "Jerrod", "George", "Kris", "Cyrus", "Emery", "Rickey",
+ "Lincoln", "Renaldo", "Mathew", "Luke", "Dwayne", "Alexis", "Jackson", "Gil", "Marty", "Burton", "Emil",
+ "Glen", "Willian", "Clemente", "Keven", "Barney", "Odell", "Reginald", "Aurelio", "Damon", "Ward",
+ "Gustavo", "Harley", "Peter", "Anibal", "Arlie", "Nigel", "Oren", "Zachary", "Scot", "Bud", "Wilbert",
+ "Bart", "Josiah", "Marlon", "Eldon", "Darryl", "Roger", "Anthony", "Omer", "Francis", "Patricia", "Moises",
+ "Chuck", "Waylon", "Hector", "Jamaal", "Cesar", "Julius", "Rex", "Norris", "Ollie", "Isaias", "Quentin",
+ "Graig", "Lyle", "Jeffry", "Karl", "Lester", "Danilo", "Mike", "Dylan", "Carlo", "Ryan", "Leon", "Percy",
+ "Lucius", "Jamel", "Lesley", "Joey", "Cornelius", "Rico", "Arnulfo", "Chet", "Margarito", "Ernie",
+ "Nathanael", "Amos", "Cleveland", "Luigi", "Alfonzo", "Phillip", "Clair", "Elroy", "Alva", "Hans", "Shon",
+ "Gary", "Jesus", "Cary", "Silas", "Keith", "Israel", "Willard", "Randolph", "Dan", "Adalberto", "Claude",
+ "Delbert", "Garry", "Mary", "Larry", "Riley", "Robt", "Darwin", "Barrett", "Steven", "Kelly", "Herschel",
+ "Darnell", "Scotty", "Armando", "Miguel", "Lawerence", "Wesley", "Garth", "Carol", "Micah", "Alvin",
+ "Billy", "Earl", "Pat", "Brady", "Cory", "Carey", "Bernard", "Jayson", "Nathaniel", "Gaylord", "Archie",
+ "Dorsey", "Erasmo", "Angelo", "Elisha", "Long", "Augustus", "Hobert", "Drew", "Stan", "Sherwood", "Lorenzo",
+ "Forrest", "Shawn", "Leigh", "Hiram", "Leonardo", "Gerry", "Myron", "Hugo", "Alvaro", "Leland", "Genaro",
+ "Jamey", "Stewart", "Elden", "Irving", "Olen", "Antone", "Freddy", "Lupe", "Joshua", "Gregory", "Andrew",
+ "Sang", "Wilbur", "Gerardo", "Merlin", "Williams", "Johnny", "Alex", "Tommie", "Jimmy", "Donovan", "Dexter",
+ "Gaston", "Tracy", "Jeff", "Stephen", "Berry", "Anton", "Darell", "Fritz", "Willis", "Noel", "Mariano",
+ "Crawford", "Zoey", "Alex", "Brianna", "Carlie", "Lloyd", "Cal", "Astor", "Randolf", "Magdalene",
+ "Trevelyan", "Terance", "Roy", "Kermit", "Harriett", "Crystal", "Laurinda", "Kiersten", "Phyllida", "Liz",
+ "Bettie", "Rena", "Colten", "Berenice", "Sindy", "Wilma", "Amos", "Candi", "Ritchie", "Dirk", "Kathlyn",
+ "Callista", "Anona", "Flossie", "Sterling", "Calista", "Regan", "Erica", "Jeana", "Keaton", "York", "Nolan",
+ "Daniel", "Benton", "Tommie", "Serenity", "Deanna", "Chas", "Heron", "Marlyn", "Xylia", "Tristin", "Lyndon",
+ "Andriana", "Madelaine", "Maddison", "Leila", "Chantelle", "Audrey", "Connor", "Daley", "Tracee", "Tilda",
+ "Eliot", "Merle", "Linwood", "Kathryn", "Silas", "Alvina", "Phinehas", "Janis", "Alvena", "Zubin",
+ "Gwendolen", "Caitlyn", "Bertram", "Hailee", "Idelle", "Homer", "Jannah", "Delbert", "Rhianna", "Cy",
+ "Jefferson", "Wayland", "Nona", "Tempest", "Reed", "Jenifer", "Ellery", "Nicolina", "Aldous", "Prince",
+ "Lexia", "Vinnie", "Doug", "Alberic", "Kayleen", "Woody", "Rosanne", "Ysabel", "Skyler", "Twyla", "Geordie",
+ "Leta", "Clive", "Aaron", "Scottie", "Celeste", "Chuck", "Erle", "Lallie", "Jaycob", "Ray", "Carrie",
+ "Laurita", "Noreen", "Meaghan", "Ulysses", "Andy", "Drogo", "Dina", "Yasmin", "Mya", "Luvenia", "Urban",
+ "Jacob", "Laetitia", "Sherry", "Love", "Michaela", "Deonne", "Summer", "Brendon", "Sheena", "Mason",
+ "Jayson", "Linden", "Salal", "Darrell", "Diana", "Hudson", "Lennon", "Isador", "Charley", "April", "Ralph",
+ "James", "Mina", "Jolyon", "Laurine", "Monna", "Carita", "Munro", "Elsdon", "Everette", "Radclyffe",
+ "Darrin", "Herbert", "Gawain", "Sheree", "Trudy", "Emmaline", "Kassandra", "Rebecca", "Basil", "Jen", "Don",
+ "Osborne", "Lilith", "Hannah", "Fox", "Rupert", "Paulene", "Darius", "Wally", "Baptist", "Sapphire", "Tia",
+ "Sondra", "Kylee", "Ashton", "Jepson", "Joetta", "Val", "Adela", "Zacharias", "Zola", "Marmaduke",
+ "Shannah", "Posie", "Oralie", "Brittany", "Ernesta", "Raymund", "Denzil", "Daren", "Roosevelt", "Nelson",
+ "Fortune", "Mariel", "Nick", "Jaden", "Upton", "Oz", "Margaux", "Precious", "Albert", "Bridger", "Jimmy",
+ "Nicola", "Rosalynne", "Keith", "Walt", "Della", "Joanna", "Xenia", "Esmeralda", "Major", "Simon", "Rexana",
+ "Stacy", "Calanthe", "Sherley", "Kaitlyn", "Graham", "Ramsey", "Abbey", "Madlyn", "Kelvin", "Bill", "Rue",
+ "Monica", "Caileigh", "Laraine", "Booker", "Jayna", "Greta", "Jervis", "Sherman", "Kendrick", "Tommy",
+ "Iris", "Geffrey", "Kaelea", "Kerr", "Garrick", "Jep", "Audley", "Nic", "Bronte", "Beulah", "Patricia",
+ "Jewell", "Deidra", "Cory", "Everett", "Harper", "Charity", "Godfrey", "Jaime", "Sinclair", "Talbot",
+ "Dayna", "Cooper", "Rosaline", "Jennie", "Eileen", "Latanya", "Corinna", "Roxie", "Caesar", "Charles",
+ "Pollie", "Lindsey", "Sorrel", "Dwight", "Jocelyn", "Weston", "Shyla", "Valorie", "Bessie", "Josh",
+ "Lessie", "Dayton", "Kathi", "Chasity", "Wilton", "Adam", "William", "Ash", "Angela", "Ivor", "Ria",
+ "Jazmine", "Hailey", "Jo", "Silvestra", "Ernie", "Clifford", "Levi", "Matilda", "Quincey", "Camilla",
+ "Delicia", "Phemie", "Laurena", "Bambi", "Lourdes", "Royston", "Chastity", "Lynwood", "Elle", "Brenda",
+ "Phoebe", "Timothy", "Raschelle", "Lilly", "Burt", "Rina", "Rodney", "Maris", "Jaron", "Wilf", "Harlan",
+ "Audra", "Vincent", "Elwyn", "Drew", "Wynter", "Ora", "Lissa", "Virgil", "Xavier", "Chad", "Ollie",
+ "Leyton", "Karolyn", "Skye", "Roni", "Gladys", "Dinah", "Penny", "August", "Osmund", "Whitaker", "Brande",
+ "Cornell", "Phil", "Zara", "Kilie", "Gavin", "Coty", "Randy", "Teri", "Keira", "Pru", "Clemency", "Kelcey",
+ "Nevil", "Poppy", "Gareth", "Christabel", "Bastian", "Wynonna", "Roselyn", "Goddard", "Collin", "Trace",
+ "Neal", "Effie", "Denys", "Virginia", "Richard", "Isiah", "Harrietta", "Gaylord", "Diamond", "Trudi",
+ "Elaine", "Jemmy", "Gage", "Annabel", "Quincy", "Syd", "Marianna", "Philomena", "Aubree", "Kathie", "Jacki",
+ "Kelley", "Bess", "Cecil", "Maryvonne", "Kassidy", "Anselm", "Dona", "Darby", "Jamison", "Daryl", "Darell",
+ "Teal", "Lennie", "Bartholomew", "Katie", "Maybelline", "Kimball", "Elvis", "Les", "Flick", "Harley",
+ "Beth", "Bidelia", "Montague", "Helen", "Ozzy", "Stef", "Debra", "Maxene", "Stefanie", "Russ", "Avril",
+ "Johnathan", "Orson", "Chelsey", "Josephine", "Deshaun", "Wendell", "Lula", "Ferdinanda", "Greg", "Brad",
+ "Kynaston", "Dena", "Russel", "Robertina", "Misti", "Leon", "Anjelica", "Bryana", "Myles", "Judi", "Curtis",
+ "Davin", "Kristia", "Chrysanta", "Hayleigh", "Hector", "Osbert", "Eustace", "Cary", "Tansy", "Cayley",
+ "Maryann", "Alissa", "Ike", "Tranter", "Reina", "Alwilda", "Sidony", "Columbine", "Astra", "Jillie",
+ "Stephania", "Jonah", "Kennedy", "Ferdinand", "Allegria", "Donella", "Kelleigh", "Darian", "Eldreda",
+ "Jayden", "Herbie", "Jake", "Winston", "Vi", "Annie", "Cherice", "Hugo", "Tricia", "Haydee", "Cassarah",
+ "Darden", "Mallory", "Alton", "Hadley", "Romayne", "Lacey", "Ern", "Alayna", "Cecilia", "Seward", "Tilly",
+ "Edgar", "Concordia", "Ibbie", "Dahlia", "Oswin", "Stu", "Brett", "Maralyn", "Kristeen", "Dotty", "Robyn",
+ "Nessa", "Tresha", "Guinevere", "Emerson", "Haze", "Lyn", "Henderson", "Lexa", "Jaylen", "Gail", "Lizette",
+ "Tiara", "Robbie", "Destiny", "Alice", "Livia", "Rosy", "Leah", "Jan", "Zach", "Vita", "Gia", "Micheal",
+ "Rowina", "Alysha", "Bobbi", "Delores", "Osmond", "Karaugh", "Wilbur", "Kasandra", "Renae", "Kaety", "Dora",
+ "Gaye", "Amaryllis", "Katelyn", "Dacre", "Prudence", "Ebony", "Camron", "Jerrold", "Vivyan", "Randall",
+ "Donna", "Misty", "Damon", "Selby", "Esmund", "Rian", "Garry", "Julius", "Raelene", "Clement", "Dom",
+ "Tibby", "Moss", "Millicent", "Gwendoline", "Berry", "Ashleigh", "Lilac", "Quin", "Vere", "Creighton",
+ "Harriet", "Malvina", "Lianne", "Pearle", "Kizzie", "Kara", "Petula", "Jeanie", "Maria", "Pacey",
+ "Victoria", "Huey", "Toni", "Rose", "Wallis", "Diggory", "Josiah", "Delma", "Keysha", "Channing", "Prue",
+ "Lee", "Ryan", "Sidney", "Valerie", "Clancy", "Ezra", "Gilbert", "Clare", "Laz", "Crofton", "Mike",
+ "Annabella", "Tara", "Eldred", "Arthur", "Jaylon", "Peronel", "Paden", "Dot", "Marian", "Amyas", "Alexus",
+ "Esmond", "Abbie", "Stanley", "Brittani", "Vickie", "Errol", "Kimberlee", "Uland", "Ebenezer", "Howie",
+ "Eveline", "Andrea", "Trish", "Hopkin", "Bryanna", "Temperance", "Valarie", "Femie", "Alix", "Terrell",
+ "Lewin", "Lorrin", "Happy", "Micah", "Rachyl", "Sloan", "Gertrude", "Elizabeth", "Dorris", "Andra", "Bram",
+ "Gary", "Jeannine", "Maurene", "Irene", "Yolonda", "Jonty", "Coleen", "Cecelia", "Chantal", "Stuart",
+ "Caris", "Ros", "Kaleigh", "Mirabelle", "Kolby", "Primrose", "Susannah", "Ginny", "Jinny", "Dolly",
+ "Lettice", "Sonny", "Melva", "Ernest", "Garret", "Reagan", "Trenton", "Gallagher", "Edwin", "Nikolas",
+ "Corrie", "Lynette", "Ettie", "Sly", "Debbi", "Eudora", "Brittney", "Tacey", "Marius", "Anima", "Gordon",
+ "Olivia", "Kortney", "Shantel", "Kolleen", "Nevaeh", "Buck", "Sera", "Liliana", "Aric", "Kalyn", "Mick",
+ "Libby", "Ingram", "Alexandria", "Darleen", "Jacklyn", "Hughie", "Tyler", "Aida", "Ronda", "Deemer",
+ "Taryn", "Laureen", "Samantha", "Dave", "Hardy", "Baldric", "Montgomery", "Gus", "Ellis", "Titania", "Luke",
+ "Chase", "Haidee", "Mayra", "Isabell", "Trinity", "Milo", "Abigail", "Tacita", "Meg", "Hervey", "Natasha",
+ "Sadie", "Holden", "Dee", "Mansel", "Perry", "Randi", "Frederica", "Georgina", "Kolour", "Debbie",
+ "Seraphina", "Elspet", "Julyan", "Raven", "Zavia", "Jarvis", "Jaymes", "Grover", "Cairo", "Alea", "Jordon",
+ "Braxton", "Donny", "Rhoda", "Tonya", "Bee", "Alyssia", "Ashlyn", "Reanna", "Lonny", "Arlene", "Deb",
+ "Jane", "Nikole", "Bettina", "Harrison", "Tamzen", "Arielle", "Adelaide", "Faith", "Bridie", "Wilburn",
+ "Fern", "Nan", "Shaw", "Zeke", "Alan", "Dene", "Gina", "Alexa", "Bailey", "Sal", "Tammy", "Maximillian",
+ "America", "Sylvana", "Fitz", "Mo", "Marissa", "Cass", "Eldon", "Wilfrid", "Tel", "Joann", "Kendra",
+ "Tolly", "Leanne", "Ferdie", "Haven", "Lucas", "Marlee", "Cyrilla", "Red", "Phoenix", "Jazmin", "Carin",
+ "Gena", "Lashonda", "Tucker", "Genette", "Kizzy", "Winifred", "Melody", "Keely", "Kaylyn", "Radcliff",
+ "Lettie", "Foster", "Lyndsey", "Nicholas", "Farley", "Louisa", "Dana", "Dortha", "Francine", "Doran",
+ "Bonita", "Hal", "Sawyer", "Reginald", "Aislin", "Nathan", "Baylee", "Abilene", "Ladonna", "Maurine",
+ "Shelly", "Deandre", "Jasmin", "Roderic", "Tiffany", "Amanda", "Verity", "Wilford", "Gayelord", "Whitney",
+ "Demelza", "Kenton", "Alberta", "Kyra", "Tabitha", "Sampson", "Korey", "Lillian", "Edison", "Clayton",
+ "Steph", "Maya", "Dusty", "Jim", "Ronny", "Adrianne", "Bernard", "Harris", "Kiley", "Alexander", "Kisha",
+ "Ethalyn", "Patience", "Briony", "Indigo", "Aureole", "Makenzie", "Molly", "Sherilyn", "Barry", "Laverne",
+ "Hunter", "Rocky", "Tyreek", "Madalyn", "Phyliss", "Chet", "Beatrice", "Faye", "Lavina", "Madelyn",
+ "Tracey", "Gyles", "Patti", "Carlyn", "Stephanie", "Jackalyn", "Larrie", "Kimmy", "Isolda", "Emelina",
+ "Lis", "Zillah", "Cody", "Sheard", "Rufus", "Paget", "Mae", "Rexanne", "Luvinia", "Tamsen", "Rosanna",
+ "Greig", "Stacia", "Mabelle", "Quianna", "Lotus", "Delice", "Bradford", "Angus", "Cosmo", "Earlene",
+ "Adrian", "Arlie", "Noelle", "Sabella", "Isa", "Adelle", "Innocent", "Kirby", "Trixie", "Kenelm", "Nelda",
+ "Melia", "Kendal", "Dorinda", "Placid", "Linette", "Kam", "Sherisse", "Evan", "Ewart", "Janice", "Linton",
+ "Jacaline", "Charissa", "Douglas", "Aileen", "Kemp", "Oli", "Amethyst", "Rosie", "Nigella", "Sherill",
+ "Anderson", "Alanna", "Eric", "Claudia", "Jennifer", "Boniface", "Harriet", "Vernon", "Lucy", "Shawnee",
+ "Gerard", "Cecily", "Romey", "Randall", "Wade", "Lux", "Dawson", "Gregg", "Kade", "Roxanne", "Melinda",
+ "Rolland", "Rowanne", "Fannie", "Isidore", "Melia", "Harvie", "Salal", "Eleonor", "Jacquette", "Lavone",
+ "Shanika", "Tarquin", "Janet", "Josslyn", "Maegan", "Augusta", "Aubree", "Francene", "Martie", "Marisa",
+ "Tyreek", "Tatianna", "Caleb", "Sheridan", "Nellie", "Barbara", "Wat", "Jayla", "Esmaralda", "Graeme",
+ "Lavena", "Jemima", "Nikolas", "Triston", "Portia", "Kyla", "Marcus", "Raeburn", "Jamison", "Earl", "Wren",
+ "Leighton", "Lagina", "Lucasta", "Dina", "Amaranta", "Jessika", "Claud", "Bernard", "Winifred", "Ebba",
+ "Sammi", "Gall", "Chloe", "Ottoline", "Herbert", "Janice", "Gareth", "Channing", "Caleigh", "Kailee",
+ "Ralphie", "Tamzen", "Quincy", "Beaumont", "Albert", "Jadyn", "Violet", "Luanna", "Moriah", "Humbert",
+ "Jed", "Leona", "Hale", "Mitch", "Marlin", "Nivek", "Darwin", "Dirk", "Liliana", "Meadow", "Bernadine",
+ "Jorie", "Peyton", "Astra", "Roscoe", "Gina", "Lovell", "Jewel", "Romayne", "Rosy", "Imogene", "Margaretta",
+ "Lorinda", "Hopkin", "Bobby", "Flossie", "Bennie", "Horatio", "Jonah", "Lyn", "Deana", "Juliana", "Blanch",
+ "Wright", "Kendal", "Woodrow", "Tania", "Austyn", "Val", "Mona", "Charla", "Rudyard", "Pamela", "Raven",
+ "Zena", "Nicola", "Kaelea", "Conor", "Virgil", "Sonnie", "Goodwin", "Christianne", "Linford", "Myron",
+ "Denton", "Charita", "Brody", "Ginnie", "Harrison", "Jeanine", "Quin", "Isolda", "Zoie", "Pearce", "Margie",
+ "Larrie", "Angelina", "Marcia", "Jessamine", "Delilah", "Dick", "Luana", "Delicia", "Lake", "Luvenia",
+ "Vaughan", "Concordia", "Gayelord", "Cheyenne", "Felix", "Dorris", "Pen", "Kristeen", "Parris", "Everitt",
+ "Josephina", "Amy", "Tommie", "Adrian", "April", "Rosaline", "Zachery", "Trace", "Phoebe", "Jenelle",
+ "Kameron", "Katharine", "Media", "Colton", "Tad", "Quianna", "Kerenza", "Greta", "Luvinia", "Pete", "Tonya",
+ "Beckah", "Barbra", "Jon", "Tetty", "Corey", "Sylvana", "Kizzy", "Korey", "Trey", "Haydee", "Penny",
+ "Mandy", "Panda", "Coline", "Ramsey", "Sukie", "Annabel", "Sarina", "Corbin", "Suzanna", "Rob", "Duana",
+ "Shell", "Jason", "Eddy", "Rube", "Roseann", "Celia", "Brianne", "Nerissa", "Jera", "Humphry", "Ashlynn",
+ "Terrence", "Philippina", "Coreen", "Kolour", "Indiana", "Paget", "Marlyn", "Hester", "Isbel", "Ocean",
+ "Harris", "Leslie", "Vere", "Monroe", "Isabelle", "Bertie", "Clitus", "Dave", "Alethea", "Lessie", "Louiza",
+ "Madlyn", "Garland", "Wolf", "Lalo", "Donny", "Amabel", "Tianna", "Louie", "Susie", "Mackenzie", "Renie",
+ "Tess", "Marmaduke", "Gwendolen", "Bettina", "Beatrix", "Esmund", "Minnie", "Carlie", "Barnabas", "Ruthie",
+ "Honour", "Haylie", "Xavior", "Freddie", "Ericka", "Aretha", "Edie", "Madelina", "Anson", "Tabby",
+ "Derrick", "Jocosa", "Deirdre", "Aislin", "Chastity", "Abigail", "Wynonna", "Zo", "Eldon", "Krystine",
+ "Ghislaine", "Zavia", "Nolene", "Marigold", "Kelley", "Sylvester", "Odell", "George", "Laurene", "Franklyn",
+ "Clarice", "Mo", "Dustin", "Debbi", "Lina", "Tony", "Acacia", "Hettie", "Natalee", "Marcie", "Brittany",
+ "Elnora", "Rachel", "Dawn", "Basil", "Christal", "Anjelica", "Fran", "Tawny", "Delroy", "Tameka", "Lillie",
+ "Ceara", "Deanna", "Deshaun", "Ken", "Bradford", "Justina", "Merle", "Draven", "Gretta", "Harriette",
+ "Webster", "Nathaniel", "Anemone", "Coleen", "Ruth", "Chryssa", "Hortensia", "Saffie", "Deonne", "Leopold",
+ "Harlan", "Lea", "Eppie", "Lucinda", "Tilda", "Fanny", "Titty", "Lockie", "Jepson", "Sherisse", "Maralyn",
+ "Ethel", "Sly", "Ebenezer", "Canute", "Ella", "Freeman", "Reuben", "Olivette", "Nona", "Rik", "Amice",
+ "Kristine", "Kathie", "Jayne", "Jeri", "Mckenna", "Bertram", "Kaylee", "Livia", "Gil", "Wallace", "Maryann",
+ "Keeleigh", "Laurinda", "Doran", "Khloe", "Dakota", "Yaron", "Kimberleigh", "Gytha", "Doris", "Marylyn",
+ "Benton", "Linnette", "Esther", "Jakki", "Rowina", "Marian", "Roselyn", "Norbert", "Maggie", "Caesar",
+ "Phinehas", "Jerry", "Jasmine", "Antonette", "Miriam", "Monna", "Maryvonne", "Jacquetta", "Bernetta",
+ "Napier", "Annie", "Gladwin", "Sheldon", "Aric", "Elouise", "Gawain", "Kristia", "Gabe", "Kyra", "Red",
+ "Tod", "Dudley", "Lorraine", "Ryley", "Sabina", "Poppy", "Leland", "Aileen", "Eglantine", "Alicia", "Jeni",
+ "Addy", "Tiffany", "Geffrey", "Lavina", "Collin", "Clover", "Vin", "Jerome", "Doug", "Vincent", "Florence",
+ "Scarlet", "Celeste", "Desdemona", "Tiphanie", "Kassandra", "Ashton", "Madison", "Art", "Magdalene", "Iona",
+ "Josepha", "Anise", "Ferne", "Derek", "Huffie", "Qiana", "Ysabel", "Tami", "Shannah", "Xavier", "Willard",
+ "Winthrop", "Vickie", "Maura", "Placid", "Tiara", "Reggie", "Elissa", "Isa", "Chrysanta", "Jeff", "Bessie",
+ "Terri", "Amilia", "Brett", "Daniella", "Damion", "Carolina", "Maximillian", "Travers", "Benjamin", "Oprah",
+ "Darcy", "Yolanda", "Nicolina", "Crofton", "Jarrett", "Kaitlin", "Shauna", "Keren", "Bevis", "Kalysta",
+ "Sharron", "Alyssa", "Blythe", "Zelma", "Caelie", "Norwood", "Billie", "Patrick", "Gary", "Cambria",
+ "Tylar", "Mason", "Helen", "Melyssa", "Gene", "Gilberta", "Carter", "Herbie", "Harmonie", "Leola",
+ "Eugenia", "Clint", "Pauletta", "Edwyna", "Georgina", "Teal", "Harper", "Izzy", "Dillon", "Kezia",
+ "Evangeline", "Colene", "Madelaine", "Zilla", "Rudy", "Dottie", "Caris", "Morton", "Marge", "Tacey",
+ "Parker", "Troy", "Liza", "Lewin", "Tracie", "Justine", "Dallas", "Linden", "Ray", "Loretta", "Teri",
+ "Elvis", "Diane", "Julianna", "Manfred", "Denise", "Eireen", "Ann", "Kenith", "Linwood", "Kathlyn",
+ "Bernice", "Shelley", "Oswald", "Amedeus", "Homer", "Tanzi", "Ted", "Ralphina", "Hyacinth", "Lotus",
+ "Matthias", "Arlette", "Clark", "Cecil", "Elspeth", "Alvena", "Noah", "Millard", "Brenden", "Cole",
+ "Philipa", "Nina", "Thelma", "Iantha", "Reid", "Jefferson", "Meg", "Elsie", "Shirlee", "Nathan", "Nancy",
+ "Simona", "Racheal", "Carin", "Emory", "Delice", "Kristi", "Karaugh", "Kaety", "Tilly", "Em", "Alanis",
+ "Darrin", "Jerrie", "Hollis", "Cary", "Marly", "Carita", "Jody", "Farley", "Hervey", "Rosalin", "Cuthbert",
+ "Stewart", "Jodene", "Caileigh", "Briscoe", "Dolores", "Sheree", "Eustace", "Nigel", "Detta", "Barret",
+ "Rowland", "Kenny", "Githa", "Zoey", "Adela", "Petronella", "Opal", "Coleman", "Niles", "Cyril", "Dona",
+ "Alberic", "Allannah", "Jules", "Avalon", "Hadley", "Thomas", "Renita", "Calanthe", "Heron", "Shawnda",
+ "Chet", "Malina", "Manny", "Rina", "Frieda", "Eveleen", "Deshawn", "Amos", "Raelene", "Paige", "Molly",
+ "Nannie", "Ileen", "Brendon", "Milford", "Unice", "Rebeccah", "Caedmon", "Gae", "Doreen", "Vivian", "Louis",
+ "Raphael", "Vergil", "Lise", "Glenn", "Karyn", "Terance", "Reina", "Jake", "Gordon", "Wisdom", "Isiah",
+ "Gervase", "Fern", "Marylou", "Roddy", "Justy", "Derick", "Shantelle", "Adam", "Chantel", "Madoline",
+ "Emmerson", "Lexie", "Mickey", "Stephen", "Dane", "Stacee", "Elwin", "Tracey", "Alexandra", "Ricky", "Ian",
+ "Kasey", "Rita", "Alanna", "Georgene", "Deon", "Zavier", "Ophelia", "Deforest", "Lowell", "Zubin", "Hardy",
+ "Osmund", "Tabatha", "Debby", "Katlyn", "Tallulah", "Priscilla", "Braden", "Wil", "Keziah", "Jen", "Aggie",
+ "Korbin", "Lemoine", "Barnaby", "Tranter", "Goldie", "Roderick", "Trina", "Emery", "Pris", "Sidony",
+ "Adelle", "Tate", "Wilf", "Zola", "Brande", "Chris", "Calanthia", "Lilly", "Kaycee", "Lashonda", "Jasmin",
+ "Elijah", "Shantel", "Simon", "Rosalind", "Jarod", "Kaylie", "Corrine", "Joselyn", "Archibald",
+ "Mariabella", "Winton", "Merlin", "Chad", "Ursula", "Kristopher", "Hewie", "Adrianna", "Lyndsay", "Jasmyn",
+ "Tim", "Evette", "Margaret", "Samson", "Bronte", "Terence", "Leila", "Candice", "Tori", "Jamey",
+ "Coriander", "Conrad", "Floyd", "Karen", "Lorin", "Maximilian", "Cairo", "Emily", "Yasmin", "Karolyn",
+ "Bryan", "Lanny", "Kimberly", "Rick", "Chaz", "Krystle", "Lyric", "Laura", "Garrick", "Flip", "Monty",
+ "Brendan", "Ermintrude", "Rayner", "Merla", "Titus", "Marva", "Patricia", "Leone", "Tracy", "Jaqueline",
+ "Hallam", "Delores", "Cressida", "Carlyle", "Leann", "Kelcey", "Laurence", "Ryan", "Reynold", "Mark",
+ "Collyn", "Audie", "Sammy", "Ellery", "Sallie", "Pamelia", "Adolph", "Lydia", "Titania", "Ron", "Bridger",
+ "Aline", "Read", "Kelleigh", "Weldon", "Irving", "Garey", "Diggory", "Evander", "Kylee", "Deidre", "Ormond",
+ "Laurine", "Reannon", "Arline", "Pat"
+
+ };
+
+ public static String[] jargon = { "wireless", "signal", "network", "3G", "plan", "touch-screen", "customer-service",
+ "reachability", "voice-command", "shortcut-menu", "customization", "platform", "speed", "voice-clarity",
+ "voicemail-service" };
+
+ public static String[] vendors = { "at&t", "verizon", "t-mobile", "sprint", "motorola", "samsung", "iphone" };
+
+ public static String[] org_list = { "Latsonity", "ganjalax", "Zuncan", "Lexitechno", "Hot-tech", "subtam",
+ "Coneflex", "Ganjatax", "physcane", "Tranzap", "Qvohouse", "Zununoing", "jaydax", "Keytech", "goldendexon",
+ "Villa-tech", "Trustbam", "Newcom", "Voltlane", "Ontohothex", "Ranhotfan", "Alphadax", "Transhigh",
+ "kin-ron", "Doublezone", "Solophase", "Vivaace", "silfind", "Basecone", "sonstreet", "Freshfix",
+ "Techitechi", "Kanelectrics", "linedexon", "Goldcity", "Newfase", "Technohow", "Zimcone", "Salthex",
+ "U-ron", "Solfix", "whitestreet", "Xx-technology", "Hexviafind", "over-it", "Strongtone", "Tripplelane",
+ "geomedia", "Scotcity", "Inchex", "Vaiatech", "Striptaxon", "Hatcom", "tresline", "Sanjodax", "freshdox",
+ "Sumlane", "Quadlane", "Newphase", "overtech", "Voltbam", "Icerunin", "Fixdintex", "Hexsanhex", "Statcode",
+ "Greencare", "U-electrics", "Zamcorporation", "Ontotanin", "Tanzimcare", "Groovetex", "Ganjastrip",
+ "Redelectronics", "Dandamace", "Whitemedia", "strongex", "Streettax", "highfax", "Mathtech", "Xx-drill",
+ "Sublamdox", "Unijobam", "Rungozoom", "Fixelectrics", "Villa-dox", "Ransaofan", "Plexlane", "itlab",
+ "Lexicone", "Fax-fax", "Viatechi", "Inchdox", "Kongreen", "Doncare", "Y-geohex", "Opeelectronics",
+ "Medflex", "Dancode", "Roundhex", "Labzatron", "Newhotplus", "Sancone", "Ronholdings", "Quoline",
+ "zoomplus", "Fix-touch", "Codetechno", "Tanzumbam", "Indiex", "Canline" };
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/generator/TweetGenerator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/generator/TweetGenerator.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/generator/TweetGenerator.java
new file mode 100644
index 0000000..c7965ef
--- /dev/null
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/generator/TweetGenerator.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.generator;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.asterix.external.generator.DataGenerator.InitializationInfo;
+import org.apache.asterix.external.generator.DataGenerator.TweetMessage;
+import org.apache.asterix.external.generator.DataGenerator.TweetMessageIterator;
+
+public class TweetGenerator {
+ private static final Logger LOGGER = Logger.getLogger(TweetGenerator.class.getName());
+
+ public static final String KEY_DURATION = "duration";
+ public static final String KEY_TPS = "tps";
+ public static final String KEY_VERBOSE = "verbose";
+ public static final String KEY_FIELDS = "fields";
+ public static final int INFINITY = 0;
+
+ private static final int DEFAULT_DURATION = INFINITY;
+
+ private final int duration;
+ private TweetMessageIterator tweetIterator = null;
+ private final int partition;
+ private long tweetCount = 0;
+ private int frameTweetCount = 0;
+ private int numFlushedTweets = 0;
+ private DataGenerator dataGenerator = null;
+ private final ByteBuffer outputBuffer = ByteBuffer.allocate(32 * 1024);
+ private final String[] fields;
+ private final List<OutputStream> subscribers;
+ private final Object lock = new Object();
+ private final List<OutputStream> subscribersForRemoval = new ArrayList<OutputStream>();
+
+ public TweetGenerator(Map<String, String> configuration, int partition) {
+ this.partition = partition;
+ String value = configuration.get(KEY_DURATION);
+ this.duration = value != null ? Integer.parseInt(value) : DEFAULT_DURATION;
+ dataGenerator = new DataGenerator(new InitializationInfo());
+ tweetIterator = dataGenerator.new TweetMessageIterator(duration);
+ this.fields = configuration.get(KEY_FIELDS) != null ? configuration.get(KEY_FIELDS).split(",") : null;
+ this.subscribers = new ArrayList<OutputStream>();
+ }
+
+ private void writeTweetString(TweetMessage tweetMessage) throws IOException {
+ String tweet = tweetMessage.getAdmEquivalent(fields) + "\n";
+ tweetCount++;
+ byte[] b = tweet.getBytes();
+ if ((outputBuffer.position() + b.length) > outputBuffer.limit()) {
+ flush();
+ numFlushedTweets += frameTweetCount;
+ frameTweetCount = 0;
+ outputBuffer.put(b);
+ } else {
+ outputBuffer.put(b);
+ }
+ frameTweetCount++;
+ }
+
+ private void flush() throws IOException {
+ outputBuffer.flip();
+ synchronized (lock) {
+ for (OutputStream os : subscribers) {
+ try {
+ os.write(outputBuffer.array(), 0, outputBuffer.limit());
+ } catch (Exception e) {
+ subscribersForRemoval.add(os);
+ }
+ }
+ if (!subscribersForRemoval.isEmpty()) {
+ subscribers.removeAll(subscribersForRemoval);
+ subscribersForRemoval.clear();
+ }
+ }
+ outputBuffer.position(0);
+ outputBuffer.limit(32 * 1024);
+ }
+
+ public boolean generateNextBatch(int numTweets) throws Exception {
+ boolean moreData = tweetIterator.hasNext();
+ if (!moreData) {
+ if (outputBuffer.position() > 0) {
+ flush();
+ }
+ if (LOGGER.isLoggable(Level.INFO)) {
+ LOGGER.info("Reached end of batch. Tweet Count: [" + partition + "]" + tweetCount);
+ }
+ return false;
+ } else {
+ int count = 0;
+ while (count < numTweets) {
+ writeTweetString(tweetIterator.next());
+ count++;
+ }
+ return true;
+ }
+ }
+
+ public int getNumFlushedTweets() {
+ return numFlushedTweets;
+ }
+
+ public void registerSubscriber(OutputStream os) {
+ synchronized (lock) {
+ subscribers.add(os);
+ }
+ }
+
+ public void deregisterSubscribers(OutputStream os) {
+ synchronized (lock) {
+ subscribers.remove(os);
+ }
+ }
+
+ public void close() throws IOException {
+ synchronized (lock) {
+ for (OutputStream os : subscribers) {
+ os.close();
+ }
+ }
+ }
+
+ public boolean isSubscribed() {
+ return !subscribers.isEmpty();
+ }
+
+ public long getTweetCount() {
+ return tweetCount;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/stream/TwitterFirehoseInputStream.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/stream/TwitterFirehoseInputStream.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/stream/TwitterFirehoseInputStream.java
new file mode 100644
index 0000000..dd98691
--- /dev/null
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/stream/TwitterFirehoseInputStream.java
@@ -0,0 +1,158 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.input.stream;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.asterix.external.api.AsterixInputStream;
+import org.apache.asterix.external.generator.TweetGenerator;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+
+public class TwitterFirehoseInputStream extends AsterixInputStream {
+
+ private static final Logger LOGGER = Logger.getLogger(TwitterFirehoseInputStream.class.getName());
+ private final ExecutorService executorService;
+ private final PipedOutputStream outputStream;
+ private final PipedInputStream inputStream;
+ private final DataProvider dataProvider;
+ private boolean started;
+
+ public TwitterFirehoseInputStream(Map<String, String> configuration, IHyracksTaskContext ctx, int partition)
+ throws IOException {
+ executorService = Executors.newCachedThreadPool();
+ outputStream = new PipedOutputStream();
+ inputStream = new PipedInputStream(outputStream);
+ dataProvider = new DataProvider(configuration, partition, outputStream);
+ started = false;
+ }
+
+ @Override
+ public boolean stop() throws IOException {
+ dataProvider.stop();
+ return true;
+ }
+
+ public synchronized void start() {
+ if (!started) {
+ executorService.execute(dataProvider);
+ started = true;
+ }
+ }
+
+ @Override
+ public int read() throws IOException {
+ if (!started) {
+ start();
+ }
+ return inputStream.read();
+ }
+
+ @Override
+ public int read(byte b[], int off, int len) throws IOException {
+ if (!started) {
+ start();
+ }
+ return inputStream.read(b, off, len);
+ }
+
+ @Override
+ public boolean handleException(Throwable th) {
+ return false;
+ }
+
+ private static class DataProvider implements Runnable {
+
+ public static final String KEY_MODE = "mode";
+
+ private final TweetGenerator tweetGenerator;
+ private boolean continuePush = true;
+ private int batchSize;
+ private final Mode mode;
+ private final OutputStream os;
+
+ public static enum Mode {
+ AGGRESSIVE,
+ CONTROLLED
+ }
+
+ public DataProvider(Map<String, String> configuration, int partition, OutputStream os) {
+ this.tweetGenerator = new TweetGenerator(configuration, partition);
+ this.tweetGenerator.registerSubscriber(os);
+ this.os = os;
+ mode = configuration.get(KEY_MODE) != null ? Mode.valueOf(configuration.get(KEY_MODE).toUpperCase())
+ : Mode.AGGRESSIVE;
+ switch (mode) {
+ case CONTROLLED:
+ String tpsValue = configuration.get(TweetGenerator.KEY_TPS);
+ if (tpsValue == null) {
+ throw new IllegalArgumentException("TPS value not configured. use tps=<value>");
+ }
+ batchSize = Integer.parseInt(tpsValue);
+ break;
+ case AGGRESSIVE:
+ batchSize = 5000;
+ break;
+ }
+ }
+
+ @Override
+ public void run() {
+ boolean moreData = true;
+ long startBatch;
+ long endBatch;
+ while (true) {
+ try {
+ while (moreData && continuePush) {
+ switch (mode) {
+ case AGGRESSIVE:
+ moreData = tweetGenerator.generateNextBatch(batchSize);
+ break;
+ case CONTROLLED:
+ startBatch = System.currentTimeMillis();
+ moreData = tweetGenerator.generateNextBatch(batchSize);
+ endBatch = System.currentTimeMillis();
+ if ((endBatch - startBatch) < 1000) {
+ Thread.sleep(1000 - (endBatch - startBatch));
+ }
+ break;
+ }
+ }
+ os.close();
+ break;
+ } catch (Exception e) {
+ if (LOGGER.isLoggable(Level.WARNING)) {
+ LOGGER.warning("Exception in adapter " + e.getMessage());
+ }
+ }
+ }
+ }
+
+ public void stop() {
+ continuePush = false;
+ }
+ }
+}
[4/8] asterixdb git commit: Move Twitter Firehose Datasource to Test
Source Folder
Posted by mb...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/DataGeneratorForSpatialIndexEvaluation.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/DataGeneratorForSpatialIndexEvaluation.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/DataGeneratorForSpatialIndexEvaluation.java
deleted file mode 100644
index 93ffe59..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/DataGeneratorForSpatialIndexEvaluation.java
+++ /dev/null
@@ -1,1341 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.asterix.tools.external.data;
-
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.nio.CharBuffer;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Random;
-
-import org.apache.asterix.external.util.DataGenerator;
-
-public class DataGeneratorForSpatialIndexEvaluation {
-
- private static final String DUMMY_SIZE_ADJUSTER = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
-
- private RandomDateGenerator randDateGen;
-
- private RandomNameGenerator randNameGen;
-
- private RandomMessageGenerator randMessageGen;
-
- private RandomLocationGenerator randLocationGen;
-
- private LocationGeneratorFromOpenStreetMapData locationGenFromOpenStreetMapData;
-
- private Random random = new Random();
-
- private TwitterUser twUser = new TwitterUser();
-
- private TweetMessage twMessage = new TweetMessage();
-
- public DataGeneratorForSpatialIndexEvaluation(InitializationInfo info) {
- initialize(info, null, 0);
- }
-
- public DataGeneratorForSpatialIndexEvaluation(InitializationInfo info, String openStreetMapFilePath,
- int locationSampleInterval) {
- initialize(info, openStreetMapFilePath, locationSampleInterval);
- }
-
- public class TweetMessageIterator implements Iterator<TweetMessage> {
-
- private int duration;
- private final GULongIDGenerator idGen;
- private long startTime = 0;
-
- public TweetMessageIterator(int duration, GULongIDGenerator idGen) {
- this.duration = duration;
- this.idGen = idGen;
- this.startTime = System.currentTimeMillis();
- }
-
- @Override
- public boolean hasNext() {
- if (duration == 0) {
- return true;
- }
- return System.currentTimeMillis() - startTime <= duration * 1000;
- }
-
- @Override
- public TweetMessage next() {
- TweetMessage msg = null;
- getTwitterUser(null);
- Message message = randMessageGen.getNextRandomMessage();
- Point location = randLocationGen != null ? randLocationGen.getRandomPoint()
- : locationGenFromOpenStreetMapData.getNextPoint();
- DateTime sendTime = randDateGen.getNextRandomDatetime();
- int btreeExtraFieldKey = random.nextInt();
- if (btreeExtraFieldKey == Integer.MIN_VALUE) {
- btreeExtraFieldKey = Integer.MIN_VALUE + 1;
- }
- twMessage.reset(idGen.getNextULong(), twUser, location, sendTime, message.getReferredTopics(), message,
- btreeExtraFieldKey, DUMMY_SIZE_ADJUSTER);
- msg = twMessage;
- return msg;
- }
-
- @Override
- public void remove() {
- // TODO Auto-generated method stub
- }
-
- public void resetDuration(int duration) {
- this.duration = duration;
- startTime = System.currentTimeMillis();
- }
-
- }
-
- public static class InitializationInfo {
- public Date startDate = new Date(1, 1, 2005);
- public Date endDate = new Date(8, 20, 2012);
- public String[] lastNames = DataGenerator.lastNames;
- public String[] firstNames = DataGenerator.firstNames;
- public String[] vendors = DataGenerator.vendors;
- public String[] jargon = DataGenerator.jargon;
- public String[] org_list = DataGenerator.org_list;
- }
-
- public void initialize(InitializationInfo info, String openStreetMapFilePath, int locationSampleInterval) {
- randDateGen = new RandomDateGenerator(info.startDate, info.endDate);
- randNameGen = new RandomNameGenerator(info.firstNames, info.lastNames);
- if (openStreetMapFilePath == null) {
- randLocationGen = new RandomLocationGenerator(24, 49, 66, 98);
- locationGenFromOpenStreetMapData = null;
- } else {
- locationGenFromOpenStreetMapData = new LocationGeneratorFromOpenStreetMapData();
- locationGenFromOpenStreetMapData.intialize(openStreetMapFilePath, locationSampleInterval);
- randLocationGen = null;
- }
- randMessageGen = new RandomMessageGenerator(info.vendors, info.jargon);
- }
-
- public void getTwitterUser(String usernameSuffix) {
- String suggestedName = randNameGen.getRandomName();
- String[] nameComponents = suggestedName.split(" ");
- String screenName = nameComponents[0] + nameComponents[1] + randNameGen.getRandomNameSuffix();
- String name = suggestedName;
- if (usernameSuffix != null) {
- name = name + usernameSuffix;
- }
- int numFriends = random.nextInt((100)); // draw from Zipfian
- int statusesCount = random.nextInt(500); // draw from Zipfian
- int followersCount = random.nextInt((200));
- twUser.reset(screenName, numFriends, statusesCount, name, followersCount);
- }
-
- public static class RandomDateGenerator {
-
- private final Date startDate;
- private final Date endDate;
- private final Random random = new Random();
- private final int yearDifference;
- private Date workingDate;
- private Date recentDate;
- private DateTime dateTime;
-
- public RandomDateGenerator(Date startDate, Date endDate) {
- this.startDate = startDate;
- this.endDate = endDate;
- this.yearDifference = endDate.getYear() - startDate.getYear() + 1;
- this.workingDate = new Date();
- this.recentDate = new Date();
- this.dateTime = new DateTime();
- }
-
- public Date getStartDate() {
- return startDate;
- }
-
- public Date getEndDate() {
- return endDate;
- }
-
- public Date getNextRandomDate() {
- int year = random.nextInt(yearDifference) + startDate.getYear();
- int month;
- int day;
- if (year == endDate.getYear()) {
- month = random.nextInt(endDate.getMonth()) + 1;
- if (month == endDate.getMonth()) {
- day = random.nextInt(endDate.getDay()) + 1;
- } else {
- day = random.nextInt(28) + 1;
- }
- } else {
- month = random.nextInt(12) + 1;
- day = random.nextInt(28) + 1;
- }
- workingDate.reset(month, day, year);
- return workingDate;
- }
-
- public DateTime getNextRandomDatetime() {
- Date randomDate = getNextRandomDate();
- dateTime.reset(randomDate);
- return dateTime;
- }
-
- public Date getNextRecentDate(Date date) {
- int year = date.getYear()
- + (date.getYear() == endDate.getYear() ? 0 : random.nextInt(endDate.getYear() - date.getYear()));
- int month = (year == endDate.getYear())
- ? date.getMonth() == endDate.getMonth() ? (endDate.getMonth())
- : (date.getMonth() + random.nextInt(endDate.getMonth() - date.getMonth()))
- : random.nextInt(12) + 1;
-
- int day = (year == endDate.getYear())
- ? month == endDate.getMonth()
- ? date.getDay() == endDate.getDay() ? endDate.getDay()
- : date.getDay() + random.nextInt(endDate.getDay() - date.getDay())
- : random.nextInt(28) + 1
- : random.nextInt(28) + 1;
- recentDate.reset(month, day, year);
- return recentDate;
- }
-
- }
-
- public static class DateTime extends Date {
-
- private String hour = "10";
- private String min = "10";
- private String sec = "00";
-
- public DateTime(int month, int day, int year, String hour, String min, String sec) {
- super(month, day, year);
- this.hour = hour;
- this.min = min;
- this.sec = sec;
- }
-
- public DateTime() {
- }
-
- public void reset(int month, int day, int year, String hour, String min, String sec) {
- super.setDay(month);
- super.setDay(day);
- super.setYear(year);
- this.hour = hour;
- this.min = min;
- this.sec = sec;
- }
-
- public DateTime(Date date) {
- super(date.getMonth(), date.getDay(), date.getYear());
- }
-
- public void reset(Date date) {
- reset(date.getMonth(), date.getDay(), date.getYear());
- }
-
- public DateTime(Date date, int hour, int min, int sec) {
- super(date.getMonth(), date.getDay(), date.getYear());
- this.hour = (hour < 10) ? "0" : "" + hour;
- this.min = (min < 10) ? "0" : "" + min;
- this.sec = (sec < 10) ? "0" : "" + sec;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("datetime");
- builder.append("(\"");
- builder.append(super.getYear());
- builder.append("-");
- builder.append(super.getMonth() < 10 ? "0" + super.getMonth() : super.getMonth());
- builder.append("-");
- builder.append(super.getDay() < 10 ? "0" + super.getDay() : super.getDay());
- builder.append("T");
- builder.append(hour + ":" + min + ":" + sec);
- builder.append("\")");
- return builder.toString();
- }
- }
-
- public static class Message {
-
- private char[] message = new char[500];
- private List<String> referredTopics;
- private int length;
-
- public Message(char[] m, List<String> referredTopics) {
- System.arraycopy(m, 0, message, 0, m.length);
- length = m.length;
- this.referredTopics = referredTopics;
- }
-
- public Message() {
- referredTopics = new ArrayList<String>();
- length = 0;
- }
-
- public List<String> getReferredTopics() {
- return referredTopics;
- }
-
- public void reset(char[] m, int offset, int length, List<String> referredTopics) {
- System.arraycopy(m, offset, message, 0, length);
- this.length = length;
- this.referredTopics = referredTopics;
- }
-
- public int getLength() {
- return length;
- }
-
- public char charAt(int index) {
- return message[index];
- }
-
- }
-
- public static class Point {
-
- private float latitude;
- private float longitude;
-
- public float getLatitude() {
- return latitude;
- }
-
- public float getLongitude() {
- return longitude;
- }
-
- public Point(float latitude, float longitude) {
- this.latitude = latitude;
- this.longitude = longitude;
- }
-
- public void reset(float latitude, float longitude) {
- this.latitude = latitude;
- this.longitude = longitude;
- }
-
- public Point() {
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("point(\"" + latitude + "," + longitude + "\")");
- return builder.toString();
- }
- }
-
- public static class RandomNameGenerator {
-
- private String[] firstNames;
- private String[] lastNames;
-
- private final Random random = new Random();
-
- private final String[] connectors = new String[] { "_", "#", "$", "@" };
-
- public RandomNameGenerator(String[] firstNames, String[] lastNames) {
- this.firstNames = firstNames;
- this.lastNames = lastNames;
- }
-
- public String getRandomName() {
- String name;
- name = getSuggestedName();
- return name;
-
- }
-
- private String getSuggestedName() {
- int firstNameIndex = random.nextInt(firstNames.length);
- int lastNameIndex = random.nextInt(lastNames.length);
- String suggestedName = firstNames[firstNameIndex] + " " + lastNames[lastNameIndex];
- return suggestedName;
- }
-
- public String getRandomNameSuffix() {
- return connectors[random.nextInt(connectors.length)] + random.nextInt(1000);
- }
- }
-
- public static class RandomMessageGenerator {
-
- private final MessageTemplate messageTemplate;
-
- public RandomMessageGenerator(String[] vendors, String[] jargon) {
- List<String> vendorList = new ArrayList<String>();
- for (String v : vendors) {
- vendorList.add(v);
- }
- List<String> jargonList = new ArrayList<String>();
- for (String j : jargon) {
- jargonList.add(j);
- }
- this.messageTemplate = new MessageTemplate(vendorList, jargonList);
- }
-
- public Message getNextRandomMessage() {
- return messageTemplate.getNextMessage();
- }
- }
-
- public static class AbstractMessageTemplate {
-
- protected final Random random = new Random();
-
- protected String[] positiveVerbs = new String[] { "like", "love" };
- protected String[] negativeVerbs = new String[] { "dislike", "hate", "can't stand" };
-
- protected String[] negativeAdjectives = new String[] { "horrible", "bad", "terrible", "OMG" };
- protected String[] postiveAdjectives = new String[] { "good", "awesome", "amazing", "mind-blowing" };
-
- protected String[] otherWords = new String[] { "the", "its" };
- }
-
- public static class MessageTemplate extends AbstractMessageTemplate {
-
- private List<String> vendors;
- private List<String> jargon;
- private CharBuffer buffer;
- private List<String> referredTopics;
- private Message message = new Message();
-
- public MessageTemplate(List<String> vendors, List<String> jargon) {
- this.vendors = vendors;
- this.jargon = jargon;
- buffer = CharBuffer.allocate(2500);
- referredTopics = new ArrayList<String>();
- }
-
- public Message getNextMessage() {
- buffer.position(0);
- buffer.limit(2500);
- referredTopics.clear();
- boolean isPositive = random.nextBoolean();
- String[] verbArray = isPositive ? positiveVerbs : negativeVerbs;
- String[] adjectiveArray = isPositive ? postiveAdjectives : negativeAdjectives;
- String verb = verbArray[random.nextInt(verbArray.length)];
- String adjective = adjectiveArray[random.nextInt(adjectiveArray.length)];
-
- buffer.put(" ");
- buffer.put(verb);
- buffer.put(" ");
- String vendor = vendors.get(random.nextInt(vendors.size()));
- referredTopics.add(vendor);
- buffer.append(vendor);
- buffer.append(" ");
- buffer.append(otherWords[random.nextInt(otherWords.length)]);
- buffer.append(" ");
- String jargonTerm = jargon.get(random.nextInt(jargon.size()));
- referredTopics.add(jargonTerm);
- buffer.append(jargonTerm);
- buffer.append(" is ");
- buffer.append(adjective);
- if (random.nextBoolean()) {
- buffer.append(isPositive ? ":)" : ":(");
- }
-
- buffer.flip();
- message.reset(buffer.array(), 0, buffer.limit(), referredTopics);
- return message;
- }
- }
-
- public static class RandomUtil {
-
- public static Random random = new Random();
-
- public static int[] getKFromN(int k, int n) {
- int[] result = new int[k];
- int cnt = 0;
- HashSet<Integer> values = new HashSet<Integer>();
- while (cnt < k) {
- int val = random.nextInt(n + 1);
- if (values.contains(val)) {
- continue;
- }
-
- result[cnt++] = val;
- values.add(val);
- }
- return result;
- }
- }
-
- public static class RandomLocationGenerator {
-
- private Random random = new Random();
-
- private final int beginLat;
- private final int endLat;
- private final int beginLong;
- private final int endLong;
-
- private Point point;
-
- public RandomLocationGenerator(int beginLat, int endLat, int beginLong, int endLong) {
- this.beginLat = beginLat;
- this.endLat = endLat;
- this.beginLong = beginLong;
- this.endLong = endLong;
- this.point = new Point();
- }
-
- public Point getRandomPoint() {
- int latMajor = beginLat + random.nextInt(endLat - beginLat);
- int latMinor = random.nextInt(100);
- float latitude = latMajor + ((float) latMinor) / 100;
-
- int longMajor = beginLong + random.nextInt(endLong - beginLong);
- int longMinor = random.nextInt(100);
- float longitude = longMajor + ((float) longMinor) / 100;
-
- point.reset(latitude, longitude);
- return point;
- }
-
- }
-
- public static class LocationGeneratorFromOpenStreetMapData {
- /**
- * the source of gps data:
- * https://blog.openstreetmap.org/2012/04/01/bulk-gps-point-data/
- */
- private String openStreetMapFilePath;
- private long sampleInterval;
- private long lineCount = 0;
- private BufferedReader br;
- private String line;
- private String strPoints[] = null;
- private StringBuilder sb = new StringBuilder();
- private Point point = new Point();
- private float[] floatPoint = new float[2];
-
- public void intialize(String openStreetMapFilePath, int sampleInterval) {
- this.openStreetMapFilePath = openStreetMapFilePath;
- this.sampleInterval = sampleInterval;
- try {
- br = new BufferedReader(new FileReader(openStreetMapFilePath));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- throw new IllegalStateException(e);
- }
- }
-
- public Point getNextPoint() {
- try {
- while (true) {
- if ((line = br.readLine()) == null) {
- br = new BufferedReader(new FileReader(openStreetMapFilePath));
- line = br.readLine(); //can't be null
- }
- if (lineCount++ % sampleInterval != 0) {
- continue;
- }
- sb.setLength(0);
- strPoints = line.split(",");
- if (strPoints.length != 2) {
- //ignore invalid point
- continue;
- } else {
- break;
- }
- }
- if (line == null) {
- //roll over the data from the same file.
- br.close();
- br = null;
- lineCount = 0;
- br = new BufferedReader(new FileReader(openStreetMapFilePath));
- while ((line = br.readLine()) != null) {
- if (lineCount++ % sampleInterval != 0) {
- continue;
- }
- sb.setLength(0);
- strPoints = line.split(",");
- if (strPoints.length != 2) {
- //ignore invalid point
- continue;
- } else {
- break;
- }
- }
- }
- floatPoint[0] = Float.parseFloat(strPoints[0]) / 10000000; //latitude (y value)
- floatPoint[1] = Float.parseFloat(strPoints[1]) / 10000000; //longitude (x value)
- point.reset(floatPoint[1], floatPoint[0]);
- } catch (Exception e) {
- e.printStackTrace();
- throw new IllegalStateException(e);
- }
- return point;
- }
-
- @Override
- public void finalize() {
- if (br != null) {
- try {
- br.close();
- } catch (IOException e) {
- e.printStackTrace();
- throw new IllegalStateException(e);
- }
- }
- }
- }
-
- public static class TweetMessage {
-
- private static int NUM_BTREE_EXTRA_FIELDS = 8;
-
- private long tweetid;
- private TwitterUser user;
- private Point senderLocation;
- private DateTime sendTime;
- private List<String> referredTopics;
- private Message messageText;
- private int[] btreeExtraFields;
- private String dummySizeAdjuster;
-
- public TweetMessage() {
- this.btreeExtraFields = new int[NUM_BTREE_EXTRA_FIELDS];
- }
-
- public TweetMessage(long tweetid, TwitterUser user, Point senderLocation, DateTime sendTime,
- List<String> referredTopics, Message messageText, int btreeExtraField, String dummySizeAdjuster) {
- this.tweetid = tweetid;
- this.user = user;
- this.senderLocation = senderLocation;
- this.sendTime = sendTime;
- this.referredTopics = referredTopics;
- this.messageText = messageText;
- this.btreeExtraFields = new int[NUM_BTREE_EXTRA_FIELDS];
- setBtreeExtraFields(btreeExtraField);
- this.dummySizeAdjuster = dummySizeAdjuster;
- }
-
- private void setBtreeExtraFields(int fVal) {
- for (int i = 0; i < btreeExtraFields.length; ++i) {
- btreeExtraFields[i] = fVal;
- }
- }
-
- public void reset(long tweetid, TwitterUser user, Point senderLocation, DateTime sendTime,
- List<String> referredTopics, Message messageText, int btreeExtraField, String dummySizeAdjuster) {
- this.tweetid = tweetid;
- this.user = user;
- this.senderLocation = senderLocation;
- this.sendTime = sendTime;
- this.referredTopics = referredTopics;
- this.messageText = messageText;
- setBtreeExtraFields(btreeExtraField);
- this.dummySizeAdjuster = dummySizeAdjuster;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("{");
- builder.append("\"tweetid\":");
- builder.append("int64(\"" + tweetid + "\")");
- builder.append(",");
- builder.append("\"user\":");
- builder.append(user);
- builder.append(",");
- builder.append("\"sender-location\":");
- builder.append(senderLocation);
- builder.append(",");
- builder.append("\"send-time\":");
- builder.append(sendTime);
- builder.append(",");
- builder.append("\"referred-topics\":");
- builder.append("{{");
- for (String topic : referredTopics) {
- builder.append("\"" + topic + "\"");
- builder.append(",");
- }
- if (referredTopics.size() > 0) {
- builder.deleteCharAt(builder.lastIndexOf(","));
- }
- builder.append("}}");
- builder.append(",");
- builder.append("\"message-text\":");
- builder.append("\"");
- for (int i = 0; i < messageText.getLength(); i++) {
- builder.append(messageText.charAt(i));
- }
- builder.append("\"");
- builder.append(",");
- for (int i = 0; i < btreeExtraFields.length; ++i) {
- builder.append("\"btree-extra-field" + (i + 1) + "\":");
- builder.append(btreeExtraFields[i]);
- if (i != btreeExtraFields.length - 1) {
- builder.append(",");
- }
- }
- builder.append(",");
- builder.append("\"dummy-size-adjuster\":");
- builder.append("\"");
- builder.append(dummySizeAdjuster);
- builder.append("\"");
- builder.append("}");
- return new String(builder);
- }
-
- public long getTweetid() {
- return tweetid;
- }
-
- public void setTweetid(long tweetid) {
- this.tweetid = tweetid;
- }
-
- public TwitterUser getUser() {
- return user;
- }
-
- public void setUser(TwitterUser user) {
- this.user = user;
- }
-
- public Point getSenderLocation() {
- return senderLocation;
- }
-
- public void setSenderLocation(Point senderLocation) {
- this.senderLocation = senderLocation;
- }
-
- public DateTime getSendTime() {
- return sendTime;
- }
-
- public void setSendTime(DateTime sendTime) {
- this.sendTime = sendTime;
- }
-
- public List<String> getReferredTopics() {
- return referredTopics;
- }
-
- public void setReferredTopics(List<String> referredTopics) {
- this.referredTopics = referredTopics;
- }
-
- public Message getMessageText() {
- return messageText;
- }
-
- public void setMessageText(Message messageText) {
- this.messageText = messageText;
- }
-
- }
-
- public static class TwitterUser {
-
- private String screenName;
- private String lang = "en";
- private int friendsCount;
- private int statusesCount;
- private String name;
- private int followersCount;
-
- public TwitterUser() {
-
- }
-
- public TwitterUser(String screenName, int friendsCount, int statusesCount, String name, int followersCount) {
- this.screenName = screenName;
- this.friendsCount = friendsCount;
- this.statusesCount = statusesCount;
- this.name = name;
- this.followersCount = followersCount;
- }
-
- public void reset(String screenName, int friendsCount, int statusesCount, String name, int followersCount) {
- this.screenName = screenName;
- this.friendsCount = friendsCount;
- this.statusesCount = statusesCount;
- this.name = name;
- this.followersCount = followersCount;
- }
-
- public String getScreenName() {
- return screenName;
- }
-
- public int getFriendsCount() {
- return friendsCount;
- }
-
- public int getStatusesCount() {
- return statusesCount;
- }
-
- public String getName() {
- return name;
- }
-
- public int getFollowersCount() {
- return followersCount;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("{");
- builder.append("\"screen-name\":" + "\"" + screenName + "\"");
- builder.append(",");
- builder.append("\"lang\":" + "\"" + lang + "\"");
- builder.append(",");
- builder.append("\"friends_count\":" + friendsCount);
- builder.append(",");
- builder.append("\"statuses_count\":" + statusesCount);
- builder.append(",");
- builder.append("\"name\":" + "\"" + name + "\"");
- builder.append(",");
- builder.append("\"followers_count\":" + followersCount);
- builder.append("}");
- return builder.toString();
- }
-
- }
-
- public static class Date {
-
- private int day;
- private int month;
- private int year;
-
- public Date(int month, int day, int year) {
- this.month = month;
- this.day = day;
- this.year = year;
- }
-
- public void reset(int month, int day, int year) {
- this.month = month;
- this.day = day;
- this.year = year;
- }
-
- public int getDay() {
- return day;
- }
-
- public int getMonth() {
- return month;
- }
-
- public int getYear() {
- return year;
- }
-
- public Date() {
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("date");
- builder.append("(\"");
- builder.append(year);
- builder.append("-");
- builder.append(month < 10 ? "0" + month : "" + month);
- builder.append("-");
- builder.append(day < 10 ? "0" + day : "" + day);
- builder.append("\")");
- return builder.toString();
- }
-
- public void setDay(int day) {
- this.day = day;
- }
-
- public void setMonth(int month) {
- this.month = month;
- }
-
- public void setYear(int year) {
- this.year = year;
- }
- }
-
- public static String[] lastNames = { "Hoopengarner", "Harrow", "Gardner", "Blyant", "Best", "Buttermore", "Gronko",
- "Mayers", "Countryman", "Neely", "Ruhl", "Taggart", "Bash", "Cason", "Hil", "Zalack", "Mingle", "Carr",
- "Rohtin", "Wardle", "Pullman", "Wire", "Kellogg", "Hiles", "Keppel", "Bratton", "Sutton", "Wickes",
- "Muller", "Friedline", "Llora", "Elizabeth", "Anderson", "Gaskins", "Rifler", "Vinsant", "Stanfield",
- "Black", "Guest", "Hujsak", "Carter", "Weidemann", "Hays", "Patton", "Hayhurst", "Paynter", "Cressman",
- "Fiddler", "Evans", "Sherlock", "Woodworth", "Jackson", "Bloise", "Schneider", "Ring", "Kepplinger",
- "James", "Moon", "Bennett", "Bashline", "Ryals", "Zeal", "Christman", "Milliron", "Nash", "Ewing", "Camp",
- "Mason", "Richardson", "Bowchiew", "Hahn", "Wilson", "Wood", "Toyley", "Williamson", "Lafortune", "Errett",
- "Saltser", "Hirleman", "Brindle", "Newbiggin", "Ulery", "Lambert", "Shick", "Kuster", "Moore", "Finck",
- "Powell", "Jolce", "Townsend", "Sauter", "Cowher", "Wolfe", "Cavalet", "Porter", "Laborde", "Ballou",
- "Murray", "Stoddard", "Pycroft", "Milne", "King", "Todd", "Staymates", "Hall", "Romanoff", "Keilbach",
- "Sandford", "Hamilton", "Fye", "Kline", "Weeks", "Mcelroy", "Mccullough", "Bryant", "Hill", "Moore",
- "Ledgerwood", "Prevatt", "Eckert", "Read", "Hastings", "Doverspike", "Allshouse", "Bryan", "Mccallum",
- "Lombardi", "Mckendrick", "Cattley", "Barkley", "Steiner", "Finlay", "Priebe", "Armitage", "Hall", "Elder",
- "Erskine", "Hatcher", "Walker", "Pearsall", "Dunkle", "Haile", "Adams", "Miller", "Newbern", "Basinger",
- "Fuhrer", "Brinigh", "Mench", "Blackburn", "Bastion", "Mccune", "Bridger", "Hynes", "Quinn", "Courtney",
- "Geddinge", "Field", "Seelig", "Cable", "Earhart", "Harshman", "Roby", "Beals", "Berry", "Reed", "Hector",
- "Pittman", "Haverrman", "Kalp", "Briner", "Joghs", "Cowart", "Close", "Wynne", "Harden", "Weldy",
- "Stephenson", "Hildyard", "Moberly", "Wells", "Mackendoerfer", "Fisher", "Oppie", "Oneal", "Churchill",
- "Keister", "Alice", "Tavoularis", "Fisher", "Hair", "Burns", "Veith", "Wile", "Fuller", "Fields", "Clark",
- "Randolph", "Stone", "Mcclymonds", "Holtzer", "Donkin", "Wilkinson", "Rosensteel", "Albright", "Stahl",
- "Fox", "Kadel", "Houser", "Hanseu", "Henderson", "Davis", "Bicknell", "Swain", "Mercer", "Holdeman",
- "Enderly", "Caesar", "Margaret", "Munshower", "Elless", "Lucy", "Feufer", "Schofield", "Graham",
- "Blatenberger", "Benford", "Akers", "Campbell", "Ann", "Sadley", "Ling", "Gongaware", "Schmidt", "Endsley",
- "Groah", "Flanders", "Reichard", "Lowstetter", "Sandblom", "Griffis", "Basmanoff", "Coveney", "Hawker",
- "Archibald", "Hutton", "Barnes", "Diegel", "Raybould", "Focell", "Breitenstein", "Murray", "Chauvin",
- "Busk", "Pheleps", "Teagarden", "Northey", "Baumgartner", "Fleming", "Harris", "Parkinson", "Carpenter",
- "Whirlow", "Bonner", "Wortman", "Rogers", "Scott", "Lowe", "Mckee", "Huston", "Bullard", "Throckmorton",
- "Rummel", "Mathews", "Dull", "Saline", "Tue", "Woolery", "Lalty", "Schrader", "Ramsey", "Eisenmann",
- "Philbrick", "Sybilla", "Wallace", "Fonblanque", "Paul", "Orbell", "Higgens", "Casteel", "Franks", "Demuth",
- "Eisenman", "Hay", "Robinson", "Fischer", "Hincken", "Wylie", "Leichter", "Bousum", "Littlefield",
- "Mcdonald", "Greif", "Rhodes", "Wall", "Steele", "Baldwin", "Smith", "Stewart", "Schere", "Mary", "Aultman",
- "Emrick", "Guess", "Mitchell", "Painter", "Aft", "Hasely", "Weldi", "Loewentsein", "Poorbaugh", "Kepple",
- "Noton", "Judge", "Jackson", "Style", "Adcock", "Diller", "Marriman", "Johnston", "Children", "Monahan",
- "Ehret", "Shaw", "Congdon", "Pinney", "Millard", "Crissman", "Tanner", "Rose", "Knisely", "Cypret",
- "Sommer", "Poehl", "Hardie", "Bender", "Overholt", "Gottwine", "Beach", "Leslie", "Trevithick", "Langston",
- "Magor", "Shotts", "Howe", "Hunter", "Cross", "Kistler", "Dealtry", "Christner", "Pennington", "Thorley",
- "Eckhardstein", "Van", "Stroh", "Stough", "Stall", "Beedell", "Shea", "Garland", "Mays", "Pritchard",
- "Frankenberger", "Rowley", "Lane", "Baum", "Alliman", "Park", "Jardine", "Butler", "Cherry", "Kooser",
- "Baxter", "Billimek", "Downing", "Hurst", "Wood", "Baird", "Watkins", "Edwards", "Kemerer", "Harding",
- "Owens", "Eiford", "Keener", "Garneis", "Fiscina", "Mang", "Draudy", "Mills", "Gibson", "Reese", "Todd",
- "Ramos", "Levett", "Wilks", "Ward", "Mosser", "Dunlap", "Kifer", "Christopher", "Ashbaugh", "Wynter",
- "Rawls", "Cribbs", "Haynes", "Thigpen", "Schreckengost", "Bishop", "Linton", "Chapman", "James", "Jerome",
- "Hook", "Omara", "Houston", "Maclagan", "Sandys", "Pickering", "Blois", "Dickson", "Kemble", "Duncan",
- "Woodward", "Southern", "Henley", "Treeby", "Cram", "Elsas", "Driggers", "Warrick", "Overstreet", "Hindman",
- "Buck", "Sulyard", "Wentzel", "Swink", "Butt", "Schaeffer", "Hoffhants", "Bould", "Willcox", "Lotherington",
- "Bagley", "Graff", "White", "Wheeler", "Sloan", "Rodacker", "Hanford", "Jowers", "Kunkle", "Cass", "Powers",
- "Gilman", "Mcmichaels", "Hobbs", "Herndon", "Prescott", "Smail", "Mcdonald", "Biery", "Orner", "Richards",
- "Mueller", "Isaman", "Bruxner", "Goodman", "Barth", "Turzanski", "Vorrasi", "Stainforth", "Nehling", "Rahl",
- "Erschoff", "Greene", "Mckinnon", "Reade", "Smith", "Pery", "Roose", "Greenwood", "Weisgarber", "Curry",
- "Holts", "Zadovsky", "Parrish", "Putnam", "Munson", "Mcindoe", "Nickolson", "Brooks", "Bollinger",
- "Stroble", "Siegrist", "Fulton", "Tomey", "Zoucks", "Roberts", "Otis", "Clarke", "Easter", "Johnson",
- "Fylbrigg", "Taylor", "Swartzbaugh", "Weinstein", "Gadow", "Sayre", "Marcotte", "Wise", "Atweeke", "Mcfall",
- "Napier", "Eisenhart", "Canham", "Sealis", "Baughman", "Gertraht", "Losey", "Laurence", "Eva", "Pershing",
- "Kern", "Pirl", "Rega", "Sanborn", "Kanaga", "Sanders", "Anderson", "Dickinson", "Osteen", "Gettemy",
- "Crom", "Snyder", "Reed", "Laurenzi", "Riggle", "Tillson", "Fowler", "Raub", "Jenner", "Koepple", "Soames",
- "Goldvogel", "Dimsdale", "Zimmer", "Giesen", "Baker", "Beail", "Mortland", "Bard", "Sanner", "Knopsnider",
- "Jenkins", "Bailey", "Werner", "Barrett", "Faust", "Agg", "Tomlinson", "Williams", "Little", "Greenawalt",
- "Wells", "Wilkins", "Gisiko", "Bauerle", "Harrold", "Prechtl", "Polson", "Faast", "Winton", "Garneys",
- "Peters", "Potter", "Porter", "Tennant", "Eve", "Dugger", "Jones", "Burch", "Cowper", "Whittier" };
-
- public static String[] firstNames = { "Albert", "Jacquelin", "Dona", "Alia", "Mayme", "Genoveva", "Emma", "Lena",
- "Melody", "Vilma", "Katelyn", "Jeremy", "Coral", "Leann", "Lita", "Gilda", "Kayla", "Alvina", "Maranda",
- "Verlie", "Khadijah", "Karey", "Patrice", "Kallie", "Corey", "Mollie", "Daisy", "Melanie", "Sarita",
- "Nichole", "Pricilla", "Terresa", "Berneice", "Arianne", "Brianne", "Lavinia", "Ulrike", "Lesha", "Adell",
- "Ardelle", "Marisha", "Laquita", "Karyl", "Maryjane", "Kendall", "Isobel", "Raeann", "Heike", "Barbera",
- "Norman", "Yasmine", "Nevada", "Mariam", "Edith", "Eugena", "Lovie", "Maren", "Bennie", "Lennie", "Tamera",
- "Crystal", "Randi", "Anamaria", "Chantal", "Jesenia", "Avis", "Shela", "Randy", "Laurena", "Sharron",
- "Christiane", "Lorie", "Mario", "Elizabeth", "Reina", "Adria", "Lakisha", "Brittni", "Azzie", "Dori",
- "Shaneka", "Asuncion", "Katheryn", "Laurice", "Sharita", "Krystal", "Reva", "Inger", "Alpha", "Makeda",
- "Anabel", "Loni", "Tiara", "Meda", "Latashia", "Leola", "Chin", "Daisey", "Ivory", "Amalia", "Logan",
- "Tyler", "Kyong", "Carolann", "Maryetta", "Eufemia", "Anya", "Doreatha", "Lorna", "Rutha", "Ehtel",
- "Debbie", "Chassidy", "Sang", "Christa", "Lottie", "Chun", "Karine", "Peggie", "Amina", "Melany", "Alayna",
- "Scott", "Romana", "Naomi", "Christiana", "Salena", "Taunya", "Mitsue", "Regina", "Chelsie", "Charity",
- "Dacia", "Aletha", "Latosha", "Lia", "Tamica", "Chery", "Bianca", "Shu", "Georgianne", "Myriam", "Austin",
- "Wan", "Mallory", "Jana", "Georgie", "Jenell", "Kori", "Vicki", "Delfina", "June", "Mellisa", "Catherina",
- "Claudie", "Tynisha", "Dayle", "Enriqueta", "Belen", "Pia", "Sarai", "Rosy", "Renay", "Kacie", "Frieda",
- "Cayla", "Elissa", "Claribel", "Sabina", "Mackenzie", "Raina", "Cira", "Mitzie", "Aubrey", "Serafina",
- "Maria", "Katharine", "Esperanza", "Sung", "Daria", "Billye", "Stefanie", "Kasha", "Holly", "Suzanne",
- "Inga", "Flora", "Andria", "Genevie", "Eladia", "Janet", "Erline", "Renna", "Georgeanna", "Delorse",
- "Elnora", "Rudy", "Rima", "Leanora", "Letisha", "Love", "Alverta", "Pinkie", "Domonique", "Jeannie", "Jose",
- "Jacqueline", "Tara", "Lily", "Erna", "Tennille", "Galina", "Tamala", "Kirby", "Nichelle", "Myesha",
- "Farah", "Santa", "Ludie", "Kenia", "Yee", "Micheline", "Maryann", "Elaina", "Ethelyn", "Emmaline",
- "Shanell", "Marina", "Nila", "Alane", "Shakira", "Dorris", "Belinda", "Elois", "Barbie", "Carita", "Gisela",
- "Lura", "Fransisca", "Helga", "Peg", "Leonarda", "Earlie", "Deetta", "Jacquetta", "Blossom", "Kayleigh",
- "Deloras", "Keshia", "Christinia", "Dulce", "Bernie", "Sheba", "Lashanda", "Tula", "Claretta", "Kary",
- "Jeanette", "Lupita", "Lenora", "Hisako", "Sherise", "Glynda", "Adela", "Chia", "Sudie", "Mindy", "Caroyln",
- "Lindsey", "Xiomara", "Mercedes", "Onie", "Loan", "Alexis", "Tommie", "Donette", "Monica", "Soo",
- "Camellia", "Lavera", "Valery", "Ariana", "Sophia", "Loris", "Ginette", "Marielle", "Tari", "Julissa",
- "Alesia", "Suzanna", "Emelda", "Erin", "Ladawn", "Sherilyn", "Candice", "Nereida", "Fairy", "Carl", "Joel",
- "Marilee", "Gracia", "Cordie", "So", "Shanita", "Drew", "Cassie", "Sherie", "Marget", "Norma", "Delois",
- "Debera", "Chanelle", "Catarina", "Aracely", "Carlene", "Tricia", "Aleen", "Katharina", "Marguerita",
- "Guadalupe", "Margorie", "Mandie", "Kathe", "Chong", "Sage", "Faith", "Maryrose", "Stephany", "Ivy",
- "Pauline", "Susie", "Cristen", "Jenifer", "Annette", "Debi", "Karmen", "Luci", "Shayla", "Hope", "Ocie",
- "Sharie", "Tami", "Breana", "Kerry", "Rubye", "Lashay", "Sondra", "Katrice", "Brunilda", "Cortney", "Yan",
- "Zenobia", "Penni", "Addie", "Lavona", "Noel", "Anika", "Herlinda", "Valencia", "Bunny", "Tory", "Victoria",
- "Carrie", "Mikaela", "Wilhelmina", "Chung", "Hortencia", "Gerda", "Wen", "Ilana", "Sibyl", "Candida",
- "Victorina", "Chantell", "Casie", "Emeline", "Dominica", "Cecila", "Delora", "Miesha", "Nova", "Sally",
- "Ronald", "Charlette", "Francisca", "Mina", "Jenna", "Loraine", "Felisa", "Lulu", "Page", "Lyda", "Babara",
- "Flor", "Walter", "Chan", "Sherika", "Kala", "Luna", "Vada", "Syreeta", "Slyvia", "Karin", "Renata",
- "Robbi", "Glenda", "Delsie", "Lizzie", "Genia", "Caitlin", "Bebe", "Cory", "Sam", "Leslee", "Elva", "Caren",
- "Kasie", "Leticia", "Shannan", "Vickey", "Sandie", "Kyle", "Chang", "Terrilyn", "Sandra", "Elida",
- "Marketta", "Elsy", "Tu", "Carman", "Ashlie", "Vernia", "Albertine", "Vivian", "Elba", "Bong", "Margy",
- "Janetta", "Xiao", "Teofila", "Danyel", "Nickole", "Aleisha", "Tera", "Cleotilde", "Dara", "Paulita",
- "Isela", "Maricela", "Rozella", "Marivel", "Aurora", "Melissa", "Carylon", "Delinda", "Marvella",
- "Candelaria", "Deidre", "Tawanna", "Myrtie", "Milagro", "Emilie", "Coretta", "Ivette", "Suzann", "Ammie",
- "Lucina", "Lory", "Tena", "Eleanor", "Cherlyn", "Tiana", "Brianna", "Myra", "Flo", "Carisa", "Kandi",
- "Erlinda", "Jacqulyn", "Fermina", "Riva", "Palmira", "Lindsay", "Annmarie", "Tamiko", "Carline", "Amelia",
- "Quiana", "Lashawna", "Veola", "Belva", "Marsha", "Verlene", "Alex", "Leisha", "Camila", "Mirtha", "Melva",
- "Lina", "Arla", "Cythia", "Towanda", "Aracelis", "Tasia", "Aurore", "Trinity", "Bernadine", "Farrah",
- "Deneen", "Ines", "Betty", "Lorretta", "Dorethea", "Hertha", "Rochelle", "Juli", "Shenika", "Yung", "Lavon",
- "Deeanna", "Nakia", "Lynnette", "Dinorah", "Nery", "Elene", "Carolee", "Mira", "Franchesca", "Lavonda",
- "Leida", "Paulette", "Dorine", "Allegra", "Keva", "Jeffrey", "Bernardina", "Maryln", "Yoko", "Faviola",
- "Jayne", "Lucilla", "Charita", "Ewa", "Ella", "Maggie", "Ivey", "Bettie", "Jerri", "Marni", "Bibi",
- "Sabrina", "Sarah", "Marleen", "Katherin", "Remona", "Jamika", "Antonina", "Oliva", "Lajuana", "Fonda",
- "Sigrid", "Yael", "Billi", "Verona", "Arminda", "Mirna", "Tesha", "Katheleen", "Bonita", "Kamilah",
- "Patrica", "Julio", "Shaina", "Mellie", "Denyse", "Deandrea", "Alena", "Meg", "Kizzie", "Krissy", "Karly",
- "Alleen", "Yahaira", "Lucie", "Karena", "Elaine", "Eloise", "Buena", "Marianela", "Renee", "Nan",
- "Carolynn", "Windy", "Avril", "Jane", "Vida", "Thea", "Marvel", "Rosaline", "Tifany", "Robena", "Azucena",
- "Carlota", "Mindi", "Andera", "Jenny", "Courtney", "Lyndsey", "Willette", "Kristie", "Shaniqua", "Tabatha",
- "Ngoc", "Una", "Marlena", "Louetta", "Vernie", "Brandy", "Jacquelyne", "Jenelle", "Elna", "Erminia", "Ida",
- "Audie", "Louis", "Marisol", "Shawana", "Harriette", "Karol", "Kitty", "Esmeralda", "Vivienne", "Eloisa",
- "Iris", "Jeanice", "Cammie", "Jacinda", "Shena", "Floy", "Theda", "Lourdes", "Jayna", "Marg", "Kati",
- "Tanna", "Rosalyn", "Maxima", "Soon", "Angelika", "Shonna", "Merle", "Kassandra", "Deedee", "Heidi",
- "Marti", "Renae", "Arleen", "Alfredia", "Jewell", "Carley", "Pennie", "Corina", "Tonisha", "Natividad",
- "Lilliana", "Darcie", "Shawna", "Angel", "Piedad", "Josefa", "Rebbeca", "Natacha", "Nenita", "Petrina",
- "Carmon", "Chasidy", "Temika", "Dennise", "Renetta", "Augusta", "Shirlee", "Valeri", "Casimira", "Janay",
- "Berniece", "Deborah", "Yaeko", "Mimi", "Digna", "Irish", "Cher", "Yong", "Lucila", "Jimmie", "Junko",
- "Lezlie", "Waneta", "Sandee", "Marquita", "Eura", "Freeda", "Annabell", "Laree", "Jaye", "Wendy", "Toshia",
- "Kylee", "Aleta", "Emiko", "Clorinda", "Sixta", "Audrea", "Juanita", "Birdie", "Reita", "Latanya", "Nia",
- "Leora", "Laurine", "Krysten", "Jerrie", "Chantel", "Ira", "Sena", "Andre", "Jann", "Marla", "Precious",
- "Katy", "Gabrielle", "Yvette", "Brook", "Shirlene", "Eldora", "Laura", "Milda", "Euna", "Jettie", "Debora",
- "Lise", "Edythe", "Leandra", "Shandi", "Araceli", "Johanne", "Nieves", "Denese", "Carmelita", "Nohemi",
- "Annice", "Natalie", "Yolande", "Jeffie", "Vashti", "Vickie", "Obdulia", "Youlanda", "Lupe", "Tomoko",
- "Monserrate", "Domitila", "Etsuko", "Adrienne", "Lakesha", "Melissia", "Odessa", "Meagan", "Veronika",
- "Jolyn", "Isabelle", "Leah", "Rhiannon", "Gianna", "Audra", "Sommer", "Renate", "Perla", "Thao", "Myong",
- "Lavette", "Mark", "Emilia", "Ariane", "Karl", "Dorie", "Jacquie", "Mia", "Malka", "Shenita", "Tashina",
- "Christine", "Cherri", "Roni", "Fran", "Mildred", "Sara", "Clarissa", "Fredia", "Elease", "Samuel",
- "Earlene", "Vernita", "Mae", "Concha", "Renea", "Tamekia", "Hye", "Ingeborg", "Tessa", "Kelly", "Kristin",
- "Tam", "Sacha", "Kanisha", "Jillian", "Tiffanie", "Ashlee", "Madelyn", "Donya", "Clementine", "Mickie",
- "My", "Zena", "Terrie", "Samatha", "Gertie", "Tarra", "Natalia", "Sharlene", "Evie", "Shalon", "Rosalee",
- "Numbers", "Jodi", "Hattie", "Naoma", "Valene", "Whitley", "Claude", "Alline", "Jeanne", "Camie",
- "Maragret", "Viola", "Kris", "Marlo", "Arcelia", "Shari", "Jalisa", "Corrie", "Eleonor", "Angelyn", "Merry",
- "Lauren", "Melita", "Gita", "Elenor", "Aurelia", "Janae", "Lyndia", "Margeret", "Shawanda", "Rolande",
- "Shirl", "Madeleine", "Celinda", "Jaleesa", "Shemika", "Joye", "Tisa", "Trudie", "Kathrine", "Clarita",
- "Dinah", "Georgia", "Antoinette", "Janis", "Suzette", "Sherri", "Herta", "Arie", "Hedy", "Cassi", "Audrie",
- "Caryl", "Jazmine", "Jessica", "Beverly", "Elizbeth", "Marylee", "Londa", "Fredericka", "Argelia", "Nana",
- "Donnette", "Damaris", "Hailey", "Jamee", "Kathlene", "Glayds", "Lydia", "Apryl", "Verla", "Adam",
- "Concepcion", "Zelda", "Shonta", "Vernice", "Detra", "Meghann", "Sherley", "Sheri", "Kiyoko", "Margarita",
- "Adaline", "Mariela", "Velda", "Ailene", "Juliane", "Aiko", "Edyth", "Cecelia", "Shavon", "Florance",
- "Madeline", "Rheba", "Deann", "Ignacia", "Odelia", "Heide", "Mica", "Jennette", "Maricruz", "Ouida",
- "Darcy", "Laure", "Justina", "Amada", "Laine", "Cruz", "Sunny", "Francene", "Roxanna", "Nam", "Nancie",
- "Deanna", "Letty", "Britni", "Kazuko", "Lacresha", "Simon", "Caleb", "Milton", "Colton", "Travis", "Miles",
- "Jonathan", "Logan", "Rolf", "Emilio", "Roberto", "Marcus", "Tim", "Delmar", "Devon", "Kurt", "Edward",
- "Jeffrey", "Elvis", "Alfonso", "Blair", "Wm", "Sheldon", "Leonel", "Michal", "Federico", "Jacques",
- "Leslie", "Augustine", "Hugh", "Brant", "Hong", "Sal", "Modesto", "Curtis", "Jefferey", "Adam", "John",
- "Glenn", "Vance", "Alejandro", "Refugio", "Lucio", "Demarcus", "Chang", "Huey", "Neville", "Preston",
- "Bert", "Abram", "Foster", "Jamison", "Kirby", "Erich", "Manual", "Dustin", "Derrick", "Donnie", "Jospeh",
- "Chris", "Josue", "Stevie", "Russ", "Stanley", "Nicolas", "Samuel", "Waldo", "Jake", "Max", "Ernest",
- "Reinaldo", "Rene", "Gale", "Morris", "Nathan", "Maximo", "Courtney", "Theodore", "Octavio", "Otha",
- "Delmer", "Graham", "Dean", "Lowell", "Myles", "Colby", "Boyd", "Adolph", "Jarrod", "Nick", "Mark",
- "Clinton", "Kim", "Sonny", "Dalton", "Tyler", "Jody", "Orville", "Luther", "Rubin", "Hollis", "Rashad",
- "Barton", "Vicente", "Ted", "Rick", "Carmine", "Clifton", "Gayle", "Christopher", "Jessie", "Bradley",
- "Clay", "Theo", "Josh", "Mitchell", "Boyce", "Chung", "Eugenio", "August", "Norbert", "Sammie", "Jerry",
- "Adan", "Edmundo", "Homer", "Hilton", "Tod", "Kirk", "Emmett", "Milan", "Quincy", "Jewell", "Herb", "Steve",
- "Carmen", "Bobby", "Odis", "Daron", "Jeremy", "Carl", "Hunter", "Tuan", "Thurman", "Asa", "Brenton",
- "Shane", "Donny", "Andreas", "Teddy", "Dario", "Cyril", "Hoyt", "Teodoro", "Vincenzo", "Hilario", "Daren",
- "Agustin", "Marquis", "Ezekiel", "Brendan", "Johnson", "Alden", "Richie", "Granville", "Chad", "Joseph",
- "Lamont", "Jordon", "Gilberto", "Chong", "Rosendo", "Eddy", "Rob", "Dewitt", "Andre", "Titus", "Russell",
- "Rigoberto", "Dick", "Garland", "Gabriel", "Hank", "Darius", "Ignacio", "Lazaro", "Johnie", "Mauro",
- "Edmund", "Trent", "Harris", "Osvaldo", "Marvin", "Judson", "Rodney", "Randall", "Renato", "Richard",
- "Denny", "Jon", "Doyle", "Cristopher", "Wilson", "Christian", "Jamie", "Roland", "Ken", "Tad", "Romeo",
- "Seth", "Quinton", "Byron", "Ruben", "Darrel", "Deandre", "Broderick", "Harold", "Ty", "Monroe", "Landon",
- "Mohammed", "Angel", "Arlen", "Elias", "Andres", "Carlton", "Numbers", "Tony", "Thaddeus", "Issac", "Elmer",
- "Antoine", "Ned", "Fermin", "Grover", "Benito", "Abdul", "Cortez", "Eric", "Maxwell", "Coy", "Gavin",
- "Rich", "Andy", "Del", "Giovanni", "Major", "Efren", "Horacio", "Joaquin", "Charles", "Noah", "Deon",
- "Pasquale", "Reed", "Fausto", "Jermaine", "Irvin", "Ray", "Tobias", "Carter", "Yong", "Jorge", "Brent",
- "Daniel", "Zane", "Walker", "Thad", "Shaun", "Jaime", "Mckinley", "Bradford", "Nathanial", "Jerald",
- "Aubrey", "Virgil", "Abel", "Philip", "Chester", "Chadwick", "Dominick", "Britt", "Emmitt", "Ferdinand",
- "Julian", "Reid", "Santos", "Dwain", "Morgan", "James", "Marion", "Micheal", "Eddie", "Brett", "Stacy",
- "Kerry", "Dale", "Nicholas", "Darrick", "Freeman", "Scott", "Newton", "Sherman", "Felton", "Cedrick",
- "Winfred", "Brad", "Fredric", "Dewayne", "Virgilio", "Reggie", "Edgar", "Heriberto", "Shad", "Timmy",
- "Javier", "Nestor", "Royal", "Lynn", "Irwin", "Ismael", "Jonas", "Wiley", "Austin", "Kieth", "Gonzalo",
- "Paris", "Earnest", "Arron", "Jarred", "Todd", "Erik", "Maria", "Chauncey", "Neil", "Conrad", "Maurice",
- "Roosevelt", "Jacob", "Sydney", "Lee", "Basil", "Louis", "Rodolfo", "Rodger", "Roman", "Corey", "Ambrose",
- "Cristobal", "Sylvester", "Benton", "Franklin", "Marcelo", "Guillermo", "Toby", "Jeramy", "Donn", "Danny",
- "Dwight", "Clifford", "Valentine", "Matt", "Jules", "Kareem", "Ronny", "Lonny", "Son", "Leopoldo", "Dannie",
- "Gregg", "Dillon", "Orlando", "Weston", "Kermit", "Damian", "Abraham", "Walton", "Adrian", "Rudolf", "Will",
- "Les", "Norberto", "Fred", "Tyrone", "Ariel", "Terry", "Emmanuel", "Anderson", "Elton", "Otis", "Derek",
- "Frankie", "Gino", "Lavern", "Jarod", "Kenny", "Dane", "Keenan", "Bryant", "Eusebio", "Dorian", "Ali",
- "Lucas", "Wilford", "Jeremiah", "Warner", "Woodrow", "Galen", "Bob", "Johnathon", "Amado", "Michel",
- "Harry", "Zachery", "Taylor", "Booker", "Hershel", "Mohammad", "Darrell", "Kyle", "Stuart", "Marlin",
- "Hyman", "Jeffery", "Sidney", "Merrill", "Roy", "Garrett", "Porter", "Kenton", "Giuseppe", "Terrance",
- "Trey", "Felix", "Buster", "Von", "Jackie", "Linwood", "Darron", "Francisco", "Bernie", "Diego", "Brendon",
- "Cody", "Marco", "Ahmed", "Antonio", "Vince", "Brooks", "Kendrick", "Ross", "Mohamed", "Jim", "Benny",
- "Gerald", "Pablo", "Charlie", "Antony", "Werner", "Hipolito", "Minh", "Mel", "Derick", "Armand", "Fidel",
- "Lewis", "Donnell", "Desmond", "Vaughn", "Guadalupe", "Keneth", "Rodrick", "Spencer", "Chas", "Gus",
- "Harlan", "Wes", "Carmelo", "Jefferson", "Gerard", "Jarvis", "Haywood", "Hayden", "Sergio", "Gene",
- "Edgardo", "Colin", "Horace", "Dominic", "Aldo", "Adolfo", "Juan", "Man", "Lenard", "Clement", "Everett",
- "Hal", "Bryon", "Mason", "Emerson", "Earle", "Laurence", "Columbus", "Lamar", "Douglas", "Ian", "Fredrick",
- "Marc", "Loren", "Wallace", "Randell", "Noble", "Ricardo", "Rory", "Lindsey", "Boris", "Bill", "Carlos",
- "Domingo", "Grant", "Craig", "Ezra", "Matthew", "Van", "Rudy", "Danial", "Brock", "Maynard", "Vincent",
- "Cole", "Damion", "Ellsworth", "Marcel", "Markus", "Rueben", "Tanner", "Reyes", "Hung", "Kennith",
- "Lindsay", "Howard", "Ralph", "Jed", "Monte", "Garfield", "Avery", "Bernardo", "Malcolm", "Sterling",
- "Ezequiel", "Kristofer", "Luciano", "Casey", "Rosario", "Ellis", "Quintin", "Trevor", "Miquel", "Jordan",
- "Arthur", "Carson", "Tyron", "Grady", "Walter", "Jonathon", "Ricky", "Bennie", "Terrence", "Dion", "Dusty",
- "Roderick", "Isaac", "Rodrigo", "Harrison", "Zack", "Dee", "Devin", "Rey", "Ulysses", "Clint", "Greg",
- "Dino", "Frances", "Wade", "Franklyn", "Jude", "Bradly", "Salvador", "Rocky", "Weldon", "Lloyd", "Milford",
- "Clarence", "Alec", "Allan", "Bobbie", "Oswaldo", "Wilfred", "Raleigh", "Shelby", "Willy", "Alphonso",
- "Arnoldo", "Robbie", "Truman", "Nicky", "Quinn", "Damien", "Lacy", "Marcos", "Parker", "Burt", "Carroll",
- "Denver", "Buck", "Dong", "Normand", "Billie", "Edwin", "Troy", "Arden", "Rusty", "Tommy", "Kenneth", "Leo",
- "Claud", "Joel", "Kendall", "Dante", "Milo", "Cruz", "Lucien", "Ramon", "Jarrett", "Scottie", "Deshawn",
- "Ronnie", "Pete", "Alonzo", "Whitney", "Stefan", "Sebastian", "Edmond", "Enrique", "Branden", "Leonard",
- "Loyd", "Olin", "Ron", "Rhett", "Frederic", "Orval", "Tyrell", "Gail", "Eli", "Antonia", "Malcom", "Sandy",
- "Stacey", "Nickolas", "Hosea", "Santo", "Oscar", "Fletcher", "Dave", "Patrick", "Dewey", "Bo", "Vito",
- "Blaine", "Randy", "Robin", "Winston", "Sammy", "Edwardo", "Manuel", "Valentin", "Stanford", "Filiberto",
- "Buddy", "Zachariah", "Johnnie", "Elbert", "Paul", "Isreal", "Jerrold", "Leif", "Owen", "Sung", "Junior",
- "Raphael", "Josef", "Donte", "Allen", "Florencio", "Raymond", "Lauren", "Collin", "Eliseo", "Bruno",
- "Martin", "Lyndon", "Kurtis", "Salvatore", "Erwin", "Michael", "Sean", "Davis", "Alberto", "King",
- "Rolland", "Joe", "Tory", "Chase", "Dallas", "Vernon", "Beau", "Terrell", "Reynaldo", "Monty", "Jame",
- "Dirk", "Florentino", "Reuben", "Saul", "Emory", "Esteban", "Michale", "Claudio", "Jacinto", "Kelley",
- "Levi", "Andrea", "Lanny", "Wendell", "Elwood", "Joan", "Felipe", "Palmer", "Elmo", "Lawrence", "Hubert",
- "Rudolph", "Duane", "Cordell", "Everette", "Mack", "Alan", "Efrain", "Trenton", "Bryan", "Tom", "Wilmer",
- "Clyde", "Chance", "Lou", "Brain", "Justin", "Phil", "Jerrod", "George", "Kris", "Cyrus", "Emery", "Rickey",
- "Lincoln", "Renaldo", "Mathew", "Luke", "Dwayne", "Alexis", "Jackson", "Gil", "Marty", "Burton", "Emil",
- "Glen", "Willian", "Clemente", "Keven", "Barney", "Odell", "Reginald", "Aurelio", "Damon", "Ward",
- "Gustavo", "Harley", "Peter", "Anibal", "Arlie", "Nigel", "Oren", "Zachary", "Scot", "Bud", "Wilbert",
- "Bart", "Josiah", "Marlon", "Eldon", "Darryl", "Roger", "Anthony", "Omer", "Francis", "Patricia", "Moises",
- "Chuck", "Waylon", "Hector", "Jamaal", "Cesar", "Julius", "Rex", "Norris", "Ollie", "Isaias", "Quentin",
- "Graig", "Lyle", "Jeffry", "Karl", "Lester", "Danilo", "Mike", "Dylan", "Carlo", "Ryan", "Leon", "Percy",
- "Lucius", "Jamel", "Lesley", "Joey", "Cornelius", "Rico", "Arnulfo", "Chet", "Margarito", "Ernie",
- "Nathanael", "Amos", "Cleveland", "Luigi", "Alfonzo", "Phillip", "Clair", "Elroy", "Alva", "Hans", "Shon",
- "Gary", "Jesus", "Cary", "Silas", "Keith", "Israel", "Willard", "Randolph", "Dan", "Adalberto", "Claude",
- "Delbert", "Garry", "Mary", "Larry", "Riley", "Robt", "Darwin", "Barrett", "Steven", "Kelly", "Herschel",
- "Darnell", "Scotty", "Armando", "Miguel", "Lawerence", "Wesley", "Garth", "Carol", "Micah", "Alvin",
- "Billy", "Earl", "Pat", "Brady", "Cory", "Carey", "Bernard", "Jayson", "Nathaniel", "Gaylord", "Archie",
- "Dorsey", "Erasmo", "Angelo", "Elisha", "Long", "Augustus", "Hobert", "Drew", "Stan", "Sherwood", "Lorenzo",
- "Forrest", "Shawn", "Leigh", "Hiram", "Leonardo", "Gerry", "Myron", "Hugo", "Alvaro", "Leland", "Genaro",
- "Jamey", "Stewart", "Elden", "Irving", "Olen", "Antone", "Freddy", "Lupe", "Joshua", "Gregory", "Andrew",
- "Sang", "Wilbur", "Gerardo", "Merlin", "Williams", "Johnny", "Alex", "Tommie", "Jimmy", "Donovan", "Dexter",
- "Gaston", "Tracy", "Jeff", "Stephen", "Berry", "Anton", "Darell", "Fritz", "Willis", "Noel", "Mariano",
- "Crawford", "Zoey", "Alex", "Brianna", "Carlie", "Lloyd", "Cal", "Astor", "Randolf", "Magdalene",
- "Trevelyan", "Terance", "Roy", "Kermit", "Harriett", "Crystal", "Laurinda", "Kiersten", "Phyllida", "Liz",
- "Bettie", "Rena", "Colten", "Berenice", "Sindy", "Wilma", "Amos", "Candi", "Ritchie", "Dirk", "Kathlyn",
- "Callista", "Anona", "Flossie", "Sterling", "Calista", "Regan", "Erica", "Jeana", "Keaton", "York", "Nolan",
- "Daniel", "Benton", "Tommie", "Serenity", "Deanna", "Chas", "Heron", "Marlyn", "Xylia", "Tristin", "Lyndon",
- "Andriana", "Madelaine", "Maddison", "Leila", "Chantelle", "Audrey", "Connor", "Daley", "Tracee", "Tilda",
- "Eliot", "Merle", "Linwood", "Kathryn", "Silas", "Alvina", "Phinehas", "Janis", "Alvena", "Zubin",
- "Gwendolen", "Caitlyn", "Bertram", "Hailee", "Idelle", "Homer", "Jannah", "Delbert", "Rhianna", "Cy",
- "Jefferson", "Wayland", "Nona", "Tempest", "Reed", "Jenifer", "Ellery", "Nicolina", "Aldous", "Prince",
- "Lexia", "Vinnie", "Doug", "Alberic", "Kayleen", "Woody", "Rosanne", "Ysabel", "Skyler", "Twyla", "Geordie",
- "Leta", "Clive", "Aaron", "Scottie", "Celeste", "Chuck", "Erle", "Lallie", "Jaycob", "Ray", "Carrie",
- "Laurita", "Noreen", "Meaghan", "Ulysses", "Andy", "Drogo", "Dina", "Yasmin", "Mya", "Luvenia", "Urban",
- "Jacob", "Laetitia", "Sherry", "Love", "Michaela", "Deonne", "Summer", "Brendon", "Sheena", "Mason",
- "Jayson", "Linden", "Salal", "Darrell", "Diana", "Hudson", "Lennon", "Isador", "Charley", "April", "Ralph",
- "James", "Mina", "Jolyon", "Laurine", "Monna", "Carita", "Munro", "Elsdon", "Everette", "Radclyffe",
- "Darrin", "Herbert", "Gawain", "Sheree", "Trudy", "Emmaline", "Kassandra", "Rebecca", "Basil", "Jen", "Don",
- "Osborne", "Lilith", "Hannah", "Fox", "Rupert", "Paulene", "Darius", "Wally", "Baptist", "Sapphire", "Tia",
- "Sondra", "Kylee", "Ashton", "Jepson", "Joetta", "Val", "Adela", "Zacharias", "Zola", "Marmaduke",
- "Shannah", "Posie", "Oralie", "Brittany", "Ernesta", "Raymund", "Denzil", "Daren", "Roosevelt", "Nelson",
- "Fortune", "Mariel", "Nick", "Jaden", "Upton", "Oz", "Margaux", "Precious", "Albert", "Bridger", "Jimmy",
- "Nicola", "Rosalynne", "Keith", "Walt", "Della", "Joanna", "Xenia", "Esmeralda", "Major", "Simon", "Rexana",
- "Stacy", "Calanthe", "Sherley", "Kaitlyn", "Graham", "Ramsey", "Abbey", "Madlyn", "Kelvin", "Bill", "Rue",
- "Monica", "Caileigh", "Laraine", "Booker", "Jayna", "Greta", "Jervis", "Sherman", "Kendrick", "Tommy",
- "Iris", "Geffrey", "Kaelea", "Kerr", "Garrick", "Jep", "Audley", "Nic", "Bronte", "Beulah", "Patricia",
- "Jewell", "Deidra", "Cory", "Everett", "Harper", "Charity", "Godfrey", "Jaime", "Sinclair", "Talbot",
- "Dayna", "Cooper", "Rosaline", "Jennie", "Eileen", "Latanya", "Corinna", "Roxie", "Caesar", "Charles",
- "Pollie", "Lindsey", "Sorrel", "Dwight", "Jocelyn", "Weston", "Shyla", "Valorie", "Bessie", "Josh",
- "Lessie", "Dayton", "Kathi", "Chasity", "Wilton", "Adam", "William", "Ash", "Angela", "Ivor", "Ria",
- "Jazmine", "Hailey", "Jo", "Silvestra", "Ernie", "Clifford", "Levi", "Matilda", "Quincey", "Camilla",
- "Delicia", "Phemie", "Laurena", "Bambi", "Lourdes", "Royston", "Chastity", "Lynwood", "Elle", "Brenda",
- "Phoebe", "Timothy", "Raschelle", "Lilly", "Burt", "Rina", "Rodney", "Maris", "Jaron", "Wilf", "Harlan",
- "Audra", "Vincent", "Elwyn", "Drew", "Wynter", "Ora", "Lissa", "Virgil", "Xavier", "Chad", "Ollie",
- "Leyton", "Karolyn", "Skye", "Roni", "Gladys", "Dinah", "Penny", "August", "Osmund", "Whitaker", "Brande",
- "Cornell", "Phil", "Zara", "Kilie", "Gavin", "Coty", "Randy", "Teri", "Keira", "Pru", "Clemency", "Kelcey",
- "Nevil", "Poppy", "Gareth", "Christabel", "Bastian", "Wynonna", "Roselyn", "Goddard", "Collin", "Trace",
- "Neal", "Effie", "Denys", "Virginia", "Richard", "Isiah", "Harrietta", "Gaylord", "Diamond", "Trudi",
- "Elaine", "Jemmy", "Gage", "Annabel", "Quincy", "Syd", "Marianna", "Philomena", "Aubree", "Kathie", "Jacki",
- "Kelley", "Bess", "Cecil", "Maryvonne", "Kassidy", "Anselm", "Dona", "Darby", "Jamison", "Daryl", "Darell",
- "Teal", "Lennie", "Bartholomew", "Katie", "Maybelline", "Kimball", "Elvis", "Les", "Flick", "Harley",
- "Beth", "Bidelia", "Montague", "Helen", "Ozzy", "Stef", "Debra", "Maxene", "Stefanie", "Russ", "Avril",
- "Johnathan", "Orson", "Chelsey", "Josephine", "Deshaun", "Wendell", "Lula", "Ferdinanda", "Greg", "Brad",
- "Kynaston", "Dena", "Russel", "Robertina", "Misti", "Leon", "Anjelica", "Bryana", "Myles", "Judi", "Curtis",
- "Davin", "Kristia", "Chrysanta", "Hayleigh", "Hector", "Osbert", "Eustace", "Cary", "Tansy", "Cayley",
- "Maryann", "Alissa", "Ike", "Tranter", "Reina", "Alwilda", "Sidony", "Columbine", "Astra", "Jillie",
- "Stephania", "Jonah", "Kennedy", "Ferdinand", "Allegria", "Donella", "Kelleigh", "Darian", "Eldreda",
- "Jayden", "Herbie", "Jake", "Winston", "Vi", "Annie", "Cherice", "Hugo", "Tricia", "Haydee", "Cassarah",
- "Darden", "Mallory", "Alton", "Hadley", "Romayne", "Lacey", "Ern", "Alayna", "Cecilia", "Seward", "Tilly",
- "Edgar", "Concordia", "Ibbie", "Dahlia", "Oswin", "Stu", "Brett", "Maralyn", "Kristeen", "Dotty", "Robyn",
- "Nessa", "Tresha", "Guinevere", "Emerson", "Haze", "Lyn", "Henderson", "Lexa", "Jaylen", "Gail", "Lizette",
- "Tiara", "Robbie", "Destiny", "Alice", "Livia", "Rosy", "Leah", "Jan", "Zach", "Vita", "Gia", "Micheal",
- "Rowina", "Alysha", "Bobbi", "Delores", "Osmond", "Karaugh", "Wilbur", "Kasandra", "Renae", "Kaety", "Dora",
- "Gaye", "Amaryllis", "Katelyn", "Dacre", "Prudence", "Ebony", "Camron", "Jerrold", "Vivyan", "Randall",
- "Donna", "Misty", "Damon", "Selby", "Esmund", "Rian", "Garry", "Julius", "Raelene", "Clement", "Dom",
- "Tibby", "Moss", "Millicent", "Gwendoline", "Berry", "Ashleigh", "Lilac", "Quin", "Vere", "Creighton",
- "Harriet", "Malvina", "Lianne", "Pearle", "Kizzie", "Kara", "Petula", "Jeanie", "Maria", "Pacey",
- "Victoria", "Huey", "Toni", "Rose", "Wallis", "Diggory", "Josiah", "Delma", "Keysha", "Channing", "Prue",
- "Lee", "Ryan", "Sidney", "Valerie", "Clancy", "Ezra", "Gilbert", "Clare", "Laz", "Crofton", "Mike",
- "Annabella", "Tara", "Eldred", "Arthur", "Jaylon", "Peronel", "Paden", "Dot", "Marian", "Amyas", "Alexus",
- "Esmond", "Abbie", "Stanley", "Brittani", "Vickie", "Errol", "Kimberlee", "Uland", "Ebenezer", "Howie",
- "Eveline", "Andrea", "Trish", "Hopkin", "Bryanna", "Temperance", "Valarie", "Femie", "Alix", "Terrell",
- "Lewin", "Lorrin", "Happy", "Micah", "Rachyl", "Sloan", "Gertrude", "Elizabeth", "Dorris", "Andra", "Bram",
- "Gary", "Jeannine", "Maurene", "Irene", "Yolonda", "Jonty", "Coleen", "Cecelia", "Chantal", "Stuart",
- "Caris", "Ros", "Kaleigh", "Mirabelle", "Kolby", "Primrose", "Susannah", "Ginny", "Jinny", "Dolly",
- "Lettice", "Sonny", "Melva", "Ernest", "Garret", "Reagan", "Trenton", "Gallagher", "Edwin", "Nikolas",
- "Corrie", "Lynette", "Ettie", "Sly", "Debbi", "Eudora", "Brittney", "Tacey", "Marius", "Anima", "Gordon",
- "Olivia", "Kortney", "Shantel", "Kolleen", "Nevaeh", "Buck", "Sera", "Liliana", "Aric", "Kalyn", "Mick",
- "Libby", "Ingram", "Alexandria", "Darleen", "Jacklyn", "Hughie", "Tyler", "Aida", "Ronda", "Deemer",
- "Taryn", "Laureen", "Samantha", "Dave", "Hardy", "Baldric", "Montgomery", "Gus", "Ellis", "Titania", "Luke",
- "Chase", "Haidee", "Mayra", "Isabell", "Trinity", "Milo", "Abigail", "Tacita", "Meg", "Hervey", "Natasha",
- "Sadie", "Holden", "Dee", "Mansel", "Perry", "Randi", "Frederica", "Georgina", "Kolour", "Debbie",
- "Seraphina", "Elspet", "Julyan", "Raven", "Zavia", "Jarvis", "Jaymes", "Grover", "Cairo", "Alea", "Jordon",
- "Braxton", "Donny", "Rhoda", "Tonya", "Bee", "Alyssia", "Ashlyn", "Reanna", "Lonny", "Arlene", "Deb",
- "Jane", "Nikole", "Bettina", "Harrison", "Tamzen", "Arielle", "Adelaide", "Faith", "Bridie", "Wilburn",
- "Fern", "Nan", "Shaw", "Zeke", "Alan", "Dene", "Gina", "Alexa", "Bailey", "Sal", "Tammy", "Maximillian",
- "America", "Sylvana", "Fitz", "Mo", "Marissa", "Cass", "Eldon", "Wilfrid", "Tel", "Joann", "Kendra",
- "Tolly", "Leanne", "Ferdie", "Haven", "Lucas", "Marlee", "Cyrilla", "Red", "Phoenix", "Jazmin", "Carin",
- "Gena", "Lashonda", "Tucker", "Genette", "Kizzy", "Winifred", "Melody", "Keely", "Kaylyn", "Radcliff",
- "Lettie", "Foster", "Lyndsey", "Nicholas", "Farley", "Louisa", "Dana", "Dortha", "Francine", "Doran",
- "Bonita", "Hal", "Sawyer", "Reginald", "Aislin", "Nathan", "Baylee", "Abilene", "Ladonna", "Maurine",
- "Shelly", "Deandre", "Jasmin", "Roderic", "Tiffany", "Amanda", "Verity", "Wilford", "Gayelord", "Whitney",
- "Demelza", "Kenton", "Alberta", "Kyra", "Tabitha", "Sampson", "Korey", "Lillian", "Edison", "Clayton",
- "Steph", "Maya", "Dusty", "Jim", "Ronny", "Adrianne", "Bernard", "Harris", "Kiley", "Alexander", "Kisha",
- "Ethalyn", "Patience", "Briony", "Indigo", "Aureole", "Makenzie", "Molly", "Sherilyn", "Barry", "Laverne",
- "Hunter", "Rocky", "Tyreek", "Madalyn", "Phyliss", "Chet", "Beatrice", "Faye", "Lavina", "Madelyn",
- "Tracey", "Gyles", "Patti", "Carlyn", "Stephanie", "Jackalyn", "Larrie", "Kimmy", "Isolda", "Emelina",
- "Lis", "Zillah", "Cody", "Sheard", "Rufus", "Paget", "Mae", "Rexanne", "Luvinia", "Tamsen", "Rosanna",
- "Greig", "Stacia", "Mabelle", "Quianna", "Lotus", "Delice", "Bradford", "Angus", "Cosmo", "Earlene",
- "Adrian", "Arlie", "Noelle", "Sabella", "Isa", "Adelle", "Innocent", "Kirby", "Trixie", "Kenelm", "Nelda",
- "Melia", "Kendal", "Dorinda", "Placid", "Linette", "Kam", "Sherisse", "Evan", "Ewart", "Janice", "Linton",
- "Jacaline", "Charissa", "Douglas", "Aileen", "Kemp", "Oli", "Amethyst", "Rosie", "Nigella", "Sherill",
- "Anderson", "Alanna", "Eric", "Claudia", "Jennifer", "Boniface", "Harriet", "Vernon", "Lucy", "Shawnee",
- "Gerard", "Cecily", "Romey", "Randall", "Wade", "Lux", "Dawson", "Gregg", "Kade", "Roxanne", "Melinda",
- "Rolland", "Rowanne", "Fannie", "Isidore", "Melia", "Harvie", "Salal", "Eleonor", "Jacquette", "Lavone",
- "Shanika", "Tarquin", "Janet", "Josslyn", "Maegan", "Augusta", "Aubree", "Francene", "Martie", "Marisa",
- "Tyreek", "Tatianna", "Caleb", "Sheridan", "Nellie", "Barbara", "Wat", "Jayla", "Esmaralda", "Graeme",
- "Lavena", "Jemima", "Nikolas", "Triston", "Portia", "Kyla", "Marcus", "Raeburn", "Jamison", "Earl", "Wren",
- "Leighton", "Lagina", "Lucasta", "Dina", "Amaranta", "Jessika", "Claud", "Bernard", "Winifred", "Ebba",
- "Sammi", "Gall", "Chloe", "Ottoline", "Herbert", "Janice", "Gareth", "Channing", "Caleigh", "Kailee",
- "Ralphie", "Tamzen", "Quincy", "Beaumont", "Albert", "Jadyn", "Violet", "Luanna", "Moriah", "Humbert",
- "Jed", "Leona", "Hale", "Mitch", "Marlin", "Nivek", "Darwin", "Dirk", "Liliana", "Meadow", "Bernadine",
- "Jorie", "Peyton", "Astra", "Roscoe", "Gina", "Lovell", "Jewel", "Romayne", "Rosy", "Imogene", "Margaretta",
- "Lorinda", "Hopkin", "Bobby", "Flossie", "Bennie", "Horatio", "Jonah", "Lyn", "Deana", "Juliana", "Blanch",
- "Wright", "Kendal", "Woodrow", "Tania", "Austyn", "Val", "Mona", "Charla", "Rudyard", "Pamela", "Raven",
- "Zena", "Nicola", "Kaelea", "Conor", "Virgil", "Sonnie", "Goodwin", "Christianne", "Linford", "Myron",
- "Denton", "Charita", "Brody", "Ginnie", "Harrison", "Jeanine", "Quin", "Isolda", "Zoie", "Pearce", "Margie",
- "Larrie", "Angelina", "Marcia", "Jessamine", "Delilah", "Dick", "Luana", "Delicia", "Lake", "Luvenia",
- "Vaughan", "Concordia", "Gayelord", "Cheyenne", "Felix", "Dorris", "Pen", "Kristeen", "Parris", "Everitt",
- "Josephina", "Amy", "Tommie", "Adrian", "April", "Rosaline", "Zachery", "Trace", "Phoebe", "Jenelle",
- "Kameron", "Katharine", "Media", "Colton", "Tad", "Quianna", "Kerenza", "Greta", "Luvinia", "Pete", "Tonya",
- "Beckah", "Barbra", "Jon", "Tetty", "Corey", "Sylvana", "Kizzy", "Korey", "Trey", "Haydee", "Penny",
- "Mandy", "Panda", "Coline", "Ramsey", "Sukie", "Annabel", "Sarina", "Corbin", "Suzanna", "Rob", "Duana",
- "Shell", "Jason", "Eddy", "Rube", "Roseann", "Celia", "Brianne", "Nerissa", "Jera", "Humphry", "Ashlynn",
- "Terrence", "Philippina", "Coreen", "Kolour", "Indiana", "Paget", "Marlyn", "Hester", "Isbel", "Ocean",
- "Harris", "Leslie", "Vere", "Monroe", "Isabelle", "Bertie", "Clitus", "Dave", "Alethea", "Lessie", "Louiza",
- "Madlyn", "Garland", "Wolf", "Lalo", "Donny", "Amabel", "Tianna", "Louie", "Susie", "Mackenzie", "Renie",
- "Tess", "Marmaduke", "Gwendolen", "Bettina", "Beatrix", "Esmund", "Minnie", "Carlie", "Barnabas", "Ruthie",
- "Honour", "Haylie", "Xavior", "Freddie", "Ericka", "Aretha", "Edie", "Madelina", "Anson", "Tabby",
- "Derrick", "Jocosa", "Deirdre", "Aislin", "Chastity", "Abigail", "Wynonna", "Zo", "Eldon", "Krystine",
- "Ghislaine", "Zavia", "Nolene", "Marigold", "Kelley", "Sylvester", "Odell", "George", "Laurene", "Franklyn",
- "Clarice", "Mo", "Dustin", "Debbi", "Lina", "Tony", "Acacia", "Hettie", "Natalee", "Marcie", "Brittany",
- "Elnora", "Rachel", "Dawn", "Basil", "Christal", "Anjelica", "Fran", "Tawny", "Delroy", "Tameka", "Lillie",
- "Ceara", "Deanna", "Deshaun", "Ken", "Bradford", "Justina", "Merle", "Draven", "Gretta", "Harriette",
- "Webster", "Nathaniel", "Anemone", "Coleen", "Ruth", "Chryssa", "Hortensia", "Saffie", "Deonne", "Leopold",
- "Harlan", "Lea", "Eppie", "Lucinda", "Tilda", "Fanny", "Titty", "Lockie", "Jepson", "Sherisse", "Maralyn",
- "Ethel", "Sly", "Ebenezer", "Canute", "Ella", "Freeman", "Reuben", "Olivette", "Nona", "Rik", "Amice",
- "Kristine", "Kathie", "Jayne", "Jeri", "Mckenna", "Bertram", "Kaylee", "Livia", "Gil", "Wallace", "Maryann",
- "Keeleigh", "Laurinda", "Doran", "Khloe", "Dakota", "Yaron", "Kimberleigh", "Gytha", "Doris", "Marylyn",
- "Benton", "Linnette", "Esther", "Jakki", "Rowina", "Marian", "Roselyn", "Norbert", "Maggie", "Caesar",
- "Phinehas", "Jerry", "Jasmine", "Antonette", "Miriam", "Monna", "Maryvonne", "Jacquetta", "Bernetta",
- "Napier", "Annie", "Gladwin", "Sheldon", "Aric", "Elouise", "Gawain", "Kristia", "Gabe", "Kyra", "Red",
- "Tod", "Dudley", "Lorraine", "Ryley", "Sabina", "Poppy", "Leland", "Aileen", "Eglantine", "Alicia", "Jeni",
- "Addy", "Tiffany", "Geffrey", "Lavina", "Collin", "Clover", "Vin", "Jerome", "Doug", "Vincent", "Florence",
- "Scarlet", "Celeste", "Desdemona", "Tiphanie", "Kassandra", "Ashton", "Madison", "Art", "Magdalene", "Iona",
- "Josepha", "Anise", "Ferne", "Derek", "Huffie", "Qiana", "Ysabel", "Tami", "Shannah", "Xavier", "Willard",
- "Winthrop", "Vickie", "Maura", "Placid", "Tiara", "Reggie", "Elissa", "Isa", "Chrysanta", "Jeff", "Bessie",
- "Terri", "Amilia", "Brett", "Daniella", "Damion", "Carolina", "Maximillian", "Travers", "Benjamin", "Oprah",
- "Darcy", "Yolanda", "Nicolina", "Crofton", "Jarrett", "Kaitlin", "Shauna", "Keren", "Bevis", "Kalysta",
- "Sharron", "Alyssa", "Blythe", "Zelma", "Caelie", "Norwood", "Billie", "Patrick", "Gary", "Cambria",
- "Tylar", "Mason", "Helen", "Melyssa", "Gene", "Gilberta", "Carter", "Herbie", "Harmonie", "Leola",
- "Eugenia", "Clint", "Pauletta", "Edwyna", "Georgina", "Teal", "Harper", "Izzy", "Dillon", "Kezia",
- "Evangeline", "Colene", "Madelaine", "Zilla", "Rudy", "Dottie", "Caris", "Morton", "Marge", "Tacey",
- "Parker", "Troy", "Liza", "Lewin", "Tracie", "Justine", "Dallas", "Linden", "Ray", "Loretta", "Teri",
- "Elvis", "Diane", "Julianna", "Manfred", "Denise", "Eireen", "Ann", "Kenith", "Linwood", "Kathlyn",
- "Bernice", "Shelley", "Oswald", "Amedeus", "Homer", "Tanzi", "Ted", "Ralphina", "Hyacinth", "Lotus",
- "Matthias", "Arlette", "Clark", "Cecil", "Elspeth", "Alvena", "Noah", "Millard", "Brenden", "Cole",
- "Philipa", "Nina", "Thelma", "Iantha", "Reid", "Jefferson", "Meg", "Elsie", "Shirlee", "Nathan", "Nancy",
- "Simona", "Racheal", "Carin", "Emory", "Delice", "Kristi", "Karaugh", "Kaety", "Tilly", "Em", "Alanis",
- "Darrin", "Jerrie", "Hollis", "Cary", "Marly", "Carita", "Jody", "Farley", "Hervey", "Rosalin", "Cuthbert",
- "Stewart", "Jodene", "Caileigh", "Briscoe", "Dolores", "Sheree", "Eustace", "Nigel", "Detta", "Barret",
- "Rowland", "Kenny", "Githa", "Zoey", "Adela", "Petronella", "Opal", "Coleman", "Niles", "Cyril", "Dona",
- "Alberic", "Allannah", "Jules", "Avalon", "Hadley", "Thomas", "Renita", "Calanthe", "Heron", "Shawnda",
- "Chet", "Malina", "Manny", "Rina", "Frieda", "Eveleen", "Deshawn", "Amos", "Raelene", "Paige", "Molly",
- "Nannie", "Ileen", "Brendon", "Milford", "Unice", "Rebeccah", "Caedmon", "Gae", "Doreen", "Vivian", "Louis",
- "Raphael", "Vergil", "Lise", "Glenn", "Karyn", "Terance", "Reina", "Jake", "Gordon", "Wisdom", "Isiah",
- "Gervase", "Fern", "Marylou", "Roddy", "Justy", "Derick", "Shantelle", "Adam", "Chantel", "Madoline",
- "Emmerson", "Lexie", "Mickey", "Stephen", "Dane", "Stacee", "Elwin", "Tracey", "Alexandra", "Ricky", "Ian",
- "Kasey", "Rita", "Alanna", "Georgene", "Deon", "Zavier", "Ophelia", "Deforest", "Lowell", "Zubin", "Hardy",
- "Osmund", "Tabatha", "Debby", "Katlyn", "Tallulah", "Priscilla", "Braden", "Wil", "Keziah", "Jen", "Aggie",
- "Korbin", "Lemoine", "Barnaby", "Tranter", "Goldie", "Roderick", "Trina", "Emery", "Pris", "Sidony",
- "Adelle", "Tate", "Wilf", "Zola", "Brande", "Chris", "Calanthia", "Lilly", "Kaycee", "Lashonda", "Jasmin",
- "Elijah", "Shantel", "Simon", "Rosalind", "Jarod", "Kaylie", "Corrine", "Joselyn", "Archibald",
- "Mariabella", "Winton", "Merlin", "Chad", "Ursula", "Kristopher", "Hewie", "Adrianna", "Lyndsay", "Jasmyn",
- "Tim", "Evette", "Margaret", "Samson", "Bronte", "Terence", "Leila", "Candice", "Tori", "Jamey",
- "Coriander", "Conrad", "Floyd", "Karen", "Lorin", "Maximilian", "Cairo", "Emily", "Yasmin", "Karolyn",
- "Bryan", "Lanny", "Kimberly", "Rick", "Chaz", "Krystle", "Lyric", "Laura", "Garrick", "Flip", "Monty",
- "Brendan", "Ermintrude", "Rayner", "Merla", "Titus", "Marva", "Patricia", "Leone", "Tracy", "Jaqueline",
- "Hallam", "Delores", "Cressida", "Carlyle", "Leann", "Kelcey", "Laurence", "Ryan", "Reynold", "Mark",
- "Collyn", "Audie", "Sammy", "Ellery", "Sallie", "Pamelia", "Adolph", "Lydia", "Titania", "Ron", "Bridger",
- "Aline", "Read", "Kelleigh", "Weldon", "Irving", "Garey", "Diggory", "Evander", "Kylee", "Deidre", "Ormond",
- "Laurine", "Reannon", "Arline", "Pat"
-
- };
-
- public static String[] jargon = { "wireless", "signal", "network", "3G", "plan", "touch-screen", "customer-service",
- "reachability", "voice-command", "shortcut-menu", "customization", "platform", "speed", "voice-clarity",
- "voicemail-service" };
-
- public static String[] vendors = { "at&t", "verizon", "t-mobile", "sprint", "motorola", "samsung", "iphone" };
-
- public static String[] org_list = { "Latsonity", "ganjalax", "Zuncan", "Lexitechno", "Hot-tech", "subtam",
- "Coneflex", "Ganjatax", "physcane", "Tranzap", "Qvohouse", "Zununoing", "jaydax", "Keytech", "goldendexon",
- "Villa-tech", "Trustbam", "Newcom", "Voltlane", "Ontohothex", "Ranhotfan", "Alphadax", "Transhigh",
- "kin-ron", "Doublezone", "Solophase", "Vivaace", "silfind", "Basecone", "sonstreet", "Freshfix",
- "Techitechi", "Kanelectrics", "linedexon", "Goldcity", "Newfase", "Technohow", "Zimcone", "Salthex",
- "U-ron", "Solfix", "whitestreet", "Xx-technology", "Hexviafind", "over-it", "Strongtone", "Tripplelane",
- "geomedia", "Scotcity", "Inchex", "Vaiatech", "Striptaxon", "Hatcom", "tresline", "Sanjodax", "freshdox",
- "Sumlane", "Quadlane", "Newphase", "overtech", "Voltbam", "Icerunin", "Fixdintex", "Hexsanhex", "Statcode",
- "Greencare", "U-electrics", "Zamcorporation", "Ontotanin", "Tanzimcare", "Groovetex", "Ganjastrip",
- "Redelectronics", "Dandamace", "Whitemedia", "strongex", "Streettax", "highfax", "Mathtech", "Xx-drill",
- "Sublamdox", "Unijobam", "Rungozoom", "Fixelectrics", "Villa-dox", "Ransaofan", "Plexlane", "itlab",
- "Lexicone", "Fax-fax", "Viatechi", "Inchdox", "Kongreen", "Doncare", "Y-geohex", "Opeelectronics",
- "Medflex", "Dancode", "Roundhex", "Labzatron", "Newhotplus", "Sancone", "Ronholdings", "Quoline",
- "zoomplus", "Fix-touch", "Codetechno", "Tanzumbam", "Indiex", "Canline" };
-
- public static void main(String[] args) throws Exception {
- DataGeneratorForSpatialIndexEvaluation dg = new DataGeneratorForSpatialIndexEvaluation(
- new InitializationInfo());
- TweetMessageIterator tmi = dg.new TweetMessageIterator(1, new GULongIDGenerator(0, (byte) 0));
- int len = 0;
- int count = 0;
- while (tmi.hasNext()) {
- String tm = tmi.next().toString();
- System.out.println(tm);
- len += tm.length();
- ++count;
- }
- System.out.println(DataGeneratorForSpatialIndexEvaluation.DUMMY_SIZE_ADJUSTER.length());
- System.out.println(len);
- System.out.println(count);
- System.out.println(len / count);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/GULongIDGenerator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/GULongIDGenerator.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/GULongIDGenerator.java
deleted file mode 100644
index 00f3bcb..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/external/data/GULongIDGenerator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.tools.external.data;
-
-import java.nio.ByteBuffer;
-import java.util.concurrent.atomic.AtomicLong;
-
-public class GULongIDGenerator {
-
- private final int partition;
- private final long baseValue;
- private final AtomicLong nextValue;
-
- public GULongIDGenerator(int partition, byte seed) {
- this.partition = partition;
- ByteBuffer buffer = ByteBuffer.allocate(8);
- buffer.put(seed);
- buffer.put((byte) partition);
- buffer.putInt(0);
- buffer.putShort((short) 0);
- buffer.flip();
- this.baseValue = new Long(buffer.getLong());
- this.nextValue = new AtomicLong(baseValue);
- }
-
- public long getNextULong() {
- return nextValue.incrementAndGet();
- }
-
- public int getPartition() {
- return partition;
- }
-
-}
[5/8] asterixdb git commit: Move Twitter Firehose Datasource to Test
Source Folder
Posted by mb...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/stream/TwitterFirehoseStreamFactory.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/stream/TwitterFirehoseStreamFactory.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/stream/TwitterFirehoseStreamFactory.java
new file mode 100644
index 0000000..77b8df1
--- /dev/null
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/stream/TwitterFirehoseStreamFactory.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.input.stream;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.asterix.external.api.AsterixInputStream;
+import org.apache.asterix.external.api.IInputStreamFactory;
+import org.apache.asterix.external.input.stream.TwitterFirehoseInputStream;
+import org.apache.asterix.runtime.util.ClusterStateManager;
+import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+/**
+ * Factory class for creating @see{TwitterFirehoseFeedAdapter}. The adapter
+ * simulates a twitter firehose with tweets being "pushed" into Asterix at a
+ * configurable rate measured in terms of TPS (tweets/second). The stream of
+ * tweets lasts for a configurable duration (measured in seconds).
+ */
+public class TwitterFirehoseStreamFactory implements IInputStreamFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Degree of parallelism for feed ingestion activity. Defaults to 1. This
+ * determines the count constraint for the ingestion operator.
+ **/
+ private static final String KEY_INGESTION_CARDINALITY = "ingestion-cardinality";
+
+ /**
+ * The absolute locations where ingestion operator instances will be placed.
+ **/
+ private static final String KEY_INGESTION_LOCATIONS = "ingestion-location";
+
+ private Map<String, String> configuration;
+
+ @Override
+ public AlgebricksAbsolutePartitionConstraint getPartitionConstraint() {
+ String ingestionCardinalityParam = configuration.get(KEY_INGESTION_CARDINALITY);
+ String ingestionLocationParam = configuration.get(KEY_INGESTION_LOCATIONS);
+ String[] locations = null;
+ if (ingestionLocationParam != null) {
+ locations = ingestionLocationParam.split(",");
+ }
+ int count = locations != null ? locations.length : 1;
+ if (ingestionCardinalityParam != null) {
+ count = Integer.parseInt(ingestionCardinalityParam);
+ }
+
+ List<String> chosenLocations = new ArrayList<>();
+ String[] availableLocations = locations != null ? locations
+ : ClusterStateManager.INSTANCE.getParticipantNodes().toArray(new String[] {});
+ for (int i = 0, k = 0; i < count; i++, k = (k + 1) % availableLocations.length) {
+ chosenLocations.add(availableLocations[k]);
+ }
+ return new AlgebricksAbsolutePartitionConstraint(chosenLocations.toArray(new String[] {}));
+ }
+
+ @Override
+ public DataSourceType getDataSourceType() {
+ return DataSourceType.STREAM;
+ }
+
+ @Override
+ public void configure(Map<String, String> configuration) {
+ this.configuration = configuration;
+ }
+
+ @Override
+ public boolean isIndexible() {
+ return false;
+ }
+
+ @Override
+ public AsterixInputStream createInputStream(IHyracksTaskContext ctx, int partition) throws HyracksDataException {
+ try {
+ return new TwitterFirehoseInputStream(configuration, ctx, partition);
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/pom.xml b/asterixdb/asterix-tools/pom.xml
index 011d44b..c039c48 100644
--- a/asterixdb/asterix-tools/pom.xml
+++ b/asterixdb/asterix-tools/pom.xml
@@ -54,6 +54,14 @@
<include>**/DEPENDENCIES*</include>
</includes>
</configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
</plugin>
</plugins>
</build>
@@ -63,19 +71,20 @@
<groupId>org.apache.asterix</groupId>
<artifactId>asterix-lang-aql</artifactId>
<version>${project.version}</version>
- <scope>compile</scope>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.asterix</groupId>
<artifactId>asterix-algebra</artifactId>
<version>${project.version}</version>
- <scope>compile</scope>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.asterix</groupId>
<artifactId>asterix-external-data</artifactId>
<version>${project.version}</version>
- <scope>compile</scope>
+ <type>test-jar</type>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.asterix</groupId>
@@ -88,8 +97,7 @@
<groupId>org.apache.asterix</groupId>
<artifactId>asterix-metadata</artifactId>
<version>${project.version}</version>
- <scope>compile</scope>
+ <scope>test</scope>
</dependency>
</dependencies>
-
</project>
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/AdgClientDriver.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/AdgClientDriver.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/AdgClientDriver.java
deleted file mode 100644
index 8a1adb0..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/AdgClientDriver.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.tools.datagen;
-
-import java.io.File;
-
-import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.CmdLineParser;
-
-public class AdgClientDriver {
-
- public static final int NUMBER_OF_ARGUMENTS = 2;
-
- public static class AdgClientConfig {
-
- @Argument(index = 0, required = true, metaVar = "ARG1", usage = "The file containing the annotated schema.")
- private File schemaFile;
-
- @Argument(index = 1, required = true, metaVar = "ARG2", usage = "The output directory path.")
- private File outputDir;
- }
-
- public static void main(String[] args) throws Exception {
- AdgClientConfig acc = new AdgClientConfig();
- CmdLineParser cmdParser = new CmdLineParser(acc);
- try {
- cmdParser.parseArgument(args);
- } catch (Exception e) {
- cmdParser.printUsage(System.err);
- throw e;
- }
- AdmDataGen adg = new AdmDataGen(acc.schemaFile, acc.outputDir);
- adg.init();
- adg.dataGen();
- }
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/AdmDataGen.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/AdmDataGen.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/AdmDataGen.java
deleted file mode 100644
index 2918575..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/AdmDataGen.java
+++ /dev/null
@@ -1,1020 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.tools.datagen;
-
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
-import org.apache.asterix.common.annotations.AutoDataGen;
-import org.apache.asterix.common.annotations.DateBetweenYearsDataGen;
-import org.apache.asterix.common.annotations.DatetimeAddRandHoursDataGen;
-import org.apache.asterix.common.annotations.DatetimeBetweenYearsDataGen;
-import org.apache.asterix.common.annotations.FieldIntervalDataGen;
-import org.apache.asterix.common.annotations.FieldValFileDataGen;
-import org.apache.asterix.common.annotations.FieldValFileSameIndexDataGen;
-import org.apache.asterix.common.annotations.IRecordFieldDataGen;
-import org.apache.asterix.common.annotations.IRecordTypeAnnotation;
-import org.apache.asterix.common.annotations.IRecordTypeAnnotation.Kind;
-import org.apache.asterix.common.annotations.InsertRandIntDataGen;
-import org.apache.asterix.common.annotations.ListDataGen;
-import org.apache.asterix.common.annotations.ListValFileDataGen;
-import org.apache.asterix.common.annotations.RecordDataGenAnnotation;
-import org.apache.asterix.common.annotations.TypeDataGen;
-import org.apache.asterix.common.annotations.UndeclaredFieldsDataGen;
-import org.apache.asterix.common.exceptions.ACIDException;
-import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.common.transactions.JobId;
-import org.apache.asterix.lang.aql.parser.AQLParserFactory;
-import org.apache.asterix.lang.aql.parser.ParseException;
-import org.apache.asterix.lang.common.base.IParser;
-import org.apache.asterix.lang.common.base.IParserFactory;
-import org.apache.asterix.lang.common.base.Statement;
-import org.apache.asterix.metadata.MetadataException;
-import org.apache.asterix.metadata.MetadataTransactionContext;
-import org.apache.asterix.om.types.ARecordType;
-import org.apache.asterix.om.types.ATypeTag;
-import org.apache.asterix.om.types.AUnionType;
-import org.apache.asterix.om.types.AbstractCollectionType;
-import org.apache.asterix.om.types.BuiltinType;
-import org.apache.asterix.om.types.IAType;
-import org.apache.asterix.om.types.TypeSignature;
-import org.apache.asterix.om.util.NonTaggedFormatUtil;
-import org.apache.asterix.tools.translator.ADGenDmlTranslator;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
-import org.apache.hyracks.algebricks.data.utils.WriteValueTools;
-
-public class AdmDataGen {
-
- class DataGeneratorContext {
- private Map<File, String[]> fileToLoadedDataMap = new HashMap<File, String[]>();
-
- public Map<File, String[]> getFileToLoadedDataMap() {
- return fileToLoadedDataMap;
- }
- }
-
- public static void printDate(int year, int month, int day, PrintStream out) throws IOException {
- WriteValueTools.writeInt(year, out);
- out.print("-");
- if (month < 10) {
- out.print("0");
- }
- WriteValueTools.writeInt(month, out);
- out.print("-");
- if (day < 10) {
- out.print("0");
- }
- WriteValueTools.writeInt(day, out);
- }
-
- abstract class AbstractValueGenerator {
- protected PrintStream out;
- protected DataGeneratorContext ctx;
-
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- this.out = out;
- this.ctx = ctx;
- }
-
- public abstract void generate() throws IOException;
- }
-
- abstract class RandomValueGenerator extends AbstractValueGenerator {
- protected Random rnd;
-
- @Override
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- super.init(out, ctx);
- this.rnd = new Random(51);
- }
-
- }
-
- class IntAutoGenerator extends AbstractValueGenerator {
-
- private final int initValue;
- private int val;
-
- public IntAutoGenerator(int initValue) {
- this.initValue = initValue;
- }
-
- @Override
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- super.init(out, ctx);
- val = initValue;
- }
-
- @Override
- public void generate() throws IOException {
- WriteValueTools.writeInt(val, out);
- val++;
- }
-
- }
-
- class LongAutoGenerator extends AbstractValueGenerator {
-
- private final long initValue;
- private long val;
-
- public LongAutoGenerator(long initValue) {
- this.initValue = initValue;
- }
-
- @Override
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- super.init(out, ctx);
- val = initValue;
- }
-
- @Override
- public void generate() throws IOException {
- WriteValueTools.writeLong(val, out);
- out.print("i64");
- val++;
- }
-
- }
-
- class StringFromArrayGenerator extends RandomValueGenerator {
- private final String[][] array;
- private int lastIndex;
- private final String constructor;
- private String[] chosen;
-
- public StringFromArrayGenerator(String[][] array, String constructor) {
- this.array = array;
- this.constructor = constructor;
- }
-
- @Override
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- super.init(out, ctx);
- this.lastIndex = -1;
- this.chosen = new String[array.length];
- }
-
- @Override
- public void generate() throws IOException {
- for (int i = 0; i < array.length; i++) {
- lastIndex = Math.abs(rnd.nextInt()) % array[i].length;
- chosen[i] = array[i][lastIndex];
- }
- if (constructor != null) {
- out.print(constructor);
- out.print("(");
- }
- out.print("\"");
- for (int i = 0; i < chosen.length; i++) {
- out.print(chosen[i]);
- }
- out.print("\"");
- if (constructor != null) {
- out.print(")");
- }
- }
-
- public int getLastIndex() {
- return lastIndex;
- }
- }
-
- abstract class AbstractCollectionDataGenerator extends RandomValueGenerator {
- protected final AbstractCollectionType act;
- protected final int min;
- protected final int max;
- protected final String startList;
- protected final String endList;
-
- public AbstractCollectionDataGenerator(AbstractCollectionType act, int min, int max) {
- this.act = act;
- this.min = min;
- this.max = max;
- if (act.getTypeTag() == ATypeTag.ORDEREDLIST) {
- startList = "[";
- endList = "]";
- } else {
- startList = "{{";
- endList = "}}";
- }
- }
-
- }
-
- class ListDataGenerator extends AbstractCollectionDataGenerator {
-
- private AbstractValueGenerator itemGen;
-
- public ListDataGenerator(AbstractCollectionType act, int min, int max) {
- super(act, min, max);
- }
-
- @Override
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- super.init(out, ctx);
- IAType t = act.getItemType();
- if (t.getTypeTag() != ATypeTag.RECORD) {
- throw new NotImplementedException("list annotation only works with record item types for now.");
- }
- ARecordType rt = (ARecordType) t;
- RecordDataGenAnnotation dga = firstDataGenAnnotation(rt);
- if (dga == null) {
- throw new Exception("No annotation on item type " + t);
- }
- itemGen = new RecordGenerator(rt, dga, null);
- itemGen.init(out, ctx);
- }
-
- @Override
- public void generate() throws IOException {
- out.print(startList);
- int numItems = rnd.nextInt(max - min + 1) + min;
- for (int i = 0; i < numItems; i++) {
- if (i > 0) {
- out.print(", ");
- }
- itemGen.generate();
- }
- out.print(endList);
- }
-
- }
-
- class ListFromArrayGenerator extends AbstractCollectionDataGenerator {
-
- private final String[] array;
- private String constructor;
-
- public ListFromArrayGenerator(AbstractCollectionType act, String[] array, int min, int max) {
- super(act, min, max);
- this.array = array;
- }
-
- @Override
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- super.init(out, ctx);
- if (act.getItemType().getTypeTag() == ATypeTag.STRING) {
- constructor = null;
- } else {
- constructor = getConstructor(act.getItemType());
- }
- }
-
- @Override
- public void generate() throws IOException {
- out.print(startList);
- int numItems = rnd.nextInt(max - min + 1) + min;
- for (int i = 0; i < numItems; i++) {
- if (i > 0) {
- out.print(", ");
- }
- int c = Math.abs(rnd.nextInt()) % array.length;
- if (constructor != null) {
- out.print(constructor);
- out.print("(");
- }
- out.print("\"");
- out.print(array[c]);
- out.print("\"");
- if (constructor != null) {
- out.print(")");
- }
- }
- out.print(endList);
- }
-
- }
-
- class StringFromArraySameIndexGenerator extends AbstractValueGenerator {
- private final String[] array;
- private final StringFromArrayGenerator sfag;
- private final String constructor;
-
- public StringFromArraySameIndexGenerator(String[] array, StringFromArrayGenerator sfag, String constructor) {
- this.array = array;
- this.sfag = sfag;
- this.constructor = constructor;
- }
-
- @Override
- public void generate() throws IOException {
- String val = array[sfag.getLastIndex()];
- if (constructor != null) {
- out.print(constructor);
- out.print("(");
- }
- out.print("\"");
- out.print(val);
- out.print("\"");
- if (constructor != null) {
- out.print(")");
- }
- }
- }
-
- class IntIntervalGenerator extends RandomValueGenerator {
-
- private final int min;
- private final int max;
- private final String prefix;
- private final String suffix;
-
- public IntIntervalGenerator(int min, int max, String prefix, String suffix) {
- this.min = min;
- this.max = max;
- this.prefix = prefix;
- this.suffix = suffix;
- }
-
- @Override
- public void generate() throws IOException {
- int v = Math.abs(rnd.nextInt() % (max - min + 1)) + min;
- if (prefix != null) {
- out.print(prefix);
- }
- WriteValueTools.writeInt(v, out);
- if (suffix != null) {
- out.print(suffix);
- }
- }
-
- }
-
- class LongIntervalGenerator extends RandomValueGenerator {
-
- private final long min;
- private final long max;
- private final String prefix;
- private final String suffix;
-
- public LongIntervalGenerator(long min, long max, String prefix, String suffix) {
- this.min = min;
- this.max = max;
- this.prefix = prefix;
- this.suffix = suffix;
- }
-
- @Override
- public void generate() throws IOException {
- long v = Math.abs(rnd.nextLong() % (max - min + 1)) + min;
- if (prefix != null) {
- out.print(prefix);
- }
- WriteValueTools.writeLong(v, out);
- if (suffix != null) {
- out.print(suffix);
- }
- }
-
- }
-
- class DoubleIntervalGenerator extends RandomValueGenerator {
-
- private final double min;
- private final double max;
- private final String prefix;
- private final String suffix;
-
- public DoubleIntervalGenerator(double min, double max, String prefix, String suffix) {
- this.min = min;
- this.max = max;
- this.prefix = prefix;
- this.suffix = suffix;
- }
-
- @Override
- public void generate() throws IOException {
- double v = Math.abs(rnd.nextDouble() % (max - min)) + min;
- if (prefix != null) {
- out.print(prefix);
- }
- out.print(v);
- if (suffix != null) {
- out.print(suffix);
- }
- }
-
- }
-
- class InsertRandIntGenerator extends RandomValueGenerator {
-
- private final String str1;
- private final String str2;
-
- public InsertRandIntGenerator(String str1, String str2) {
- this.str1 = "\"" + str1;
- this.str2 = str2 + "\"";
- }
-
- @Override
- public void generate() throws IOException {
- int v = Math.abs(rnd.nextInt());
- out.print(str1);
- WriteValueTools.writeInt(v, out);
- out.print(str2);
- }
-
- }
-
- interface AccessibleDateGenerator {
- public int getYear();
-
- public int getMonth();
-
- public int getDay();
- }
-
- abstract class DateGenerator extends RandomValueGenerator implements AccessibleDateGenerator {
-
- private int year;
- private int month;
- private int day;
-
- protected void generateDate(int minYear, int maxYear) throws IOException {
- year = rnd.nextInt(maxYear - minYear + 1) + minYear;
- month = Math.abs(rnd.nextInt()) % 12 + 1;
- day = Math.abs(rnd.nextInt()) % 28 + 1;
- printDate(year, month, day, out);
- }
-
- @Override
- public int getYear() {
- return year;
- }
-
- @Override
- public int getMonth() {
- return month;
- }
-
- @Override
- public int getDay() {
- return day;
- }
- }
-
- class DateBetweenYearsGenerator extends DateGenerator {
-
- private final int minYear;
- private final int maxYear;
-
- public DateBetweenYearsGenerator(int minYear, int maxYear) {
- this.minYear = minYear;
- this.maxYear = maxYear;
- }
-
- @Override
- public void generate() throws IOException {
- out.print("date(\"");
- generateDate(minYear, maxYear);
- out.print("\")");
- }
-
- }
-
- interface AccessibleDatetimeGenerator extends AccessibleDateGenerator {
- public int getHour();
-
- public int getMinute();
-
- public int getSecond();
- }
-
- class DatetimeBetweenYearsGenerator extends DateGenerator implements AccessibleDatetimeGenerator {
- private final int minYear;
- private final int maxYear;
- private int hour;
-
- public DatetimeBetweenYearsGenerator(int minYear, int maxYear) {
- this.minYear = minYear;
- this.maxYear = maxYear;
- }
-
- @Override
- public void generate() throws IOException {
- out.print("datetime(\"");
- generateDate(minYear, maxYear);
- out.print("T");
- hour = rnd.nextInt(24);
- if (hour < 10) {
- out.print("0");
- }
- WriteValueTools.writeInt(hour, out);
- out.print(":00:00\")");
- }
-
- @Override
- public int getHour() {
- return hour;
- }
-
- @Override
- public int getMinute() {
- return 0;
- }
-
- @Override
- public int getSecond() {
- return 0;
- }
-
- }
-
- class DatetimeAddRandHoursGenerator extends RandomValueGenerator {
-
- private final int minHours;
- private final int maxHours;
- private final AccessibleDatetimeGenerator adtg;
-
- public DatetimeAddRandHoursGenerator(int minHours, int maxHours, AccessibleDatetimeGenerator adtg) {
- this.minHours = minHours;
- this.maxHours = maxHours;
- this.adtg = adtg;
- }
-
- @Override
- public void generate() throws IOException {
- int addHours = rnd.nextInt(maxHours - minHours + 1) + minHours;
-
- out.print("datetime(\"");
- printDate(adtg.getYear(), adtg.getMonth(), adtg.getDay(), out);
- out.print("T");
- int h = adtg.getHour() + addHours;
- if (h > 23) {
- h = 23;
- }
- if (h < 10) {
- out.print("0");
- }
- WriteValueTools.writeInt(h, out);
- out.print(":");
- int m = adtg.getMinute();
- if (m < 10) {
- out.print("0");
- }
- WriteValueTools.writeInt(m, out);
- out.print(":");
- int s = adtg.getSecond();
- if (s < 10) {
- out.print("0");
- }
- WriteValueTools.writeInt(s, out);
- out.print("\")");
- }
-
- }
-
- class GenFieldsIntGenerator extends RandomValueGenerator {
- private final int minFields;
- private final int maxFields;
- private final String prefix;
- private final int startIndex;
- private String[] fieldNames;
- private int[] id;
- private int[] x;
-
- public GenFieldsIntGenerator(int startIndex, int minFields, int maxFields, String prefix) {
- this.startIndex = startIndex;
- this.minFields = minFields;
- this.maxFields = maxFields;
- this.prefix = prefix;
- }
-
- @Override
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- super.init(out, ctx);
- fieldNames = new String[maxFields];
- for (int i = 0; i < maxFields; i++) {
- fieldNames[i] = prefix + "_" + i;
- }
- id = new int[maxFields];
- for (int i = 0; i < maxFields; i++) {
- id[i] = i;
- }
- x = new int[maxFields];
- }
-
- @Override
- public void generate() throws IOException {
- int numFields = rnd.nextInt(maxFields - minFields + 1) + minFields;
- System.arraycopy(id, 0, x, 0, maxFields);
- int n = numFields;
- boolean first = startIndex < 1;
- while (n > 0) {
- int c = rnd.nextInt(n);
- if (first) {
- first = false;
- } else {
- out.print(",");
- }
- out.print(" \"");
- out.print(fieldNames[x[c]]);
- out.print("\": ");
- WriteValueTools.writeInt(Math.abs(rnd.nextInt()), out);
- x[c] = x[n - 1];
- n--;
- }
- }
- }
-
- class RecordGenerator extends RandomValueGenerator {
-
- private AbstractValueGenerator[] declaredFieldsGenerators;
- private boolean[] nullable;
- private AbstractValueGenerator undeclaredFieldsGenerator;
- private final ARecordType recType;
- private final RecordDataGenAnnotation annot;
- private final String printAfter;
-
- public RecordGenerator(ARecordType type, RecordDataGenAnnotation annot, String printAfter) {
- this.recType = type;
- this.annot = annot;
- this.printAfter = printAfter;
- }
-
- @Override
- public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
- super.init(out, ctx);
- if (declaredFieldsGenerators == null) {
- int m = annot.getDeclaredFieldsDatagen().length;
- declaredFieldsGenerators = new AbstractValueGenerator[m];
- nullable = new boolean[m];
- for (int i = 0; i < m; i++) {
- IAType ti = recType.getFieldTypes()[i];
- if (NonTaggedFormatUtil.isOptional(ti)) {
- ti = ((AUnionType) ti).getActualType();
- nullable[i] = true;
- }
- IRecordFieldDataGen rfdg = annot.getDeclaredFieldsDatagen()[i];
- if (rfdg == null) {
- if (ti.getTypeTag() == ATypeTag.RECORD) {
- ARecordType rt = (ARecordType) ti;
- RecordDataGenAnnotation dga = null;
- for (IRecordTypeAnnotation annot : rt.getAnnotations()) {
- if (annot.getKind() == Kind.RECORD_DATA_GEN) {
- dga = (RecordDataGenAnnotation) annot;
- break;
- }
- }
- if (dga != null) {
- declaredFieldsGenerators[i] = new RecordGenerator(rt, dga, null);
- continue;
- }
- }
- if (declaredFieldsGenerators[i] == null) {
- throw new Exception("No data generator annotation for field " + recType.getFieldNames()[i]
- + " in type " + recType);
- }
- }
- switch (rfdg.getKind()) {
- case VALFILE: {
- FieldValFileDataGen vf = (FieldValFileDataGen) rfdg;
- int numFiles = vf.getFiles().length;
- String[][] a = new String[numFiles][];
- for (int k = 0; k < numFiles; k++) {
- File f = vf.getFiles()[k];
- a[k] = ctx.getFileToLoadedDataMap().get(f);
- if (a[k] == null) {
- a[k] = readFileAsStringArray(f);
- ctx.getFileToLoadedDataMap().put(f, a[k]);
- }
- }
- String constructor;
- if (ti.getTypeTag() == ATypeTag.STRING) {
- constructor = null;
- } else {
- constructor = getConstructor(ti);
- }
- declaredFieldsGenerators[i] = new StringFromArrayGenerator(a, constructor);
- break;
- }
- case LISTVALFILE: {
- ListValFileDataGen lvf = (ListValFileDataGen) rfdg;
- String[] a = ctx.getFileToLoadedDataMap().get(lvf.getFile());
- if (a == null) {
- a = readFileAsStringArray(lvf.getFile());
- ctx.getFileToLoadedDataMap().put(lvf.getFile(), a);
- }
- if (ti.getTypeTag() != ATypeTag.ORDEREDLIST && ti.getTypeTag() != ATypeTag.UNORDEREDLIST) {
- throw new Exception(
- "list-val-file annotation cannot be used for field of type " + ti.getTypeTag());
- }
- AbstractCollectionType act = (AbstractCollectionType) ti;
- declaredFieldsGenerators[i] = new ListFromArrayGenerator(act, a, lvf.getMin(),
- lvf.getMax());
- break;
- }
- case VALFILESAMEINDEX: {
- FieldValFileSameIndexDataGen vfsi = (FieldValFileSameIndexDataGen) rfdg;
- String[] a = ctx.getFileToLoadedDataMap().get(vfsi.getFile());
- if (a == null) {
- a = readFileAsStringArray(vfsi.getFile());
- ctx.getFileToLoadedDataMap().put(vfsi.getFile(), a);
- }
- StringFromArrayGenerator sfag = null;
- for (int j = 0; j < i; j++) {
- if (recType.getFieldNames()[j].equals(vfsi.getSameAsField())) {
- if (declaredFieldsGenerators[j] instanceof StringFromArrayGenerator) {
- sfag = (StringFromArrayGenerator) declaredFieldsGenerators[j];
- break;
- } else {
- throw new Exception("Data generator for field " + recType.getFieldNames()[j]
- + " is not based on values from a text file, as required by generator for field "
- + recType.getFieldNames()[i]);
- }
- }
- }
- if (sfag == null) {
- throw new Exception("Couldn't find field " + vfsi.getSameAsField() + " before field "
- + recType.getFieldNames()[i]);
- }
- String constructor;
- if (ti.getTypeTag() == ATypeTag.STRING) {
- constructor = null;
- } else {
- constructor = getConstructor(ti);
- }
- declaredFieldsGenerators[i] = new StringFromArraySameIndexGenerator(a, sfag, constructor);
- break;
- }
- case INTERVAL: {
- FieldIntervalDataGen fi = (FieldIntervalDataGen) rfdg;
- String prefix = null;
- String suffix = null;
- if (ti.getTypeTag() == ATypeTag.STRING) {
- prefix = "\"";
- suffix = "\"";
- }
- switch (fi.getValueType()) {
- case INT: {
- declaredFieldsGenerators[i] = new IntIntervalGenerator(
- Integer.parseInt(fi.getMin()), Integer.parseInt(fi.getMax()), prefix,
- suffix);
- break;
- }
- case LONG: {
- declaredFieldsGenerators[i] = new LongIntervalGenerator(Long.parseLong(fi.getMin()),
- Long.parseLong(fi.getMax()), prefix, suffix);
- break;
- }
- case DOUBLE: {
- declaredFieldsGenerators[i] = new DoubleIntervalGenerator(
- Double.parseDouble(fi.getMin()), Double.parseDouble(fi.getMax()), prefix,
- suffix);
- break;
- }
- default: {
- throw new NotImplementedException();
- }
- }
- break;
- }
- case INSERTRANDINT: {
- InsertRandIntDataGen iri = (InsertRandIntDataGen) rfdg;
- declaredFieldsGenerators[i] = new InsertRandIntGenerator(iri.getStr1(), iri.getStr2());
- break;
- }
- case LIST: {
- ListDataGen l = (ListDataGen) rfdg;
- if (ti.getTypeTag() != ATypeTag.ORDEREDLIST && ti.getTypeTag() != ATypeTag.UNORDEREDLIST) {
- throw new Exception(
- "list-val-file annotation cannot be used for field of type " + ti.getTypeTag());
- }
- AbstractCollectionType act = (AbstractCollectionType) ti;
- declaredFieldsGenerators[i] = new ListDataGenerator(act, l.getMin(), l.getMax());
- break;
- }
- case DATEBETWEENYEARS: {
- DateBetweenYearsDataGen dby = (DateBetweenYearsDataGen) rfdg;
- declaredFieldsGenerators[i] = new DateBetweenYearsGenerator(dby.getMinYear(),
- dby.getMaxYear());
- break;
- }
- case DATETIMEBETWEENYEARS: {
- DatetimeBetweenYearsDataGen dtby = (DatetimeBetweenYearsDataGen) rfdg;
- declaredFieldsGenerators[i] = new DatetimeBetweenYearsGenerator(dtby.getMinYear(),
- dtby.getMaxYear());
- break;
- }
- case DATETIMEADDRANDHOURS: {
- DatetimeAddRandHoursDataGen dtarh = (DatetimeAddRandHoursDataGen) rfdg;
- AccessibleDatetimeGenerator adtg = null;
- for (int j = 0; j < i; j++) {
- if (recType.getFieldNames()[j].equals(dtarh.getAddToField())) {
- if (declaredFieldsGenerators[j] instanceof AccessibleDatetimeGenerator) {
- adtg = (AccessibleDatetimeGenerator) declaredFieldsGenerators[j];
- break;
- } else {
- throw new Exception("Data generator for field " + recType.getFieldNames()[j]
- + " is not based on accessible datetime values, as required by generator for field "
- + recType.getFieldNames()[i]);
- }
- }
- }
- if (adtg == null) {
- throw new Exception("Couldn't find field " + dtarh.getAddToField() + " before field "
- + recType.getFieldNames()[i]);
- }
- declaredFieldsGenerators[i] = new DatetimeAddRandHoursGenerator(dtarh.getMinHour(),
- dtarh.getMaxHour(), adtg);
- break;
- }
- case AUTO: {
- AutoDataGen auto = (AutoDataGen) rfdg;
- switch (ti.getTypeTag()) {
- case INT32: {
- declaredFieldsGenerators[i] = new IntAutoGenerator(
- Integer.parseInt(auto.getInitValueStr()));
- break;
- }
- case INT64: {
- declaredFieldsGenerators[i] = new LongAutoGenerator(
- Long.parseLong(auto.getInitValueStr()));
- break;
- }
- default: {
- throw new IllegalStateException(rfdg.getKind()
- + " annotation is not implemented for type " + ti.getTypeTag());
- }
- }
- break;
- }
- default: {
- throw new NotImplementedException(rfdg.getKind() + " is not implemented");
- }
- }
- }
- }
- for (int i = 0; i < declaredFieldsGenerators.length; i++) {
- declaredFieldsGenerators[i].init(out, ctx);
- }
- if (undeclaredFieldsGenerator == null) {
- UndeclaredFieldsDataGen ufdg = annot.getUndeclaredFieldsDataGen();
- if (ufdg != null) {
- if (!recType.isOpen()) {
- throw new Exception("Cannot generate undeclared fields for closed type " + recType);
- }
- undeclaredFieldsGenerator = new GenFieldsIntGenerator(declaredFieldsGenerators.length,
- ufdg.getMinUndeclaredFields(), ufdg.getMaxUndeclaredFields(),
- ufdg.getUndeclaredFieldsPrefix());
- }
- }
- if (undeclaredFieldsGenerator != null) {
- undeclaredFieldsGenerator.init(out, ctx);
- }
- }
-
- @Override
- public void generate() throws IOException {
- out.print("{");
- boolean first = true;
- for (int i = 0; i < declaredFieldsGenerators.length; i++) {
- boolean pick;
- if (nullable[i]) {
- pick = rnd.nextBoolean();
- } else {
- pick = true;
- }
- if (pick) {
- if (first) {
- first = false;
- } else {
- out.print(",");
- }
- out.print(" \"");
- out.print(this.recType.getFieldNames()[i]);
- out.print("\": ");
- declaredFieldsGenerators[i].generate();
- }
- }
- if (undeclaredFieldsGenerator != null) {
- undeclaredFieldsGenerator.generate();
- }
- out.print(" }");
- if (printAfter != null) {
- out.print(printAfter);
- }
- }
-
- }
-
- private final File schemaFile;
- private final File outputDir;
- private Map<TypeSignature, IAType> typeMap;
- private Map<TypeSignature, TypeDataGen> typeAnnotMap;
- private DataGeneratorContext dgCtx;
- private final IParserFactory parserFactory = new AQLParserFactory();
-
- public AdmDataGen(File schemaFile, File outputDir) {
- this.schemaFile = schemaFile;
- this.outputDir = outputDir;
- }
-
- public void init() throws IOException, ParseException, AsterixException, ACIDException, MetadataException,
- AlgebricksException {
- FileReader aql = new FileReader(schemaFile);
- IParser parser = parserFactory.createParser(aql);
- List<Statement> statements = parser.parse();
- aql.close();
- // TODO: Need to fix how to use transactions here.
- MetadataTransactionContext mdTxnCtx = new MetadataTransactionContext(new JobId(-1));
- ADGenDmlTranslator dmlt = new ADGenDmlTranslator(mdTxnCtx, statements);
- dmlt.translate();
- typeMap = dmlt.getTypeMap();
- typeAnnotMap = dmlt.getTypeDataGenMap();
- dgCtx = new DataGeneratorContext();
- }
-
- public void dataGen() throws Exception {
- for (Map.Entry<TypeSignature, IAType> me : typeMap.entrySet()) {
- TypeSignature tn = me.getKey();
- TypeDataGen tdg = typeAnnotMap.get(tn);
- if (tdg.isDataGen()) {
- IAType t = me.getValue();
-
- if (t.getTypeTag() != ATypeTag.RECORD) {
- throw new NotImplementedException();
- }
- ARecordType rt = (ARecordType) t;
- RecordDataGenAnnotation dga = firstDataGenAnnotation(rt);
- if (dga == null) {
- throw new Exception("No data generator annotations for type " + tn);
- }
- File outFile = new File(outputDir + File.separator + tdg.getOutputFileName());
- PrintStream outStream = new PrintStream(new BufferedOutputStream(new FileOutputStream(outFile)));
- RecordGenerator rg = new RecordGenerator(rt, dga, "\n");
- rg.init(outStream, dgCtx);
- for (long i = 0; i < tdg.getNumValues(); i++) {
- rg.generate();
- }
- outStream.close();
- }
- }
- }
-
- private static RecordDataGenAnnotation firstDataGenAnnotation(ARecordType rt) {
- for (IRecordTypeAnnotation annot : rt.getAnnotations()) {
- if (annot.getKind() == Kind.RECORD_DATA_GEN) {
- return (RecordDataGenAnnotation) annot;
- }
- }
- return null;
- }
-
- private static String[] readFileAsStringArray(File file) throws IOException {
- List<String> tmp = new ArrayList<String>();
- FileInputStream fstream = new FileInputStream(file);
- DataInputStream in = new DataInputStream(fstream);
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
- String strLine;
- while ((strLine = br.readLine()) != null) {
- tmp.add(strLine);
- }
- in.close();
- return tmp.toArray(new String[0]);
- }
-
- private static String getConstructor(IAType t) throws Exception {
- if (t instanceof BuiltinType) {
- String s = ((BuiltinType) t).getConstructor();
- if (s == null) {
- throw new Exception("Type " + t + " has no constructors.");
- }
- return s;
- } else {
- throw new Exception("No string constructor for type " + t);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/CustOrdDataGen.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/CustOrdDataGen.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/CustOrdDataGen.java
deleted file mode 100644
index b605f73..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/CustOrdDataGen.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.tools.datagen;
-
-import java.io.BufferedReader;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Random;
-
-public class CustOrdDataGen {
-
- // for customers
- private static final String FIRST_NAMES_FILE_NAME = "/opt/us_census_names/dist.all.first.cleaned";
- private static final String LAST_NAMES_FILE_NAME = "/opt/us_census_names/dist.all.last.cleaned";
- private static final int MIN_AGE = 10;
- private static final int MAX_AGE = 90;
-
- private static final String[] STREETS = { "Main St.", "Oak St.", "7th St.", "Washington St.", "Cedar St.",
- "Lake St.", "Hill St.", "Park St.", "View St." };
- private static final int MIN_STREET_NUM = 1;
- private static final int MAX_STREET_NUM = 10000;
- private static final String[] CITIES = { "Seattle", "San Jose", "Mountain View", "Los Angeles", "Sunnyvale",
- "Portland" };
-
- private static final int MIN_INTERESTS = 0;
- private static final int MAX_INTERESTS = 5;
- private String[] INTERESTS = { "Bass", "Music", "Databases", "Fishing", "Tennis", "Squash", "Computers", "Books",
- "Movies", "Cigars", "Wine", "Running", "Walking", "Skiing", "Basketball", "Video Games", "Cooking",
- "Coffee", "Base Jumping", "Puzzles", "Chess", "Programming", "Reddit", "Soccer", "Hockey", "Money",
- "Dancing", "Brewing", "Gardening", "Hacking", "Reading" };
-
- private static final int MIN_CHILD_AGE = 0;
-
- private static final int MIN_CHILDREN = 0;
- private static final int MAX_CHILDREN = 5;
-
- // for orders
- private static final int MIN_ORDERS_PER_CUST = 1;
- private static final int MAX_ORDERS_PER_CUST = 10;
-
- private String[] CLERKS = { "Kathrin", "Katherine", "Cathryn", "Catherine", "Cat", "Kathryne", "Cathrin" };
- private String[] ORDER_PRIORITIES = { "LOW", "MEDIUM", "HIGH", "PREMIUM" };
- private String[] ORDER_STATUSES = { "ORDER_PLACED", "PAYMENT_RECEIVED", "ORDER_SHIPPED", "ORDER_DELIVERED" };
-
- private String[] firstNames = { "Joe", "John", "Jill", "Gill", "Bill", "William", "Kathy", "Cathey", "Jane",
- "Albert" };
- private String[] lastNames = { "Doe", "Smith", "Li", "Singh", "Williams", "Davis", "Brown", "Wilson", "Moore",
- "Thomas" };
-
- private static final String[] UNDECLARED_FIELD_NAMES = { "param1", "param2", "param3", "param4", "param5",
- "param6", "param7", "param8", "param9", "param10" };
-
- private int currentCID = 0;
- private int currentOID = 0;
-
- private Random rndValue = new Random(50);
-
- private Random rndChildAgeField = new Random(50);
- private Random rndCustAgeField = new Random(50);
- private Random rndCustAddressField = new Random(50);
-
- private Random[] rndUndeclaredOrderFields;
-
- private class Child {
- public String name;
- public int age;
-
- public void generateFieldValues(String lastName, int maxChildAge) {
- // name
- int firstNameIx = Math.abs(rndValue.nextInt()) % firstNames.length;
- name = firstNames[firstNameIx] + " " + lastName;
-
- // age
- age = -1;
- if (rndChildAgeField.nextBoolean()) {
- if (maxChildAge >= 0) {
- if (maxChildAge == MIN_CHILD_AGE) {
- age = maxChildAge;
- } else {
- age = Math.abs((rndValue.nextInt()) % (maxChildAge - MIN_CHILD_AGE)) + MIN_AGE;
- }
- }
- }
- }
-
- public String getJSON() {
- StringBuilder jsonString = new StringBuilder();
-
- jsonString.append("{ "); // start child
-
- // name
- jsonString.append(" \"name\": ");
- jsonString.append("\"" + name + "\"");
-
- // age
- if (age >= 0) {
- jsonString.append(", ");
- jsonString.append(" \"age\": ");
- jsonString.append(age);
- }
-
- jsonString.append(" }"); // end child
-
- return jsonString.toString();
- }
-
- }
-
- private class Customer {
-
- private int cid;
- private String name;
- private int age;
-
- private String streetName;
- private int streetNumber;
- private String city;
-
- private int[] custInterests;
- private Child[] custChildren;
-
- public void generateFieldValues() {
- cid = currentCID++;
-
- int firstNameIx = Math.abs(rndValue.nextInt()) % firstNames.length;
- int lastNameIx = Math.abs(rndValue.nextInt()) % lastNames.length;
- name = firstNames[firstNameIx] + " " + lastNames[lastNameIx];
-
- if (rndCustAgeField.nextBoolean()) {
- age = Math.abs((rndValue.nextInt()) % (MAX_AGE - MIN_AGE)) + MIN_AGE;
- } else {
- age = -1;
- }
-
- if (rndCustAddressField.nextBoolean()) {
- streetNumber = Math.abs(rndValue.nextInt()) % (MAX_STREET_NUM - MIN_STREET_NUM) + MIN_STREET_NUM;
-
- int streetIx = Math.abs(rndValue.nextInt()) % STREETS.length;
- streetName = STREETS[streetIx];
-
- int cityIx = Math.abs(rndValue.nextInt()) % CITIES.length;
- city = CITIES[cityIx];
- } else {
- streetNumber = -1;
- streetName = null;
- city = null;
- }
-
- int numInterests = Math.abs((rndValue.nextInt()) % (MAX_INTERESTS - MIN_INTERESTS)) + MIN_INTERESTS;
- custInterests = new int[numInterests];
- for (int i = 0; i < numInterests; i++) {
- custInterests[i] = Math.abs(rndValue.nextInt()) % INTERESTS.length;
- }
-
- int numChildren = Math.abs((rndValue.nextInt()) % (MAX_CHILDREN - MIN_CHILDREN)) + MIN_CHILDREN;
- custChildren = new Child[numChildren];
- for (int i = 0; i < numChildren; i++) {
- Child c = new Child();
- int maxChildAge = age <= 0 ? 50 : (age - 20);
- c.generateFieldValues(lastNames[lastNameIx], maxChildAge);
- custChildren[i] = c;
- }
- }
-
- public String getJSON() {
- StringBuilder jsonString = new StringBuilder();
-
- jsonString.append("{ "); // start customer
-
- // customer id
- jsonString.append(" \"cid\": ");
- jsonString.append(cid);
- jsonString.append(", ");
-
- // name
- jsonString.append(" \"name\": ");
- jsonString.append("\"" + name + "\"");
-
- // age
- if (age >= 0) {
- jsonString.append(", ");
- jsonString.append(" \"age\": ");
- jsonString.append(age);
- }
-
- // nested address
- if (streetNumber >= 0) {
- jsonString.append(", ");
- jsonString.append(" \"address\": ");
- jsonString.append("{ "); // start address
-
- // number
- jsonString.append(" \"number\": ");
- jsonString.append(streetNumber);
- jsonString.append(", ");
-
- // street
- jsonString.append(" \"street\": ");
- jsonString.append("\"" + streetName + "\"");
- jsonString.append(", ");
-
- // city
- jsonString.append(" \"city\": ");
- jsonString.append("\"" + city + "\"");
-
- jsonString.append(" }"); // end address
- }
-
- jsonString.append(", ");
-
- // interests
- jsonString.append(" \"interests\": ");
- jsonString.append("{{ "); // start interests
- for (int i = 0; i < custInterests.length; i++) {
- jsonString.append("\"" + INTERESTS[custInterests[i]] + "\"");
- if (i != custInterests.length - 1) {
- jsonString.append(", ");
- }
- }
- jsonString.append(" }}"); // end interests
- jsonString.append(", ");
-
- // children
- jsonString.append(" \"children\": ");
- jsonString.append("[ "); // start children
- for (int i = 0; i < custChildren.length; i++) {
- String jsonChild = custChildren[i].getJSON();
- jsonString.append(jsonChild);
- if (i != custChildren.length - 1) {
- jsonString.append(", ");
- }
- }
- jsonString.append(" ]"); // end children
-
- jsonString.append(" }"); // end customer
-
- return jsonString.toString();
- }
- }
-
- private class Order {
- public int oid;
- public int cid;
- public String orderStatus;
- public String orderPriority;
- public String clerk;
- public String total;
-
- private int[] undeclaredFields;
- private BitSet nullMap;
-
- public void generateFieldValues(Customer cust) {
- cid = cust.cid;
- oid = currentOID++;
- float t = Math.abs(rndValue.nextFloat()) * 100;
- total = t + "f";
-
- int orderStatusIx = Math.abs(rndValue.nextInt()) % ORDER_STATUSES.length;
- orderStatus = ORDER_STATUSES[orderStatusIx];
-
- int orderPriorityIx = Math.abs(rndValue.nextInt()) % ORDER_PRIORITIES.length;
- orderPriority = ORDER_PRIORITIES[orderPriorityIx];
-
- int clerkIx = Math.abs(rndValue.nextInt()) % CLERKS.length;
- clerk = CLERKS[clerkIx];
-
- int m = rndUndeclaredOrderFields.length;
- undeclaredFields = new int[m];
- nullMap = new BitSet(m);
- for (int i = 0; i < m; i++) {
- if (rndUndeclaredOrderFields[i].nextBoolean()) {
- undeclaredFields[i] = rndValue.nextInt();
- } else {
- nullMap.set(i);
- }
- }
- }
-
- public String getJSON() {
- StringBuilder jsonString = new StringBuilder();
-
- jsonString.append("{ "); // start order
-
- // oid
- jsonString.append(" \"oid\": ");
- jsonString.append(oid);
- jsonString.append(", ");
-
- // cid
- jsonString.append(" \"cid\": ");
- jsonString.append(cid);
- jsonString.append(", ");
-
- // orderStatus
- jsonString.append(" \"orderstatus\": ");
- jsonString.append("\"" + orderStatus + "\"");
- jsonString.append(", ");
-
- // orderPriority
- jsonString.append(" \"orderpriority\": ");
- jsonString.append("\"" + orderPriority + "\"");
- jsonString.append(", ");
-
- // clerk
- jsonString.append(" \"clerk\": ");
- jsonString.append("\"" + clerk + "\"");
- jsonString.append(", ");
-
- // / cid
- jsonString.append(" \"total\": ");
- jsonString.append(total);
-
- for (int i = 0; i < undeclaredFields.length; i++) {
- if (!nullMap.get(i)) {
- jsonString.append(", ");
- jsonString.append(" \"" + UNDECLARED_FIELD_NAMES[i] + "\": ");
- jsonString.append(undeclaredFields[i]);
- }
- }
-
- jsonString.append(" }"); // end order
- return jsonString.toString();
- }
- }
-
- public void init() {
- try {
- List<String> tmpFirstNames = new ArrayList<String>();
-
- FileInputStream fstream = new FileInputStream(FIRST_NAMES_FILE_NAME);
- DataInputStream in = new DataInputStream(fstream);
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
- String strLine;
- while ((strLine = br.readLine()) != null) {
- String firstLetter = strLine.substring(0, 1);
- String remainder = strLine.substring(1);
- String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
- tmpFirstNames.add(capitalized);
- }
- in.close();
- firstNames = tmpFirstNames.toArray(firstNames);
-
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- try {
- List<String> tmpLastNames = new ArrayList<String>();
-
- FileInputStream fstream = new FileInputStream(LAST_NAMES_FILE_NAME);
- DataInputStream in = new DataInputStream(fstream);
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
- String strLine;
- while ((strLine = br.readLine()) != null) {
- String firstLetter = strLine.substring(0, 1);
- String remainder = strLine.substring(1);
- String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
- tmpLastNames.add(capitalized);
- }
- in.close();
- lastNames = tmpLastNames.toArray(firstNames);
-
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- rndUndeclaredOrderFields = new Random[UNDECLARED_FIELD_NAMES.length];
- for (int i = 0; i < rndUndeclaredOrderFields.length; i++) {
- rndUndeclaredOrderFields[i] = new Random(50);
- }
- }
-
- public void writeOrdersList(List<Order> ordersList, FileWriter ordersFile) throws IOException {
- while (!ordersList.isEmpty()) {
- int ix = Math.abs(rndValue.nextInt()) % ordersList.size();
- ordersFile.write(ordersList.get(ix).getJSON() + "\n");
- ordersList.remove(ix);
- }
- }
-
- public void writeCustomerList(List<Customer> customerList, Order[] ordersBatch, List<Order> ordersList,
- FileWriter customersFile, FileWriter ordersFile) throws IOException {
- while (!customerList.isEmpty()) {
- int ix = Math.abs(rndValue.nextInt()) % customerList.size();
- customersFile.write(customerList.get(ix).getJSON() + "\n");
-
- // generate orders
- int numOrders = Math.abs(rndValue.nextInt()) % (MAX_ORDERS_PER_CUST - MIN_ORDERS_PER_CUST)
- + MIN_ORDERS_PER_CUST;
- for (int i = 0; i < numOrders; i++) {
- ordersBatch[i].generateFieldValues(customerList.get(ix));
- ordersList.add(ordersBatch[i]);
- }
- writeOrdersList(ordersList, ordersFile);
-
- customerList.remove(ix);
- }
- }
-
- public static void main(String[] args) throws IOException {
- if (args.length != 2) {
- System.err.println("MUST PROVIDE 2 PARAMS, 1. output dir name and 2. number of records to generate.");
- System.exit(1);
- }
-
- String outputFile = args[0];
- int numRecords = Integer.parseInt(args[1]);
-
- FileWriter customersFile = new FileWriter(outputFile + File.separator + "customer.adm");
- FileWriter ordersFile = new FileWriter(outputFile + File.separator + "orders.adm");
-
- CustOrdDataGen dataGen = new CustOrdDataGen();
- dataGen.init();
-
- int batchSize = 1000;
- Customer[] customerBatch = new Customer[batchSize];
- for (int i = 0; i < batchSize; i++) {
- customerBatch[i] = dataGen.new Customer();
- }
-
- Order[] ordersBatch = new Order[MAX_ORDERS_PER_CUST];
- for (int i = 0; i < MAX_ORDERS_PER_CUST; i++) {
- ordersBatch[i] = dataGen.new Order();
- }
-
- List<Customer> customerList = new LinkedList<Customer>();
- List<Order> ordersList = new LinkedList<Order>();
- int custIx = 0;
- for (int i = 0; i < numRecords; i++) {
-
- customerBatch[custIx].generateFieldValues();
- customerList.add(customerBatch[custIx]);
- custIx++;
-
- if (customerList.size() >= batchSize) {
- dataGen.writeCustomerList(customerList, ordersBatch, ordersList, customersFile, ordersFile);
- custIx = 0;
- }
- }
- dataGen.writeCustomerList(customerList, ordersBatch, ordersList, customersFile, ordersFile);
- customersFile.flush();
- customersFile.close();
-
- ordersFile.flush();
- ordersFile.close();
- }
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/cb92dad7/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/EventDataGen.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/EventDataGen.java b/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/EventDataGen.java
deleted file mode 100644
index b175b42..0000000
--- a/asterixdb/asterix-tools/src/main/java/org/apache/asterix/tools/datagen/EventDataGen.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.tools.datagen;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-public class EventDataGen {
- private static final String FIRST_NAMES_FILE_NAME = "/opt/us_census_names/dist.all.first.cleaned";
- private static final String LAST_NAMES_FILE_NAME = "/opt/us_census_names/dist.all.last.cleaned";
-
- private String[] firstNames = new String[10];
- private String[] lastNames = new String[10];
-
- private static final int MIN_USER_INTERESTS = 0;
- private static final int MAX_USER_INTERESTS = 7;
- private String[] INTERESTS = { "bass", "music", "databases", "fishing", "tennis", "squash", "computers", "books",
- "movies", "cigars", "wine", "running", "walking", "skiing", "basketball", "video games", "cooking",
- "coffee", "base jumping", "puzzles" };
-
- private static final String[] STREETS = { "Main St.", "Oak St.", "7th St.", "Washington St.", "Cedar St.",
- "Lake St.", "Hill St.", "Park St.", "View St." };
- private static final int MIN_STREET_NUM = 1;
- private static final int MAX_STREET_NUM = 10000;
- private static final String[] CITIES = { "Seattle", "Irvine", "Laguna Beach", "Los Angeles", "San Clemente",
- "Huntington Beach", "Portland" };
- private static final int MIN_ZIP = 100000;
- private static final int MAX_ZIP = 999999;
- private static final String[] LAT_LONGS = { "47,-122", "33,-117", "33,-117", "34,-118", "33,-117", "33,-117",
- "45,-122" };
-
- private static final int MIN_MEMBERSHIPS = 1;
- private static final int MAX_MEMBERSHIPS = 10;
- private static final int MIN_SIG_ID = 1;
- private static final int MAX_SIG_ID = 100;
- private static final String[] CHAPTER_NAMES = { "Seattle", "Irvine", "Laguna Beach", "Los Angeles", "San Clemente",
- "Huntington Beach", "Portland", "Newport Beach", "Kirkland" };
- private static final int MEMBER_SINCE_MIN_YEAR = 1970;
- private static final int MEMBER_SINCE_MAX_YEAR = 1998;
-
- private Random rndValue = new Random(50);
- private User user;
-
- private final class User {
- private int firstNameIdx;
- private int lastNameIdx;
- private int[] interests = new int[MAX_USER_INTERESTS - MIN_USER_INTERESTS];
- int numInterests;
- private int streetNumber;
- private String street;
- private String city;
- private int zip;
- private String latlong;
- int numMemberships;
- private int[] member_sigid = new int[MAX_MEMBERSHIPS];
- private String[] member_chap_name = new String[MAX_MEMBERSHIPS];
- private String[] member_since_date = new String[MAX_MEMBERSHIPS];
-
- public void generateFieldValues() {
- firstNameIdx = Math.abs(rndValue.nextInt()) % firstNames.length;
- lastNameIdx = Math.abs(rndValue.nextInt()) % lastNames.length;
- // name = firstNames[firstNameIx] + " " + lastNames[lastNameIx];
- numInterests = Math.abs((rndValue.nextInt()) % (MAX_USER_INTERESTS - MIN_USER_INTERESTS))
- + MIN_USER_INTERESTS;
- for (int i = 0; i < numInterests; i++) {
- interests[i] = Math.abs(rndValue.nextInt()) % INTERESTS.length;
- }
- streetNumber = Math.abs(rndValue.nextInt()) % (MAX_STREET_NUM - MIN_STREET_NUM) + MIN_STREET_NUM;
- street = STREETS[Math.abs(rndValue.nextInt()) % STREETS.length];
- int cityIdx = Math.abs(rndValue.nextInt()) % CITIES.length;
- city = CITIES[cityIdx];
- zip = Math.abs(rndValue.nextInt() % (MAX_ZIP - MIN_ZIP)) + MIN_ZIP;
- latlong = LAT_LONGS[cityIdx];
- numMemberships = Math.abs(rndValue.nextInt()) % (MAX_MEMBERSHIPS - MIN_MEMBERSHIPS) + MIN_MEMBERSHIPS;
- for (int i = 0; i < numMemberships; i++) {
- member_sigid[i] = Math.abs(rndValue.nextInt()) % (MAX_SIG_ID - MIN_SIG_ID) + MIN_SIG_ID;
- int cnIdx = Math.abs(rndValue.nextInt()) % CHAPTER_NAMES.length;
- member_chap_name[i] = CHAPTER_NAMES[cnIdx];
- int msYear = Math.abs(rndValue.nextInt()) % (MEMBER_SINCE_MAX_YEAR - MEMBER_SINCE_MIN_YEAR)
- + MEMBER_SINCE_MIN_YEAR;
- int msMo = Math.abs(rndValue.nextInt()) % 12 + 1;
- int msDay = Math.abs(rndValue.nextInt()) % 28 + 1;
- member_since_date[i] = msYear + "-" + (msMo < 10 ? "0" : "") + msMo + "-" + (msDay < 10 ? "0" : "")
- + msDay;
- }
- }
-
- public void write(Writer writer) throws IOException {
- writer.append("{");
- writer.append(" \"name\": \"");
- writer.append(firstNames[firstNameIdx]);
- writer.append(" ");
- writer.append(lastNames[lastNameIdx]);
- writer.append("\", ");
-
- writer.append(" \"email\": \"");
- writer.append(firstNames[firstNameIdx]);
- writer.append(".");
- writer.append(lastNames[lastNameIdx]);
- writer.append("@example.com\", ");
-
- writer.append(" \"interests\": <");
- for (int i = 0; i < numInterests; i++) {
- if (i > 0) {
- writer.append(", ");
- }
- writer.append("\"");
- writer.append(INTERESTS[interests[i]]);
- writer.append("\"");
- }
- writer.append(">, ");
-
- writer.append(" \"address\": {");
- writer.append(" \"street\": \"");
- writer.append(streetNumber + " " + street);
- writer.append("\",");
- writer.append(" \"city\": \"");
- writer.append(city);
- writer.append("\",");
- writer.append(" \"zip\": \"");
- writer.append(zip + "\",");
- writer.append(" \"latlong\": point(\"");
- writer.append(latlong);
- writer.append("\")");
- writer.append("}, ");
-
- writer.append(" \"member_of\": <");
- for (int i = 0; i < numMemberships; i++) {
- if (i > 0) {
- writer.append(", ");
- }
- writer.append("{");
- writer.append(" \"sig_id\": ");
- writer.append(member_sigid[i] + ",");
- writer.append(" \"chapter_name\": \"");
- writer.append(member_chap_name[i]);
- writer.append("\",");
- writer.append(" \"member_since\": date(\"");
- writer.append(member_since_date[i]);
- writer.append("\") }");
- }
- writer.append(">");
-
- writer.append(" }\n");
- }
- }
-
- public void init() throws IOException {
- {
- List<String> tmpFirstNames = new ArrayList<String>();
-
- FileInputStream fstream = new FileInputStream(FIRST_NAMES_FILE_NAME);
- DataInputStream in = new DataInputStream(fstream);
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
- String strLine;
- while ((strLine = br.readLine()) != null) {
- String firstLetter = strLine.substring(0, 1);
- String remainder = strLine.substring(1);
- String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
- tmpFirstNames.add(capitalized);
- }
- in.close();
- firstNames = tmpFirstNames.toArray(firstNames);
- }
- {
- List<String> tmpLastNames = new ArrayList<String>();
-
- FileInputStream fstream = new FileInputStream(LAST_NAMES_FILE_NAME);
- DataInputStream in = new DataInputStream(fstream);
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
- String strLine;
- while ((strLine = br.readLine()) != null) {
- String firstLetter = strLine.substring(0, 1);
- String remainder = strLine.substring(1);
- String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
- tmpLastNames.add(capitalized);
- }
- in.close();
- lastNames = tmpLastNames.toArray(firstNames);
- }
- user = new User();
- }
-
- public void generate() {
- user.generateFieldValues();
- }
-
- public void write(Writer w) throws IOException {
- user.write(w);
- }
-
- public static void main(String[] args) throws IOException {
- if (args.length != 2) {
- System.err
- .println("MUST PROVIDE 2 PARAMETERS, 1. output directory path and 2. number of records to generate.");
- System.exit(1);
- }
- String outputFile = args[0];
- int numRecords = Integer.parseInt(args[1]);
- Writer userFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile + File.separator
- + "user.adm")));
- EventDataGen dgen = new EventDataGen();
- dgen.init();
- for (int i = 0; i < numRecords; i++) {
- dgen.generate();
- dgen.write(userFile);
- }
- userFile.close();
- }
-}