001package de.cuioss.test.generator.domain;
002
003import static de.cuioss.test.generator.Generators.fixedValues;
004
005import de.cuioss.test.generator.TypedGenerator;
006
007/**
008 * Creates syntactically valid email-addresses
009 *
010 * @author Oliver Wolff
011 *
012 */
013public class EmailGenerator implements TypedGenerator<String> {
014
015    private final TypedGenerator<String> firstNames = NameGenerators.FIRSTNAMES_ANY_ENGLISH.generator();
016    private final TypedGenerator<String> familyNames = NameGenerators.FAMILY_NAMES_ENGLISH.generator();
017
018    private static final TypedGenerator<String> TLDS = fixedValues("de", "org", "com", "net");
019    private static final TypedGenerator<String> DOMAINS =
020        fixedValues("email", "mail", "icw", "message", "example", "hospital");
021
022    @Override
023    public String next() {
024        return createEmail(firstNames.next(), familyNames.next());
025    }
026
027    /**
028     * @param firstname
029     * @param lastname
030     * @return an email address created in the form of
031     *         firstname.lastname@|email|mail|icw.de|org|com|net
032     */
033    public static String createEmail(final String firstname, final String lastname) {
034        return firstname.toLowerCase() + '.' + lastname.toLowerCase() +
035                '@' + DOMAINS.next() +
036                '.' + TLDS.next();
037    }
038
039}