/*
* 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.util.gen;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.StringTokenizer;
import org.apache.commons.io.IOUtils;
/**
* Generates useful names.
*
* @author oliver.guenther
*/
public class NameGenerator {
private List<String> businessEntities;
private List<String> namesFemaleFirst;
private List<String> namesMaleFirst;
private List<String> namesLast;
private List<String> streets;
private List<String> towns;
private final Random R;
public NameGenerator() throws RuntimeException {
R = new Random();
businessEntities = new ArrayList<>();
namesFemaleFirst = new ArrayList<>();
namesMaleFirst = new ArrayList<>();
namesLast = new ArrayList<>();
streets = new ArrayList<>();
towns = new ArrayList<>();
Map<String, List<String>> sources = new HashMap<>();
sources.put("de_businesses.txt", businessEntities);
sources.put("de_names_female_first.txt", namesFemaleFirst);
sources.put("de_names_male_first.txt", namesMaleFirst);
sources.put("de_names_last.txt", namesLast);
sources.put("de_streets.txt", streets);
sources.put("de_towns.txt", towns);
for (String resource : sources.keySet()) {
// load txt files.
try (InputStream in = this.getClass().getResourceAsStream(resource)) {
String all = IOUtils.toString(in, "UTF-8");
List<String> data = sources.get(resource);
for (StringTokenizer st = new StringTokenizer(all, "\n"); st.hasMoreTokens();) {
String s = st.nextToken();
data.add(s);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
public void showSourceData(PrintStream out) {
if ( out == null ) return;
out.println("Business Enteties:");
for (String string : businessEntities) {
out.println(" " + string);
}
out.println("Names Female First:");
for (String string : namesFemaleFirst) {
out.println(" " + string);
}
out.println("Names Male First:");
for (String string : namesMaleFirst) {
out.println(" " + string);
}
out.println("Names Last:");
for (String string : namesLast) {
out.println(" " + string);
}
out.println("Streets:");
for (String string : streets) {
out.println(" " + string);
}
out.println("Towns:");
for (String string : towns) {
out.println(" " + string);
}
}
public Name makeName() {
boolean female = R.nextBoolean();
Name.Gender gender = Name.Gender.MALE;
if ( female ) gender = Name.Gender.FEMALE;
List<String> first = (female ? namesFemaleFirst : namesMaleFirst);
return new Name(
first.get(R.nextInt(first.size())),
namesLast.get(R.nextInt(namesLast.size())),
gender);
}
public String makeCompanyName() {
StringBuilder sb = new StringBuilder();
sb.append(namesLast.get(R.nextInt(namesLast.size()))).append(" ").append(businessEntities.get(R.nextInt(businessEntities.size())));
return sb.toString();
}
public GeneratedAddress makeAddress() {
return new GeneratedAddress(
streets.get(R.nextInt(streets.size())),
R.nextInt(300),
String.format("%05d", R.nextInt(100000)),
towns.get(R.nextInt(towns.size())));
}
public static void main(String[] args) {
NameGenerator n = new NameGenerator();
for (int i = 0; i < 10; i++) {
System.out.println(n.makeAddress());
System.out.println(n.makeCompanyName());
}
}
}