CustomerPopulator.java
Home
/
sm-shop /
src /
main /
java /
com /
salesmanager /
web /
populator /
customer /
CustomerPopulator.java
package com.salesmanager.web.populator.customer;
import java.util.Map;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.salesmanager.core.business.common.model.Billing;
import com.salesmanager.core.business.common.model.Delivery;
import com.salesmanager.core.business.customer.model.Customer;
import com.salesmanager.core.business.customer.model.attribute.CustomerAttribute;
import com.salesmanager.core.business.customer.model.attribute.CustomerOption;
import com.salesmanager.core.business.customer.model.attribute.CustomerOptionValue;
import com.salesmanager.core.business.customer.service.attribute.CustomerOptionService;
import com.salesmanager.core.business.customer.service.attribute.CustomerOptionValueService;
import com.salesmanager.core.business.generic.exception.ConversionException;
import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.reference.country.model.Country;
import com.salesmanager.core.business.reference.country.service.CountryService;
import com.salesmanager.core.business.reference.language.model.Language;
import com.salesmanager.core.business.reference.language.service.LanguageService;
import com.salesmanager.core.business.reference.zone.model.Zone;
import com.salesmanager.core.business.reference.zone.service.ZoneService;
import com.salesmanager.core.utils.AbstractDataPopulator;
import com.salesmanager.web.entity.customer.Address;
import com.salesmanager.web.entity.customer.PersistableCustomer;
import com.salesmanager.web.entity.customer.attribute.PersistableCustomerAttribute;
public class CustomerPopulator extends
AbstractDataPopulator<PersistableCustomer, Customer> {
protected static final Logger LOG=LoggerFactory.getLogger( CustomerPopulator.class );
private CountryService countryService;
private ZoneService zoneService;
private LanguageService languageService;
private CustomerOptionService customerOptionService;
private CustomerOptionValueService customerOptionValueService;
/**
* Creates a Customer entity ready to be saved
*/
@Override
public Customer populate(PersistableCustomer source, Customer target,
MerchantStore store, Language language) throws ConversionException {
Validate.notNull(customerOptionService, "Requires to set CustomerOptionService");
Validate.notNull(customerOptionValueService, "Requires to set CustomerOptionValueService");
Validate.notNull(zoneService, "Requires to set ZoneService");
Validate.notNull(countryService, "Requires to set CountryService");
Validate.notNull(languageService, "Requires to set LanguageService");
try {
if(source.getId() !=null && source.getId()>0){
target.setId( source.getId() );
}
if(!StringUtils.isBlank(source.getEncodedPassword())) {
target.setPassword(source.getEncodedPassword());
target.setAnonymous(false);
}
target.setEmailAddress(source.getEmailAddress());
target.setNick(source.getUserName());
if(source.getGender()!=null && target.getGender()==null) {
target.setGender( com.salesmanager.core.business.customer.model.CustomerGender.valueOf( source.getGender() ) );
}
if(target.getGender()==null) {
target.setGender( com.salesmanager.core.business.customer.model.CustomerGender.M);
}
Map<String,Country> countries = countryService.getCountriesMap(language);
target.setMerchantStore( store );
Address sourceBilling = source.getBilling();
if(sourceBilling!=null) {
Billing billing = new Billing();
billing.setAddress(sourceBilling.getAddress());
billing.setCity(sourceBilling.getCity());
billing.setCompany(sourceBilling.getCompany());
//billing.setCountry(country);
billing.setFirstName(sourceBilling.getFirstName());
billing.setLastName(sourceBilling.getLastName());
billing.setTelephone(sourceBilling.getPhone());
billing.setPostalCode(sourceBilling.getPostalCode());
billing.setState(sourceBilling.getStateProvince());
Country billingCountry = null;
if(!StringUtils.isBlank(sourceBilling.getCountry())) {
billingCountry = countries.get(sourceBilling.getCountry());
if(billingCountry==null) {
throw new ConversionException("Unsuported country code " + sourceBilling.getCountry());
}
billing.setCountry(billingCountry);
}
if(billingCountry!=null && !StringUtils.isBlank(sourceBilling.getZone())) {
Zone zone = zoneService.getByCode(sourceBilling.getZone());
if(zone==null) {
throw new ConversionException("Unsuported zone code " + sourceBilling.getZone());
}
billing.setZone(zone);
}
target.setBilling(billing);
}
if(target.getBilling() ==null && source.getBilling()!=null){
LOG.info( "Setting default values for billing" );
Billing billing = new Billing();
Country billingCountry = null;
if(StringUtils.isNotBlank( source.getBilling().getCountry() )) {
billingCountry = countries.get(source.getBilling().getCountry());
if(billingCountry==null) {
throw new ConversionException("Unsuported country code " + sourceBilling.getCountry());
}
billing.setCountry(billingCountry);
target.setBilling( billing );
}
}
Address sourceShipping = source.getDelivery();
if(sourceShipping!=null) {
Delivery delivery = new Delivery();
delivery.setAddress(sourceShipping.getAddress());
delivery.setCity(sourceShipping.getCity());
delivery.setCompany(sourceShipping.getCompany());
delivery.setFirstName(sourceShipping.getFirstName());
delivery.setLastName(sourceShipping.getLastName());
delivery.setTelephone(sourceShipping.getPhone());
delivery.setPostalCode(sourceShipping.getPostalCode());
delivery.setState(sourceShipping.getStateProvince());
Country deliveryCountry = null;
if(!StringUtils.isBlank(sourceShipping.getCountry())) {
deliveryCountry = countries.get(sourceShipping.getCountry());
if(deliveryCountry==null) {
throw new ConversionException("Unsuported country code " + sourceShipping.getCountry());
}
delivery.setCountry(deliveryCountry);
}
if(deliveryCountry!=null && !StringUtils.isBlank(sourceShipping.getZone())) {
Zone zone = zoneService.getByCode(sourceShipping.getZone());
if(zone==null) {
throw new ConversionException("Unsuported zone code " + sourceShipping.getZone());
}
delivery.setZone(zone);
}
target.setDelivery(delivery);
}
if(target.getDelivery() ==null && source.getDelivery()!=null){
LOG.info( "Setting default value for delivery" );
Delivery delivery = new Delivery();
Country deliveryCountry = null;
if(StringUtils.isNotBlank( source.getDelivery().getCountry() )) {
deliveryCountry = countries.get(source.getDelivery().getCountry());
if(deliveryCountry==null) {
throw new ConversionException("Unsuported country code " + sourceShipping.getCountry());
}
delivery.setCountry(deliveryCountry);
target.setDelivery( delivery );
}
}
if(source.getAttributes()!=null) {
for(PersistableCustomerAttribute attr : source.getAttributes()) {
CustomerOption customerOption = customerOptionService.getById(attr.getCustomerOption().getId());
if(customerOption==null) {
throw new ConversionException("Customer option id " + attr.getCustomerOption().getId() + " does not exist");
}
CustomerOptionValue customerOptionValue = customerOptionValueService.getById(attr.getCustomerOptionValue().getId());
if(customerOptionValue==null) {
throw new ConversionException("Customer option value id " + attr.getCustomerOptionValue().getId() + " does not exist");
}
if(customerOption.getMerchantStore().getId().intValue()!=store.getId().intValue()) {
throw new ConversionException("Invalid customer option id ");
}
if(customerOptionValue.getMerchantStore().getId().intValue()!=store.getId().intValue()) {
throw new ConversionException("Invalid customer option value id ");
}
CustomerAttribute attribute = new CustomerAttribute();
attribute.setCustomer(target);
attribute.setCustomerOption(customerOption);
attribute.setCustomerOptionValue(customerOptionValue);
attribute.setTextValue(attr.getTextValue());
target.getAttributes().add(attribute);
}
}
if(target.getDefaultLanguage()==null) {
Language lang = languageService.getByCode(source.getLanguage());
if(lang==null) {
lang = store.getDefaultLanguage();
}
target.setDefaultLanguage(lang);
}
} catch (Exception e) {
throw new ConversionException(e);
}
return target;
}
@Override
protected Customer createTarget() {
return new Customer();
}
public void setCustomerOptionService(CustomerOptionService customerOptionService) {
this.customerOptionService = customerOptionService;
}
public CustomerOptionService getCustomerOptionService() {
return customerOptionService;
}
public void setCustomerOptionValueService(CustomerOptionValueService customerOptionValueService) {
this.customerOptionValueService = customerOptionValueService;
}
public CustomerOptionValueService getCustomerOptionValueService() {
return customerOptionValueService;
}
public CountryService getCountryService() {
return countryService;
}
public void setCountryService(CountryService countryService) {
this.countryService = countryService;
}
public ZoneService getZoneService() {
return zoneService;
}
public void setZoneService(ZoneService zoneService) {
this.zoneService = zoneService;
}
public LanguageService getLanguageService() {
return languageService;
}
public void setLanguageService(LanguageService languageService) {
this.languageService = languageService;
}
}