Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chinese Locale Support #80

Merged
merged 9 commits into from
Apr 11, 2017
19 changes: 18 additions & 1 deletion src/main/java/io/codearte/jfairy/Bootstrap.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,23 @@ public static Fairy create(Provider<DataMaster> dataMaster, Locale locale) {
return builder().withDataMasterProvider(dataMaster).withLocale(locale).build();
}

/**
* Support customized language config
* @param dataMaster master of the config
* @param locale The Locale to set.
* @param random specific random
* @return FariyModule instance in accordance with locale
*/
private static FairyModule getFairyModuleForLocale(DataMaster dataMaster, Locale locale, Random random) {
LanguageCode code = LanguageCode.valueOf(locale.getLanguage().toUpperCase());

LanguageCode code = null;
try {
code = LanguageCode.valueOf(locale.getLanguage().toUpperCase());
} catch (IllegalArgumentException e) {
LOG.warn("Uknown locale " + locale);
code = LanguageCode.EN;
}

switch (code) {
case PL:
return new PlFairyModule(dataMaster, random);
Expand All @@ -127,6 +142,8 @@ private static FairyModule getFairyModuleForLocale(DataMaster dataMaster, Locale
return new EsFairyModule(dataMaster, random);
case SV:
return new SvFairyModule(dataMaster, random);
case ZH:
return new ZhFairyModule(dataMaster, random);
default:
LOG.info("No data for your language - using EN");
return new EnFairyModule(dataMaster, random);
Expand Down
16 changes: 11 additions & 5 deletions src/main/java/io/codearte/jfairy/FairyModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,14 @@
import com.google.inject.assistedinject.FactoryModuleBuilder;
import io.codearte.jfairy.data.DataMaster;
import io.codearte.jfairy.producer.company.CompanyFactory;
import io.codearte.jfairy.producer.company.CompanyProvider;
import io.codearte.jfairy.producer.company.DefaultCompanyProvider;
import io.codearte.jfairy.producer.payment.DefaultIBANProvider;
import io.codearte.jfairy.producer.payment.IBANFactory;
import io.codearte.jfairy.producer.payment.IBANProvider;
import io.codearte.jfairy.producer.person.DefaultPersonProvider;
import io.codearte.jfairy.producer.person.PersonFactory;
import io.codearte.jfairy.producer.person.PersonProvider;

import java.util.Random;

Expand All @@ -16,9 +22,9 @@
*/
public abstract class FairyModule extends AbstractModule {

private final Random random;
protected final Random random;

private final DataMaster dataMaster;
protected final DataMaster dataMaster;

public FairyModule(DataMaster dataMaster, Random random) {
this.random = random;
Expand All @@ -30,9 +36,9 @@ protected void configure() {
bind(DataMaster.class).toInstance(dataMaster);
bind(Random.class).toInstance(random);

install(new FactoryModuleBuilder().build(PersonFactory.class));
install(new FactoryModuleBuilder().build(FairyFactory.class));
install(new FactoryModuleBuilder().build(CompanyFactory.class));
install(new FactoryModuleBuilder().build(IBANFactory.class));
install(new FactoryModuleBuilder().implement(PersonProvider.class, DefaultPersonProvider.class).build(PersonFactory.class));
install(new FactoryModuleBuilder().implement(CompanyProvider.class, DefaultCompanyProvider.class).build(CompanyFactory.class));
install(new FactoryModuleBuilder().implement(IBANProvider.class, DefaultIBANProvider.class).build(IBANFactory.class));
}
}
50 changes: 50 additions & 0 deletions src/main/java/io/codearte/jfairy/ZhFairyModule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package io.codearte.jfairy;

import com.google.inject.assistedinject.FactoryModuleBuilder;
import io.codearte.jfairy.data.DataMaster;
import io.codearte.jfairy.producer.VATIdentificationNumberProvider;
import io.codearte.jfairy.producer.company.CompanyFactory;
import io.codearte.jfairy.producer.company.CompanyProvider;
import io.codearte.jfairy.producer.company.DefaultCompanyProvider;
import io.codearte.jfairy.producer.company.locale.zh.ZhCompanyProvider;
import io.codearte.jfairy.producer.company.locale.zh.ZhVATIdentificationNumberProvider;
import io.codearte.jfairy.producer.payment.DefaultIBANProvider;
import io.codearte.jfairy.producer.payment.IBANFactory;
import io.codearte.jfairy.producer.payment.IBANProvider;
import io.codearte.jfairy.producer.person.*;
import io.codearte.jfairy.producer.person.locale.NoNationalIdentificationNumberFactory;
import io.codearte.jfairy.producer.person.locale.zh.ZhAddressProvider;
import io.codearte.jfairy.producer.person.locale.zh.ZhNationalIdentityCardNumberProvider;
import io.codearte.jfairy.producer.person.locale.zh.ZhPassportNumberProvider;

import java.util.Random;

/**
* io.codearte.jfairy.ZhFairyModule
*
* @author lhfcws
* @since 2017/03/01
*/
public class ZhFairyModule extends FairyModule {
public ZhFairyModule(DataMaster dataMaster, Random random) {
super(dataMaster, random);
}

@Override
protected void configure() {
bind(DataMaster.class).toInstance(dataMaster);
bind(Random.class).toInstance(random);

install(new FactoryModuleBuilder().build(FairyFactory.class));
install(new FactoryModuleBuilder().implement(PersonProvider.class, DefaultPersonProvider.class).build(PersonFactory.class));
install(new FactoryModuleBuilder().implement(CompanyProvider.class, ZhCompanyProvider.class).build(CompanyFactory.class));
install(new FactoryModuleBuilder().implement(IBANProvider.class, DefaultIBANProvider.class).build(IBANFactory.class));

// Social Insurance Number is the same as ID number in China now
bind(NationalIdentificationNumberFactory.class).to(NoNationalIdentificationNumberFactory.class);
bind(NationalIdentityCardNumberProvider.class).to(ZhNationalIdentityCardNumberProvider.class);
bind(VATIdentificationNumberProvider.class).to(ZhVATIdentificationNumberProvider.class);
bind(AddressProvider.class).to(ZhAddressProvider.class);
bind(PassportNumberProvider.class).to(ZhPassportNumberProvider.class);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.codearte.jfairy.producer.company;

import io.codearte.jfairy.producer.BaseProducer;

public final class CompanyProperties {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,98 +6,34 @@
import io.codearte.jfairy.producer.BaseProducer;
import io.codearte.jfairy.producer.VATIdentificationNumberProvider;
import io.codearte.jfairy.producer.util.TextUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;

import javax.inject.Inject;

public class CompanyProvider implements Provider<Company> {

private static final String DOMAIN = "domains";
private static final String COMPANY_NAME = "companyNames";
private static final String COMPANY_SUFFIX = "companySuffixes";
private static final String COMPANY_EMAIL = "companyEmails";

private String name;
private String domain;
private String email;
private String vatIdentificationNumber;

private BaseProducer baseProducer;
private DataMaster dataMaster;

private final VATIdentificationNumberProvider vatIdentificationNumberProvider;

@Inject
public CompanyProvider(BaseProducer baseProducer,
DataMaster dataMaster,
VATIdentificationNumberProvider vatIdentificationNumberProvider,
@Assisted CompanyProperties.CompanyProperty... companyProperties) {
this.baseProducer = baseProducer;
this.dataMaster = dataMaster;
this.vatIdentificationNumberProvider = vatIdentificationNumberProvider;

for (CompanyProperties.CompanyProperty companyProperty : companyProperties) {
companyProperty.apply(this);
}
}
public interface CompanyProvider extends Provider<Company> {

String DOMAIN = "domains";
String COMPANY_SUFFIX = "companySuffixes";
String COMPANY_NAME = "companyNames";
String COMPANY_EMAIL = "companyEmails";

@Override
public Company get() {

generateName();
generateDomain();
generateEmail();
generateVatIdentificationNumber();

return new Company(name, domain, email, vatIdentificationNumber);
}
Company get();

private void generateName() {
if (name != null) {
return;
}
name = dataMaster.getRandomValue(COMPANY_NAME);
if (baseProducer.trueOrFalse()) {
name += " " + dataMaster.getRandomValue(COMPANY_SUFFIX);
}
}
void generateName();

private void generateDomain() {
if (domain != null) {
return;
}
domain = TextUtils.stripAccents(StringUtils.strip(StringUtils.deleteWhitespace(name.toLowerCase()), ".").replace("/", ""))
+ "." + dataMaster.getRandomValue(DOMAIN);
}
void generateDomain();

private void generateEmail() {
if (email != null) {
return;
}
email = dataMaster.getRandomValue(COMPANY_EMAIL);
}
void generateEmail();

private void generateVatIdentificationNumber() {
if (vatIdentificationNumber != null) {
return;
}
vatIdentificationNumber = vatIdentificationNumberProvider.get();
}
void generateVatIdentificationNumber();

void setName(String name);

public void setName(String name) {
this.name = name;
}
void setDomain(String domain);

public void setDomain(String domain) {
this.domain = domain;
}
void setEmail(String email);

public void setEmail(String email) {
this.email = email;
}
public void setVatIdentificationNumber(String vatIdentificationNumber) {
this.vatIdentificationNumber = vatIdentificationNumber;
}
void setVatIdentificationNumber(String vatIdentificationNumber);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package io.codearte.jfairy.producer.company;

import com.google.inject.assistedinject.Assisted;
import io.codearte.jfairy.data.DataMaster;
import io.codearte.jfairy.producer.BaseProducer;
import io.codearte.jfairy.producer.VATIdentificationNumberProvider;
import io.codearte.jfairy.producer.util.TextUtils;
import org.apache.commons.lang3.StringUtils;

import javax.inject.Inject;

public class DefaultCompanyProvider implements CompanyProvider {

protected String name;
protected String domain;
protected String email;
protected String vatIdentificationNumber;

protected BaseProducer baseProducer;
protected DataMaster dataMaster;

protected VATIdentificationNumberProvider vatIdentificationNumberProvider;

@Inject
public DefaultCompanyProvider(BaseProducer baseProducer,
DataMaster dataMaster,
VATIdentificationNumberProvider vatIdentificationNumberProvider,
@Assisted CompanyProperties.CompanyProperty... companyProperties) {
this.baseProducer = baseProducer;
this.dataMaster = dataMaster;
this.vatIdentificationNumberProvider = vatIdentificationNumberProvider;

for (CompanyProperties.CompanyProperty companyProperty : companyProperties) {
companyProperty.apply(this);
}
}

@Override
public Company get() {

generateName();
generateDomain();
generateEmail();
generateVatIdentificationNumber();

return new Company(name, domain, email, vatIdentificationNumber);
}

@Override
public void generateName() {
if (name != null) {
return;
}
name = dataMaster.getRandomValue(COMPANY_NAME);
if (baseProducer.trueOrFalse()) {
name += " " + dataMaster.getRandomValue(COMPANY_SUFFIX);
}
}

@Override
public void generateDomain() {
if (domain != null) {
return;
}
domain = TextUtils.stripAccents(StringUtils.strip(StringUtils.deleteWhitespace(name.toLowerCase()), ".").replace("/", ""))
+ "." + dataMaster.getRandomValue(DOMAIN);
}

@Override
public void generateEmail() {
if (email != null) {
return;
}
email = dataMaster.getRandomValue(COMPANY_EMAIL);
}

@Override
public void generateVatIdentificationNumber() {
if (vatIdentificationNumber != null) {
return;
}
vatIdentificationNumber = vatIdentificationNumberProvider.get();
}

@Override
public void setName(String name) {
this.name = name;
}

@Override
public void setDomain(String domain) {
this.domain = domain;
}

@Override
public void setEmail(String email) {
this.email = email;
}

@Override
public void setVatIdentificationNumber(String vatIdentificationNumber) {
this.vatIdentificationNumber = vatIdentificationNumber;
}
}