/* * Copyright (C) 2014 GG-Net GmbH - Oliver Günther * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package eu.ggnet.dwoss.customer.assist.gen; import eu.ggnet.dwoss.rules.SalesChannel; import eu.ggnet.dwoss.rules.PaymentMethod; import eu.ggnet.dwoss.rules.ShippingCondition; import eu.ggnet.dwoss.rules.PaymentCondition; import eu.ggnet.dwoss.util.gen.Name; import eu.ggnet.dwoss.util.gen.NameGenerator; import eu.ggnet.dwoss.util.gen.GeneratedAddress; import java.util.*; import org.apache.commons.lang3.RandomStringUtils; import eu.ggnet.dwoss.customer.entity.*; import static eu.ggnet.dwoss.customer.entity.Contact.Sex.FEMALE; import static eu.ggnet.dwoss.customer.entity.Contact.Sex.MALE; /** * * @author oliver.guenther */ public class CustomerGenerator { private final Random R = new Random(); private class RandomEnum<T extends Enum> { private final T[] values; public RandomEnum(Class<T> clazz) { values = clazz.getEnumConstants(); } public T random() { return values[R.nextInt(values.length)]; } } private final NameGenerator GEN = new NameGenerator(); /** * Generates a {@link Customer}. * This customer will contain randomly generated collections for:<ul> * <li>{@link Customer#companies}</li> * <li>{@link Customer#contacts}</li> * <li>{@link Customer#mandatorMetadata}</li> * </ul> * with a maximum of 15 each. * <p> * @return a generated {@link Customer}. */ public Customer makeCustomer() { Customer c = new Customer(); int r = R.nextInt(14) + 1; for (int i = 0; i < r; i++) { c.add(makeCompany()); c.add(makeContact()); } c.add(makeMandatorMetadata()); return c; } /** * Generates a {@link Company}. * {@link Company#prefered} is never set. * <p> * @return a generated {@link Company}. */ public Company makeCompany() { Company c = new Company(); c.setLedger(R.nextInt(1000) + 1); c.setName(GEN.makeCompanyName()); c.add(makeCommunication()); return c; } /** * Generates an amount of {@link Company}. * <p> * @param amount the amount * @return the generated instances. */ public List<Company> makeCompanies(int amount) { List<Company> contacts = new ArrayList<>(); for (int i = 0; i < amount; i++) { contacts.add(makeCompany()); } return contacts; } /** * Generates a {@link Contact}. * {@link Contact#prefered} is never set. * <p> * @return a generated {@link Contact}. */ public Contact makeContact() { Contact c = new Contact(); Name n = GEN.makeName(); c.setFirstName(n.getFirst()); c.setLastName(n.getLast()); c.setSex(n.getGender().ordinal() == 1 ? MALE : FEMALE); c.setTitle(R.nextInt(1000) % 3 == 0 ? "Dr." : null); c.add(makeCommunication()); c.add(makeAddress()); return c; } /** * Generates an amount of {@link Contact}. * <p> * @param amount the amount * @return the generated instances. */ public List<Contact> makeContacts(int amount) { List<Contact> contacts = new ArrayList<>(); for (int i = 0; i < amount; i++) { contacts.add(makeContact()); } return contacts; } /** * Generates a {@link Address}. * {@link Address#preferedType} is never set. * <p> * @return a generated {@link Contact}. */ public Address makeAddress() { GeneratedAddress a = GEN.makeAddress(); Address customerAddress = new Address(); customerAddress.setCity(a.getTown()); customerAddress.setStreet(a.getStreet()); customerAddress.setZipCode(a.getPostalCode()); return customerAddress; } /** * Generates an amount of persisted {@link Address}. * <p> * @param amount the amount * @return the generated instances. */ public List<Address> makeAddresses(int amount) { List<Address> addresses = new ArrayList<>(); for (int i = 0; i < amount; i++) { addresses.add(makeAddress()); } return addresses; } /** * Generates a non persisted {@link Communication}. * {@link Communication#prefered} is never set. * <p> * @return a generated {@link Communication}. */ private Communication makeCommunication() { Communication c = new Communication(); c.setType(new RandomEnum<>(Communication.Type.class).random()); c.setIdentifier(RandomStringUtils.randomAlphanumeric(5)); return c; } private MandatorMetadata makeMandatorMetadata() { MandatorMetadata m = new MandatorMetadata(); m.setMandatorMatchcode(RandomStringUtils.randomAlphanumeric(4)); m.setPaymentCondition(new RandomEnum<>(PaymentCondition.class).random()); m.setPaymentMethod(new RandomEnum<>(PaymentMethod.class).random()); m.setShippingCondition(new RandomEnum<>(ShippingCondition.class).random()); EnumSet.allOf(SalesChannel.class).stream().filter(t -> R.nextInt(10) < 3).forEach(t -> m.add(t)); return m; } }