blob: e34030d6810bfa81c336f9ba86fc4d0f5684d2bd [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// dclarke - initial JPA Employee example using XML (bug 217884)
package org.eclipse.persistence.testing.models.jpa.performance2;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Query;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
/**
* This example populates the database with example instances using JPA.
*/
public class Populate {
public static void populate(EntityManagerFactory emf) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Populate.population.persistAll(em);
em.getTransaction().commit();
em.close();
}
public static final Populate population = new Populate();
public Employee[] employees = { basicEmployeeExample1(), basicEmployeeExample2(), basicEmployeeExample3(), basicEmployeeExample4(), basicEmployeeExample5(), basicEmployeeExample6(),
basicEmployeeExample7(), basicEmployeeExample8(), basicEmployeeExample9(), basicEmployeeExample10(), basicEmployeeExample11(), basicEmployeeExample12() };
private SmallProject[] smallProjects = { basicSmallProjectExample1(), basicSmallProjectExample2(), basicSmallProjectExample3(), basicSmallProjectExample4(), basicSmallProjectExample5(),
basicSmallProjectExample7(), basicSmallProjectExample8(), basicSmallProjectExample9(), basicSmallProjectExample10() };
private LargeProject[] largeProjects = { basicLargeProjectExample1(), basicLargeProjectExample2(), basicLargeProjectExample3(), basicLargeProjectExample4(), basicLargeProjectExample5() };
private JobTitle[] jobTitles = { new JobTitle("CEO"), new JobTitle("VP"), new JobTitle("Manager"), new JobTitle("Developer"), new JobTitle("Admin") };
private Populate() {
// Setup management hierarchy
addManagedEmployees(0, new int[] { 2, 3, 4 });
setJobTitle(0, 2);
addManagedEmployees(1, new int[] { 5, 0 });
setJobTitle(1, 2);
addManagedEmployees(2, new int[] {});
setJobTitle(0, 3);
addManagedEmployees(3, new int[] {});
setJobTitle(0, 3);
addManagedEmployees(4, new int[] {});
setJobTitle(0, 3);
addManagedEmployees(5, new int[] {});
setJobTitle(5, 4);
addManagedEmployees(6, new int[] {});
setJobTitle(6, 4);
addManagedEmployees(7, new int[] {});
setJobTitle(7, 1);
addManagedEmployees(8, new int[] {});
setJobTitle(8, 4);
addManagedEmployees(9, new int[] { 7, 8, 10, 11 });
setJobTitle(9, 0);
addManagedEmployees(10, new int[] { 6 });
setJobTitle(10, 1);
addManagedEmployees(11, new int[] { 1 });
setJobTitle(11, 1);
// Setup Employee-Project associations
addProjects(0, new int[] { 0, 1, 2 }, new int[] {});
addProjects(1, new int[] { 3, 4, 0 }, new int[] {});
addProjects(2, new int[] { 3 }, new int[] { 3, 4 });
addProjects(4, new int[] { 3, 1 }, new int[] { 2, 4 });
addProjects(5, new int[] {}, new int[] { 1 });
addProjects(6, new int[] {}, new int[] { 1 });
// Setup LargeProject leads
this.largeProjects[0].setTeamLeader(this.employees[1]);
this.largeProjects[3].setTeamLeader(this.employees[2]);
this.largeProjects[4].setTeamLeader(this.employees[2]);
}
public Employee basicEmployeeExample1() {
Employee employee = new Employee();
employee.setFirstName("Bob");
employee.setLastName("Smith");
employee.setGender(Gender.Male);
employee.setSalary(35000);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(1996, 0, 1);
employmentPeriod.setStartDate(1993, 0, 1);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Toronto");
address.setPostalCode("L5J2B5");
address.setProvince("ONT");
address.setStreet("1450 Acme Cr., Suite 4");
address.setCountry("Canada");
employee.setAddress(address);
employee.addResponsibility("Water the office plants.");
employee.addResponsibility("Maintain the kitchen facilities.");
employee.addPhoneNumber("Work", "613", "5558812");
return employee;
}
public Employee basicEmployeeExample10() {
Employee employee = new Employee();
employee.setFirstName("Jill");
employee.setLastName("May");
employee.setGender(Gender.Female);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setStartDate(1991, 10, 11);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Calgary");
address.setPostalCode("J5J2B5");
address.setProvince("AB");
address.setStreet("1111 Mooseland Rd.");
address.setCountry("Canada");
employee.setAddress(address);
employee.setSalary(56232);
employee.addPhoneNumber("Work", "613", "5558812");
employee.addPhoneNumber("Work Fax", "613", "5555943");
employee.addEmailAddress("Work", "jill.may@acme.com");
employee.addEmailAddress("Mobile", "jill.lewis.may@sprint.com");
employee.addDegree("Bachelor Computer Science");
employee.addDegree("Masters Computer Science");
employee.addDegree("PHD Computer Science");
return employee;
}
public Employee basicEmployeeExample11() {
Employee employee = new Employee();
employee.setFirstName("Sarah-Lou");
employee.setLastName("Smitty");
employee.setGender(Gender.Female);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(1996, 0, 1);
employmentPeriod.setStartDate(1993, 0, 1);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Arnprior");
address.setPostalCode("W1A2B5");
address.setProvince("ONT");
address.setStreet("1 Hawthorne Drive");
address.setCountry("Canada");
employee.setAddress(address);
employee.setSalary(75000);
employee.addPhoneNumber("Work Fax", "613", "5555943");
employee.addPhoneNumber("Home", "613", "5551234");
employee.addPhoneNumber("Cellular", "416", "5551111");
employee.addEmailAddress("Home", "sarah-lou.smitty@rogers.com");
employee.addDegree("Bachelor Computer Science");
return employee;
}
public Employee basicEmployeeExample12() {
Employee employee = new Employee();
employee.setFirstName("Jim-Bob");
employee.setLastName("Jefferson");
employee.setGender(Gender.Male);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(2001, 11, 31);
employmentPeriod.setStartDate(1995, 0, 12);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Yellowknife");
address.setPostalCode("Y5J2N5");
address.setProvince("YK");
address.setStreet("1112 Gold Rush Rd.");
address.setCountry("Canada");
employee.setAddress(address);
employee.setSalary(50000);
employee.addPhoneNumber("Home", "613", "5551234");
employee.addPhoneNumber("Cellular", "416", "5551111");
employee.addEmailAddress("Home", "jim-bob@jim-bob.com");
return employee;
}
public Employee basicEmployeeExample2() {
Employee employee = new Employee();
employee.setFirstName("John");
employee.setLastName("Way");
employee.setGender(Gender.Male);
employee.setSalary(53000);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setStartDate(1991, 10, 11);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Ottawa");
address.setPostalCode("K5J2B5");
address.setProvince("ONT");
address.setStreet("12 Merivale Rd., Suite 5");
address.setCountry("Canada");
employee.setAddress(address);
employee.addResponsibility("Hire people when more people are required.");
employee.addResponsibility("Lay off employees when less people are required.");
employee.addPhoneNumber("Work", "613", "5558812");
employee.addPhoneNumber("ISDN", "905", "5553691");
employee.addEmailAddress("Work", "john.way@acme.com");
employee.addDegree("Bachelor Computer Science");
return employee;
}
public Employee basicEmployeeExample3() {
Employee employee = new Employee();
employee.setFirstName("Charles");
employee.setLastName("Chanley");
employee.setGender(Gender.Male);
employee.setSalary(43000);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(2001, 11, 31);
employmentPeriod.setStartDate(1995, 0, 1);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Montreal");
address.setPostalCode("Q2S5Z5");
address.setProvince("QUE");
address.setStreet("1 Canadien Place");
address.setCountry("Canada");
employee.setAddress(address);
employee.addResponsibility("Perform code reviews as required.");
employee.addPhoneNumber("Pager", "976", "5556666");
employee.addPhoneNumber("ISDN", "905", "5553691");
employee.addEmailAddress("Work", "charles.chanley@acme.com");
return employee;
}
public Employee basicEmployeeExample4() {
Employee employee = new Employee();
employee.setFirstName("Emanual");
employee.setLastName("Smith");
employee.setGender(Gender.Male);
employee.setSalary(49631);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(2001, 11, 31);
employmentPeriod.setStartDate(1995, 0, 1);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Vancouver");
address.setPostalCode("N5J2N5");
address.setProvince("BC");
address.setStreet("20 Mountain Blvd., Floor 53, Suite 6");
address.setCountry("Canada");
employee.setAddress(address);
employee.addResponsibility("Have to fix the Database problem.");
employee.addPhoneNumber("Work Fax", "613", "5555943");
employee.addPhoneNumber("Cellular", "416", "5551111");
employee.addPhoneNumber("Pager", "976", "5556666");
employee.addPhoneNumber("ISDN", "905", "5553691");
employee.addEmailAddress("Work", "emanual.smith@acme.com");
return employee;
}
public Employee basicEmployeeExample5() {
Employee employee = new Employee();
employee.setFirstName("Sarah");
employee.setLastName("Way");
employee.setGender(Gender.Female);
employee.setSalary(87000);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(2001, 6, 31);
employmentPeriod.setStartDate(1995, 4, 1);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Prince Rupert");
address.setPostalCode("K3K5D5");
address.setProvince("BC");
address.setStreet("3254 Parkway Place");
address.setCountry("Canada");
employee.setAddress(address);
employee.addResponsibility("Write code documentation.");
employee.addPhoneNumber("Work", "613", "5558812");
employee.addPhoneNumber("ISDN", "905", "5553691");
employee.addPhoneNumber("Home", "613", "5551234");
employee.addEmailAddress("Work", "sarah.way@acme.com");
return employee;
}
public Employee basicEmployeeExample6() {
Employee employee = new Employee();
employee.setFirstName("Marcus");
employee.setLastName("Saunders");
employee.setGender(Gender.Male);
employee.setSalary(54300);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(2001, 11, 31);
employmentPeriod.setStartDate(1995, 0, 12);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Perth");
address.setPostalCode("Y3Q2N9");
address.setProvince("ONT");
address.setStreet("234 Caledonia Lane");
address.setCountry("Canada");
employee.setAddress(address);
employee.addResponsibility("Write user specifications.");
employee.addPhoneNumber("ISDN", "905", "5553691");
employee.addPhoneNumber("Work", "613", "5558812");
employee.addEmailAddress("Work", "marcus.saunders@acme.com");
employee.addDegree("Bachelor Computer Science");
employee.addDegree("Masters Computer Science");
return employee;
}
public Employee basicEmployeeExample7() {
Employee employee = new Employee();
employee.setFirstName("Nancy");
employee.setLastName("White");
employee.setGender(Gender.Female);
employee.setSalary(31000);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(1996, 0, 1);
employmentPeriod.setStartDate(1993, 0, 1);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Metcalfe");
address.setPostalCode("Y4F7V6");
address.setProvince("ONT");
address.setStreet("2 Anderson Rd.");
address.setCountry("Canada");
employee.setAddress(address);
employee.addPhoneNumber("Home", "613", "5551234");
employee.addEmailAddress("Work", "nancy.white@acme.com");
return employee;
}
public Employee basicEmployeeExample8() {
Employee employee = new Employee();
employee.setFirstName("Fred");
employee.setLastName("Jones");
employee.setGender(Gender.Male);
employee.setSalary(500000);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setEndDate(2001, 11, 31);
employmentPeriod.setStartDate(1995, 0, 1);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Victoria");
address.setPostalCode("Z5J2N5");
address.setProvince("BC");
address.setStreet("382 Hyde Park Blvd.");
address.setCountry("Canada");
employee.setAddress(address);
employee.addPhoneNumber("Cellular", "416", "5551111");
employee.addPhoneNumber("ISDN", "905", "5553691");
employee.addEmailAddress("Work", "fred.jones@acme.com");
employee.addDegree("Bachelor Business");
employee.addDegree("Masters Business");
return employee;
}
public Employee basicEmployeeExample9() {
Employee employee = new Employee();
employee.setFirstName("Betty");
employee.setLastName("Jones");
employee.setGender(Gender.Female);
employee.setSalary(500001);
EmploymentPeriod employmentPeriod = new EmploymentPeriod();
employmentPeriod.setStartDate(2001, 11, 31);
employmentPeriod.setEndDate(1995, 0, 1);
employee.setPeriod(employmentPeriod);
Address address = new Address();
address.setCity("Smith Falls");
address.setPostalCode("C6C6C6");
address.setProvince("ONT");
address.setStreet("89 Chocolate Drive");
address.setCountry("Canada");
employee.setAddress(address);
employee.addPhoneNumber("Work", "613", "5558812");
employee.addPhoneNumber("ISDN", "905", "5553691");
employee.addEmailAddress("Work", "betty.jones@acme.com");
employee.addEmailAddress("Home", "betty.cleo.jones@rogers.com");
employee.addDegree("Bachelor Arts");
employee.addDegree("Masters Engineering");
employee.addDegree("PHD Philosophy");
return employee;
}
public LargeProject basicLargeProjectExample1() {
LargeProject largeProject = new LargeProject();
largeProject.setName("Sales Reporting");
largeProject.setDescription("A reporting application to report on the corporations database through TopLink.");
largeProject.setBudget(5000);
largeProject.getMilestone().set(1991, 10, 11, 12, 0, 0);
return largeProject;
}
public LargeProject basicLargeProjectExample2() {
LargeProject largeProject = new LargeProject();
largeProject.setName("Light Reporter");
largeProject.setDescription("A lightweight application to report on the corporations database through TopLink.");
largeProject.setBudget(100.98);
largeProject.getMilestone().set(1999, 11, 25, 11, 40, 44);
return largeProject;
}
public LargeProject basicLargeProjectExample3() {
LargeProject largeProject = new LargeProject();
largeProject.setName("TOPEmployee Management");
largeProject.setDescription("A management application to report on the corporations database through TopLink.");
largeProject.setBudget(4000.98);
largeProject.getMilestone().set(1997, 10, 12, 1, 0, 0);
return largeProject;
}
public LargeProject basicLargeProjectExample4() {
LargeProject largeProject = new LargeProject();
largeProject.setName("Enterprise System");
largeProject.setDescription("A enterprise wide application to report on the corporations database through TopLink.");
largeProject.setBudget(40.98);
largeProject.getMilestone().set(1996, 8, 6, 6, 40, 44);
return largeProject;
}
public LargeProject basicLargeProjectExample5() {
LargeProject largeProject = new LargeProject();
largeProject.setName("Problem Reporting System");
largeProject.setDescription("A PRS application to report on the corporations database through TopLink.");
largeProject.setBudget(101.98);
largeProject.getMilestone().set(1997, 9, 6, 1, 40, 44);
return largeProject;
}
public SmallProject basicSmallProjectExample1() {
return new SmallProject("Enterprise", "A enterprise wide application to report on the corporations database through TopLink.");
}
public SmallProject basicSmallProjectExample10() {
return new SmallProject("Staff Query Tool", "A tool to help staff query various things.");
}
public SmallProject basicSmallProjectExample2() {
return new SmallProject("Sales Reporter", "A reporting application using JDK to report on the corporations database through TopLink.");
}
public SmallProject basicSmallProjectExample3() {
return new SmallProject("TOP-Employee Manager", "A management application to report on the corporations database through TopLink.");
}
public SmallProject basicSmallProjectExample4() {
return new SmallProject("Problem Reporter", "A PRS application to report on the corporations database through TopLink.");
}
public SmallProject basicSmallProjectExample5() {
return new SmallProject("Feather Reporter", "An extremely lightweight application to report on the corporations database through TopLink.");
}
public SmallProject basicSmallProjectExample6() {
return new SmallProject("Makework", "A makework project.");
}
public SmallProject basicSmallProjectExample7() {
return new SmallProject("Marketing Query Tool", "A tool to help marketing query various things.");
}
public SmallProject basicSmallProjectExample8() {
return new SmallProject("Shipping Query Tool", "A tool to help shipping query various things.");
}
public SmallProject basicSmallProjectExample9() {
return new SmallProject("Accounting Query Tool", "A tool to help accounting query various things.");
}
private void addManagedEmployees(int managerIndex, int[] employeeIndeces) {
Employee manager = this.employees[managerIndex];
if (manager.getManagedEmployees().isEmpty()) {
for (int index = 0; index < employeeIndeces.length; index++) {
manager.addManagedEmployee(this.employees[employeeIndeces[index]]);
}
}
}
private void setJobTitle(int employeeIndex, int jobIndex) {
Employee employee = this.employees[employeeIndex];
employee.setJobTitle(this.jobTitles[jobIndex]);
}
private void addProjects(int empIndex, int[] smallProjIndeces, int[] largeProjIndeces) {
Employee employee = this.employees[empIndex];
for (int index = 0; index < smallProjIndeces.length; index++) {
employee.addProject(this.smallProjects[smallProjIndeces[index]]);
}
for (int index = 0; index < largeProjIndeces.length; index++) {
employee.addProject(this.largeProjects[largeProjIndeces[index]]);
}
}
/**
* Register all of the population in the provided EntityManager to be
* persisted This method should only be called from within a test case. It
* asserts that the provided EntityManager is in a transaction and that the
* database tables are empty.
*/
public void persistAll(EntityManager em) {
System.out.println("Persisting samples objects.");
assert(em.getTransaction().isActive());
// Verify that the database tables are empty
assertCount(em, Employee.class, 0);
assertCount(em, Address.class, 0);
assertCount(em, PhoneNumber.class, 0);
assertCount(em, Project.class, 0);
assertCount(em, JobTitle.class, 0);
for (int index = 0; index < this.jobTitles.length; index++) {
em.persist(this.jobTitles[index]);
}
for (int index = 0; index < this.employees.length; index++) {
em.persist(this.employees[index]);
}
for (int index = 0; index < this.smallProjects.length; index++) {
em.persist(this.smallProjects[index]);
}
for (int index = 0; index < this.largeProjects.length; index++) {
em.persist(this.largeProjects[index]);
}
System.out.println("Flushing to database.");
em.flush();
System.out.println("Verifying populate.");
verifyCounts(em);
}
public void verifyCounts(EntityManager em) {
assertCount(em, Employee.class, this.employees.length);
assertCount(em, Address.class, this.employees.length);
assertCount(em, Project.class, this.smallProjects.length + this.largeProjects.length);
assertCount(em, JobTitle.class, this.jobTitles.length);
}
/**
* Verify that the provided entity type has no rows in the database using a
* native ReportQuery.
*
*/
public void assertCount(EntityManager em, Class entityClass, int count) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery criteria = cb.createQuery();
Root entity = criteria.from(entityClass);
criteria.select(cb.count(entity));
Query query = em.createQuery(criteria);
Long dbCount = (Long)query.getSingleResult();
assert(count == dbCount.intValue());
}
}