import static org.apache.commons.lang.StringUtils.join;
import java.util.HashSet;
import java.util.Set;
import org.openntf.domino.Database;
import org.openntf.domino.DateTime;
import org.openntf.domino.DbDirectory;
import org.openntf.domino.Document;
import org.openntf.domino.Session;
import org.openntf.domino.View;
import org.openntf.domino.junit.TestRunnerUtil;
import org.openntf.domino.utils.DominoUtils;
import org.openntf.domino.utils.Factory;
import com.github.javafaker.Faker;
public enum CreateTestDatabase {
;
static final String FAKENAMES_NSF = "fakenames.nsf";
public static void main(final String[] args) {
TestRunnerUtil.runAsDominoThread(new DbSetup(), TestRunnerUtil.NATIVE_SESSION);
System.out.println("Start next thread");
// 1 Thread: 840 docs/sec
// 2 Threads: 1264 docs/sec
// 3 Threads: 1400 docs/sec
// 4 Threads: 1480 docs/sec
TestRunnerUtil.runAsDominoThread(new DocCreate(), TestRunnerUtil.NATIVE_SESSION, 5);
}
public static class DbSetup implements Runnable {
@Override
public void run() {
Session sess = Factory.getSession();
DbDirectory dir = sess.getDbDirectory("");
Database db = sess.getDatabase(FAKENAMES_NSF);
if (db != null)
db.remove();
db = dir.createDatabase(FAKENAMES_NSF, true);
View view = db.createView("Names", "SELECT Form = \"DocName\"");
view.createColumn(2, "Title", "Title");
view.createColumn(3, "Prefix", "NamePrefix");
view.createColumn(4, "First Name", "FirstName");
view.createColumn(5, "Last Name", "LastName");
view.createColumn(6, "Zip Code", "ZipCode");
view.createColumn(7, "Country", "Country");
view.createColumn(8, "Address", "Address");
view.createColumn(9, "Birthday", "Birthday");
view.createColumn(10, "PhoneNumber", "PhoneNumber");
}
}
public static class DocCreate implements Runnable {
public int docCount = 0;
int dbCnt = 0;
Faker faker = new Faker();
long startTime = System.currentTimeMillis();
@Override
public void run() {
Database db;
Session sess;
sess = Factory.getSession();
db = sess.getDatabase("", FAKENAMES_NSF);
DominoUtils.setBubbleExceptions(true);
String[] group = { "LocalDomainAdmins", "User", "Developer", "Staff" };
Document doc;
for (int i = 0; i < 50000; i++) {
try {
doc = db.createDocument();
doc.replaceItemValue("Form", "DocName");
String firstName;
String lastName;
String namePrefix;
doc.replaceItemValue("NamePrefix", namePrefix = faker.name().prefix());
doc.replaceItemValue("FirstName", firstName = faker.name().firstName());
doc.replaceItemValue("LastName", lastName = faker.name().lastName());
doc.replaceItemValue("Title", join(new String[] { namePrefix, firstName, lastName }, " "));
doc.replaceItemValue("NameSuffix", faker.name().suffix());
doc.replaceItemValue("CityPrefix", faker.address().cityPrefix());
doc.replaceItemValue("CitySuffix", faker.address().citySuffix());
doc.replaceItemValue("ZipCode", faker.address().zipCode());
doc.replaceItemValue("Country", faker.address().country());
doc.replaceItemValue("Address", faker.address().streetAddress(true));
DateTime birthday = sess.createDateTime(faker.integer(1900, 2010), faker.integer(1, 12), faker.integer(1, 31), 0, 0, 0);
doc.replaceItemValue("Birthday", birthday);
doc.replaceItemValue("PhoneNumber", faker.phoneNumber().phoneNumber());
doc.replaceItemValue("CreditCardNumber", faker.business().creditCardNumber());
doc.replaceItemValue("CreditCartExpiry", faker.business().creditCardExpiry());
doc.replaceItemValue("CreditCartType", faker.business().creditCardType());
Set<String> members = new HashSet<String>();
int j;
int grpCnt = faker.integer(0, 4);
for (j = 0; j < grpCnt; j++) {
members.add(faker.options().option(group));
}
doc.replaceItemValue("Member", members);
doc.save();
} catch (Exception e) {
System.err.println("[i=" + i + "] Exception " + e.getClass().getName() + " at DocCount=" + docCount);
e.printStackTrace();
return;
}
docCount++;
if (docCount % 1000 == 0) {
long runTime = System.currentTimeMillis() - startTime;
if (runTime > 0) {
System.out.println("Created " + docCount + " documents. " + (docCount * 1000 / runTime) + " docs/sec.");
}
}
}
}
}
}