package io.codearte.jfairy.producer.person;
import io.codearte.jfairy.producer.BaseProducer;
import io.codearte.jfairy.producer.company.Company;
import com.google.common.base.Optional;
import org.joda.time.DateTime;
/**
* @author jkubrynski@gmail.com
* @since 2013-11-16
*/
public final class PersonProperties {
private static Optional<Integer> minimumAge = Optional.absent();
private static Optional<Integer> maximumAge = Optional.absent();
private PersonProperties() {
}
public abstract static class PersonProperty {
public abstract void apply(PersonProvider person, BaseProducer baseProducer);
}
public static PersonProperty male() {
return new PersonProperty() {
@Override
public void apply(PersonProvider person, BaseProducer baseProducer) {
person.setSex(Person.Sex.MALE);
}
};
}
public static PersonProperty female() {
return new PersonProperty() {
@Override
public void apply(PersonProvider person, BaseProducer baseProducer) {
person.setSex(Person.Sex.FEMALE);
}
};
}
public static PersonProperty ageBetween(final int minAge, final int maxAge) {
return new PersonProperty() {
@Override
public void apply(PersonProvider person, BaseProducer baseProducer) {
person.setAge(baseProducer.randomBetween(minAge, maxAge));
minimumAge = Optional.of(minAge);
maximumAge = Optional.of(maxAge);
}
};
}
public static PersonProperty minAge(final int minAge) {
minimumAge = Optional.of(minAge);
return ageBetween(minAge, maximumAge.or(PersonProvider.MAX_AGE));
}
public static PersonProperty maxAge(final int maxAge) {
maximumAge = Optional.of(maxAge);
return ageBetween(minimumAge.or(PersonProvider.MIN_AGE), maxAge);
}
public static PersonProperty telephoneFormat(final String telephoneFormat) {
return new PersonProperty() {
@Override
public void apply(PersonProvider person, BaseProducer baseProducer) {
person.setTelephoneNumberFormat(telephoneFormat);
}
};
}
public static PersonProperty withCompany(final Company company) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setCompany(company);
}
};
}
public static PersonProperty withAddress(final Address address) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setAddress(address);
}
};
}
public static PersonProperty withFirstName(final String firstName) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setFirstName(firstName);
}
};
}
public static PersonProperty withMiddleName(final String middleName) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setMiddleName(middleName);
}
};
}
public static PersonProperty withLastName(final String lastName) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setLastName(lastName);
}
};
}
public static PersonProperty withEmail(final String email) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setEmail(email);
}
};
}
public static PersonProperty withUsername(final String username) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setUsername(username);
}
};
}
public static PersonProperty withTelephoneNumber(final String telephoneNumber) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setTelephoneNumber(telephoneNumber);
}
};
}
public static PersonProperty withDateOfBirth(final DateTime dateOfBirth) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setDateOfBirth(dateOfBirth);
}
};
}
public static PersonProperty withAge(final Integer age) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setAge(age);
}
};
}
public static PersonProperty withPassword(final String password) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setPassword(password);
}
};
}
public static PersonProperty withCompanyEmail(final String companyEmail) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setCompanyEmail(companyEmail);
}
};
}
public static PersonProperty withNationalIdentityCardNumber(final String nationalIdentityCardNumber) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setNationalIdentityCardNumber(nationalIdentityCardNumber);
}
};
}
public static PersonProperty withNationalIdentificationNumber(final String nationalIdentificationNumber) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setNationalIdentificationNumber(nationalIdentificationNumber);
}
};
}
public static PersonProperty withPassportNumber(final String passportNumber) {
return new PersonProperty() {
@Override
public void apply(PersonProvider personProvider, BaseProducer baseProducer) {
personProvider.setPassportNumber(passportNumber);
}
};
}
}