blob: 2c1ed58057945e0db4ddd684f3f88b09e8b5c4a3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2013, 2015 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.dataset.person;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import org.eclipse.nebula.widgets.nattable.dataset.person.Person.Gender;
/**
* Class that acts as service for accessing numerous {@link Person}s. The values
* are randomly put together out of names and places from "The Simpsons"
*/
public class PersonService {
static String[] maleNames = { "Bart", "Homer", "Lenny", "Carl", "Waylon",
"Ned", "Timothy", "Rodd", "Todd" };
static String[] femaleNames = { "Marge", "Lisa", "Maggie", "Edna", "Helen",
"Jessica", "Maude" };
static String[] lastNames = { "Simpson", "Leonard", "Carlson", "Smithers",
"Flanders", "Krabappel", "Lovejoy" };
static String[] streetNames = new String[] { "Evergreen Terrace",
"Main Street", "South Street", "Plympton Street",
"Highland Avenue", "Elm Street", "Oak Grove Street" };
static String[] cityNames = new String[] { "Springfield", "Shelbyville",
"Ogdenville", "Waverly Hills", "North Haverbrook", "Capital City" };
static String[] foodList = new String[] { "Donut", "Bacon", "Fish",
"Vegetables", "Ham", "Prezels" };
static String[] drinkList = new String[] { "Beer", "Water", "Soda", "Milk",
"Coke", "Fizzy Bubblech" };
static String baseText = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, "
+ "sed diam nonumy eirmod tempor invidunt ut labore et dolore "
+ "magna aliquyam erat, sed diam voluptua.";
/**
* Creates a list of random {@link Person}s.
*
* @param numberOfPersons
* The number of {@link Person}s that should be generated.
* @return A list containing the given amount of random generated persons.
*/
public static List<Person> getRandomPersons(int numberOfPersons) {
List<Person> result = new ArrayList<Person>();
for (int i = 0; i < numberOfPersons; i++) {
result.add(createPerson(i));
}
return result;
}
/**
* Creates a fixed list of {@link Person}s.
*/
public static List<Person> getFixedPersons() {
List<Person> result = new ArrayList<Person>();
// create 10 Simpsons
// 3 Homer
result.add(new Person(1, maleNames[1], lastNames[0], Gender.MALE, true,
new Date(), 100d));
result.add(new Person(2, maleNames[1], lastNames[0], Gender.MALE, true,
new Date(), 100d));
result.add(new Person(3, maleNames[1], lastNames[0], Gender.MALE, true,
new Date(), 100d));
// 3 Bart
result.add(new Person(4, maleNames[0], lastNames[0], Gender.MALE,
false, new Date(), 100d));
result.add(new Person(5, maleNames[0], lastNames[0], Gender.MALE,
false, new Date(), 100d));
result.add(new Person(6, maleNames[0], lastNames[0], Gender.MALE,
false, new Date(), 100d));
// 2 Marge
result.add(new Person(7, femaleNames[0], lastNames[0], Gender.FEMALE,
true, new Date(), 100d));
result.add(new Person(8, femaleNames[0], lastNames[0], Gender.FEMALE,
true, new Date(), 100d));
// 2 Lisa
result.add(new Person(9, femaleNames[1], lastNames[0], Gender.FEMALE,
false, new Date(), 100d));
result.add(new Person(10, femaleNames[1], lastNames[0], Gender.FEMALE,
false, new Date(), 100d));
// create 8 Flanders
// 2 Ned
result.add(new Person(11, maleNames[5], lastNames[4], Gender.MALE,
true, new Date(), 100d));
result.add(new Person(12, maleNames[5], lastNames[4], Gender.MALE,
true, new Date(), 100d));
// 2 Maude
result.add(new Person(13, femaleNames[6], lastNames[4], Gender.FEMALE,
true, new Date(), 100d));
result.add(new Person(14, femaleNames[6], lastNames[4], Gender.FEMALE,
true, new Date(), 100d));
// 2 Rod
result.add(new Person(15, maleNames[7], lastNames[4], Gender.MALE,
false, new Date(), 100d));
result.add(new Person(16, maleNames[7], lastNames[4], Gender.MALE,
false, new Date(), 100d));
// 2 Tod
result.add(new Person(17, maleNames[8], lastNames[4], Gender.MALE,
false, new Date(), 100d));
result.add(new Person(18, maleNames[8], lastNames[4], Gender.MALE,
false, new Date(), 100d));
return result;
}
/**
* Creates a fixed list of {@link Person}s with a few null values.
*/
public static List<Person> getFixedPersonsWithNull() {
List<Person> result = new ArrayList<Person>();
// create 5 Simpsons
// 2 Homer
result.add(new Person(1, maleNames[1], lastNames[0], Gender.MALE, true,
new Date(), 100d));
result.add(new Person(3, maleNames[1], lastNames[0], Gender.MALE, true,
new Date(), 100d));
// 2 Marge
result.add(new Person(7, femaleNames[0], lastNames[0], Gender.FEMALE,
true, new Date(), 100d));
result.add(new Person(8, femaleNames[0], lastNames[0], Gender.FEMALE,
true, new Date(), 100d));
// 1 Bart without money
result.add(new Person(7, femaleNames[0], lastNames[0], Gender.FEMALE,
true, new Date(), null));
// create 2 Flanders without last name
// 1 Ned
result.add(new Person(11, maleNames[5], null, Gender.MALE,
true, new Date(), 100d));
// 1 Maude
result.add(new Person(13, femaleNames[6], null, Gender.FEMALE,
true, new Date(), 100d));
return result;
}
public static List<Person> getFixedMixedPersons() {
List<Person> result = new ArrayList<Person>();
result.add(new Person(21, maleNames[0], lastNames[2], Gender.MALE,
true, new Date(), 100d));
result.add(new Person(22, maleNames[1], lastNames[2], Gender.MALE,
true, new Date(), 100d));
result.add(new Person(23, maleNames[5], lastNames[2], Gender.MALE,
true, new Date(), 100d));
result.add(new Person(24, femaleNames[0], lastNames[2], Gender.FEMALE,
false, new Date(), 100d));
result.add(new Person(25, femaleNames[6], lastNames[2], Gender.FEMALE,
false, new Date(), 100d));
// add doubles
result.add(new Person(30, maleNames[1], lastNames[0], Gender.MALE,
true, new Date(), 100d));
result.add(new Person(31, maleNames[1], lastNames[0], Gender.MALE,
true, new Date(), 100d));
result.add(new Person(32, maleNames[1], lastNames[2], Gender.MALE,
true, new Date(), 100d));
result.add(new Person(33, maleNames[1], lastNames[2], Gender.MALE,
true, new Date(), 100d));
return result;
}
/**
* Creates a list of {@link Person}s.
*
* @param numberOfPersons
* The number of {@link Person}s that should be generated.
* @return
*/
public static List<Person> getPersons(int numberOfPersons) {
List<Person> result = new ArrayList<Person>();
for (int i = 0; i < numberOfPersons; i++) {
result.add(createPerson(i));
}
return result;
}
/**
* Creates a list of {@link PersonWithAddress}.
*
* @param numberOfPersons
* The number of {@link PersonWithAddress} that should be
* generated.
* @return
*/
public static List<PersonWithAddress> getPersonsWithAddress(
int numberOfPersons) {
List<PersonWithAddress> result = new ArrayList<PersonWithAddress>();
for (int i = 0; i < numberOfPersons; i++) {
result.add(createPersonWithAddress(i));
}
return result;
}
/**
* Creates a list of {@link ExtendedPersonWithAddress}.
*
* @param numberOfPersons
* The number of {@link ExtendedPersonWithAddress} that should be
* generated.
* @return
*/
public static List<ExtendedPersonWithAddress> getExtendedPersonsWithAddress(
int numberOfPersons) {
List<ExtendedPersonWithAddress> result = new ArrayList<ExtendedPersonWithAddress>();
for (int i = 0; i < numberOfPersons; i++) {
result.add(createExtendedPersonWithAddress(i));
}
return result;
}
/**
* Creates a random person out of names which are taken from "The Simpsons"
* and enrich them with random generated married state and birthday date.
*
* @return
*/
private static Person createPerson(int id) {
Random randomGenerator = new Random();
Person result = new Person(id);
result.setGender(Gender.values()[randomGenerator.nextInt(2)]);
if (result.getGender().equals(Gender.MALE)) {
result.setFirstName(maleNames[randomGenerator.nextInt(maleNames.length)]);
} else {
result.setFirstName(femaleNames[randomGenerator.nextInt(femaleNames.length)]);
}
result.setLastName(lastNames[randomGenerator.nextInt(lastNames.length)]);
result.setMarried(randomGenerator.nextBoolean());
int month = randomGenerator.nextInt(12);
int day = 0;
if (month == 2) {
day = randomGenerator.nextInt(28);
} else {
day = randomGenerator.nextInt(30);
}
int year = 1920 + randomGenerator.nextInt(90);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
result.setBirthday(sdf.parse("" + year + "-" + month + "-" + day));
} catch (ParseException e) {
e.printStackTrace();
}
result.setMoney(randomGenerator.nextDouble() * 100);
return result;
}
/**
* Creates a random address out of street names, postal codes and city names
* which are taken from "The Simpsons" (i haven't found postal codes, so
* here i invented some for the example)
*
* @return
*/
public static Address createAddress() {
String[] streets = getStreetNames();
int[] plz = { 11111, 22222, 33333, 44444, 55555, 66666 };
String[] cities = getCityNames();
Random randomGenerator = new Random();
Address result = new Address();
result.setStreet(streets[randomGenerator.nextInt(streets.length)]);
result.setHousenumber(randomGenerator.nextInt(200));
int cityRandom = randomGenerator.nextInt(cities.length);
result.setPostalCode(plz[cityRandom]);
result.setCity(cities[cityRandom]);
return result;
}
/**
* Creates a random person out of names which are taken from "The Simpsons"
* and enrich them with random generated married state and birthday date.
* Also adds a random address out of street names, postal codes and city
* names which are taken from "The Simpsons" (i haven't found postal codes,
* so here i invented some for the example)
*
* @return
*/
public static PersonWithAddress createPersonWithAddress(int id) {
return new PersonWithAddress(createPerson(id), createAddress());
}
/**
* Creates a random person out of names which are taken from "The Simpsons"
* and enrich them with random generated married state and birthday date.
* Adds a random address out of street names, postal codes and city names
* which are taken from "The Simpsons" (i haven't found postal codes, so
* here i invented some for the example). Also adds extended information
* like a password, a random long description text, a money balance and
* collections of favourite food and drinks.
*
* @return
*/
public static ExtendedPersonWithAddress createExtendedPersonWithAddress(int id) {
return new ExtendedPersonWithAddress(createPerson(id),
createAddress(), generateSimplePassword(),
createRandomLengthText(), createRandomMoneyAmount(),
createFavouriteFood(), createFavouriteDrinks());
}
/**
* @return A simple password consisting of 8 characters in the value ranges
* a-z, A-Z
*/
public static String generateSimplePassword() {
String result = "";
for (int i = 0; i < 7; i++) {
int rnd = (int) (Math.random() * 52);
char base = (rnd < 26) ? 'A' : 'a';
result += (char) (base + rnd % 26);
}
return result;
}
private static List<String> createFavouriteFood() {
String[] food = getFoodList();
Random rand = new Random();
int favCount = rand.nextInt(food.length);
List<String> result = new ArrayList<String>();
for (int i = 0; i < favCount; i++) {
int randIndex = rand.nextInt(food.length);
if (!result.contains(food[randIndex])) {
result.add(food[randIndex]);
}
}
return result;
}
private static List<String> createFavouriteDrinks() {
String[] drinks = getDrinkList();
Random rand = new Random();
int favCount = rand.nextInt(drinks.length);
List<String> result = new ArrayList<String>();
for (int i = 0; i < favCount; i++) {
int randIndex = rand.nextInt(drinks.length);
if (!result.contains(drinks[randIndex])) {
result.add(drinks[randIndex]);
}
}
return result;
}
/**
* @return An array of street names that are also used to create random
* addresses.
*/
public static String[] getStreetNames() {
return streetNames;
}
/**
* @return An array of city names that are also used to create random
* addresses.
*/
public static String[] getCityNames() {
return cityNames;
}
/**
* @return An array of food names.
*/
public static String[] getFoodList() {
return foodList;
}
/**
* @return An array of drink names.
*/
public static String[] getDrinkList() {
return drinkList;
}
/**
* @return A custom length text containing line breaks
*/
public static String createRandomLengthText() {
String[] words = baseText.split(" ");
Random wordRandom = new Random();
String msg = "";
int randWords = wordRandom.nextInt(words.length);
for (int j = 0; j < randWords; j++) {
msg += words[j];
if (msg.endsWith(",") || msg.endsWith(".")) {
msg += "\n";
} else {
msg += " ";
}
}
return msg;
}
public static Double createRandomMoneyAmount() {
Double result = new Random().nextDouble() * 1000;
BigDecimal bd = new BigDecimal(result);
bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}
}