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.StringEscapeUtils;
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);
}
}
/**
* In case of the illegal hostname characters in company name
* and truncate it if it is too long (length > 10) after escape
*
* It is compatible with other non-latin language and will not change the original result for latin language.
*
* P.S. Actually the best way for Chinese here is to use phonetic writing (so as Japanese or Korean)
*/
@Override
public void generateDomain() {
if (domain != null) {
return;
}
String host = TextUtils.stripAccents(StringUtils.strip(StringUtils.deleteWhitespace(name.toLowerCase()), ".").replace("/", ""));
int len1 = host.length();
host = StringEscapeUtils.escapeJava(host).replaceAll("\\\\u", "");
int len2 = host.length();
if (len2 > len1 && len2 > 10)
host = host.substring(0, 10);
domain = host + "." + 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;
}
}