package org.example.service;
import java.util.ArrayList;
import java.util.List;
import org.example.domain.Address;
import org.example.domain.Contact;
import org.example.domain.Country;
import org.example.domain.Customer;
import org.example.domain.Order;
import org.example.domain.Order.Status;
import org.example.domain.OrderDetail;
import org.example.domain.Product;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.TxRunnable;
public class LoadExampleData {
private static boolean runOnce;
private static EbeanServer server = Ebean.getServer(null);
public static synchronized void load() {
if (runOnce) {
return;
}
if (Country.find.query().findRowCount() > 0) {
return;
}
final LoadExampleData me = new LoadExampleData();
server.execute(new TxRunnable() {
public void run() {
me.deleteAll();
me.insertCountries();
me.insertProducts();
me.insertTestCustAndOrders();
}
});
runOnce = true;
}
public void deleteAll() {
Ebean.execute(new TxRunnable() {
public void run() {
// Ebean.currentTransaction().setBatchMode(false);
// orm update use bean name and bean properties
// server.createUpdate(OrderShipment.class, "delete from orderShipment").execute();
server.createUpdate(OrderDetail.class, "delete from orderDetail").execute();
server.createUpdate(Order.class, "delete from order").execute();
server.createUpdate(Contact.class, "delete from contact").execute();
server.createUpdate(Customer.class, "delete from Customer").execute();
server.createUpdate(Address.class, "delete from address").execute();
// sql update uses table and column names
server.createSqlUpdate("delete from o_country").execute();
server.createSqlUpdate("delete from o_product").execute();
}
});
}
public void insertCountries() {
server.execute(new TxRunnable() {
public void run() {
Country c = new Country();
c.setCode("NZ");
c.setName("New Zealand");
server.save(c);
Country au = new Country();
au.setCode("AU");
au.setName("Australia");
server.save(au);
}
});
}
public void insertProducts() {
server.execute(new TxRunnable() {
public void run() {
Product p = new Product();
p.setName("Chair");
p.setSku("C001");
server.save(p);
p = new Product();
p.setName("Desk");
p.setSku("DSK1");
server.save(p);
p = new Product();
p.setName("Computer");
p.setSku("C002");
server.save(p);
p = new Product();
p.setName("Printer");
p.setSku("C003");
server.save(p);
}
});
}
public void insertTestCustAndOrders() {
Ebean.execute(new TxRunnable() {
public void run() {
Customer cust1 = insertCustomer("Rob");
Customer cust2 = insertCustomerNoAddress();
insertCustomerFiona();
insertCustomerNoContacts("NocCust");
createOrder1(cust1);
createOrder2(cust2);
createOrder3(cust1);
createOrder4(cust1);
}
});
}
public static Customer createCustAndOrder(String custName) {
LoadExampleData me = new LoadExampleData();
Customer cust1 = insertCustomer(custName);
me.createOrder1(cust1);
return cust1;
}
public static Order createOrderCustAndOrder(String custName) {
LoadExampleData me = new LoadExampleData();
Customer cust1 = insertCustomer(custName);
return me.createOrder1(cust1);
}
private static int contactEmailNum = 1;
private Customer insertCustomerFiona() {
Customer c = createCustomer("Fiona", "12 Apple St", "West Coast Rd", 1);
c.addContact(createContact("Fiona", "Black"));
c.addContact(createContact("Tracy", "Red"));
Ebean.save(c);
return c;
}
public static Contact createContact(String firstName, String lastName) {
Contact contact = new Contact();
contact.setFirstName(firstName);
contact.setLastName(lastName);
String email = contact.getLastName() + (contactEmailNum++) + "@test.com";
contact.setEmail(email.toLowerCase());
return contact;
}
private Customer insertCustomerNoContacts(String name) {
Customer c = createCustomer("Roger", "15 Kumera Way", "Bos town", 1);
c.setName(name);
Ebean.save(c);
return c;
}
private Customer insertCustomerNoAddress() {
Customer c = new Customer();
c.setName("Cust NoAddress");
c.addContact(createContact("Jack", "Black"));
Ebean.save(c);
return c;
}
private static Customer insertCustomer(String name) {
Customer c = createCustomer(name, "1 Banana St", "P.O.Box 1234", 1);
Ebean.save(c);
return c;
}
public static Customer createCustomer(String name, String shippingStreet, String billingStreet, int contactSuffix) {
Customer c = new Customer();
c.setName(name);
if (contactSuffix > 0) {
c.addContact(new Contact("Jim" + contactSuffix, "Cricket"));
c.addContact(new Contact("Fred" + contactSuffix, "Blue"));
c.addContact(new Contact("Bugs" + contactSuffix, "Bunny"));
}
if (shippingStreet != null) {
Address shippingAddr = new Address();
shippingAddr.setLine1(shippingStreet);
shippingAddr.setLine2("Sandringham");
shippingAddr.setCity("Auckland");
shippingAddr.setCountry(Ebean.getReference(Country.class, "NZ"));
c.setShippingAddress(shippingAddr);
}
if (billingStreet != null) {
Address billingAddr = new Address();
billingAddr.setLine1(billingStreet);
billingAddr.setLine2("St Lukes");
billingAddr.setCity("Auckland");
billingAddr.setCountry(Ebean.getReference(Country.class, "NZ"));
c.setBillingAddress(billingAddr);
}
return c;
}
private Order createOrder1(Customer customer) {
Product product1 = Ebean.getReference(Product.class, 1);
Product product2 = Ebean.getReference(Product.class, 2);
Product product3 = Ebean.getReference(Product.class, 3);
Order order = new Order();
order.setCustomer(customer);
List<OrderDetail> details = new ArrayList<>();
details.add(new OrderDetail(product1, 5, 10.50));
details.add(new OrderDetail(product2, 3, 1.10));
details.add(new OrderDetail(product3, 1, 2.00));
order.setDetails(details);
//order.addShipment(new OrderShipment());
Ebean.save(order);
return order;
}
private void createOrder2(Customer customer) {
Product product1 = Ebean.getReference(Product.class, 1);
Order order = new Order();
order.setStatus(Status.SHIPPED);
order.setCustomer(customer);
List<OrderDetail> details = new ArrayList<>();
details.add(new OrderDetail(product1, 4, 10.50));
order.setDetails(details);
//order.addShipment(new OrderShipment());
Ebean.save(order);
}
private void createOrder3(Customer customer) {
Product product1 = Ebean.getReference(Product.class, 1);
Product product3 = Ebean.getReference(Product.class, 3);
Order order = new Order();
order.setStatus(Status.COMPLETE);
order.setCustomer(customer);
List<OrderDetail> details = new ArrayList<>();
details.add(new OrderDetail(product1, 3, 10.50));
details.add(new OrderDetail(product3, 40, 2.10));
order.setDetails(details);
//order.addShipment(new OrderShipment());
Ebean.save(order);
}
private void createOrder4(Customer customer) {
Order order = new Order();
order.setCustomer(customer);
//order.addShipment(new OrderShipment());
Ebean.save(order);
}
}