/**
*
*/
package com.salesmanager.shop.populator.customer;
import com.salesmanager.core.business.exception.ConversionException;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.business.services.reference.country.CountryService;
import com.salesmanager.core.business.services.reference.zone.ZoneService;
import com.salesmanager.core.business.utils.AbstractDataPopulator;
import com.salesmanager.core.model.common.Delivery;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.country.Country;
import com.salesmanager.core.model.reference.language.Language;
import com.salesmanager.core.model.reference.zone.Zone;
import com.salesmanager.shop.model.customer.ReadableDelivery;
import org.apache.commons.lang.StringUtils;
import java.util.Map;
/**
* @author Carl Samson
*
*/
public class ReadableCustomerDeliveryAddressPopulator extends AbstractDataPopulator<Delivery, ReadableDelivery>
{
private CountryService countryService;
private ZoneService zoneService;
@Override
public ReadableDelivery populate( Delivery source, ReadableDelivery target, MerchantStore store, Language language )
throws ConversionException
{
if(countryService==null) {
throw new ConversionException("countryService must be set");
}
if(zoneService==null) {
throw new ConversionException("zoneService must be set");
}
target.setLatitude(source.getLatitude());
target.setLongitude(source.getLongitude());
if(StringUtils.isNotBlank( source.getCity() )){
target.setCity(source.getCity());
}
if(StringUtils.isNotBlank( source.getCompany() )){
target.setCompany(source.getCompany());
}
if(StringUtils.isNotBlank( source.getAddress() )){
target.setAddress(source.getAddress());
}
if(StringUtils.isNotBlank( source.getFirstName() )){
target.setFirstName(source.getFirstName());
}
if(StringUtils.isNotBlank( source.getLastName() )){
target.setLastName(source.getLastName());
}
if(StringUtils.isNotBlank( source.getPostalCode() )){
target.setPostalCode(source.getPostalCode());
}
if(StringUtils.isNotBlank( source.getTelephone() )){
target.setPhone(source.getTelephone());
}
target.setStateProvince(source.getState());
if(source.getTelephone()==null) {
target.setPhone(source.getTelephone());
}
target.setAddress(source.getAddress());
if(source.getCountry()!=null) {
target.setCountry(source.getCountry().getIsoCode());
//resolve country name
try {
Map<String,Country> countries = countryService.getCountriesMap(language);
Country c =countries.get(source.getCountry().getIsoCode());
if(c!=null) {
target.setCountryName(c.getName());
}
} catch (ServiceException e) {
// TODO Auto-generated catch block
throw new ConversionException(e);
}
}
if(source.getZone()!=null) {
target.setZone(source.getZone().getCode());
//resolve zone name
try {
Map<String,Zone> zones = zoneService.getZones(language);
Zone z = zones.get(source.getZone().getCode());
if(z!=null) {
target.setProvinceName(z.getName());
}
} catch (ServiceException e) {
// TODO Auto-generated catch block
throw new ConversionException(e);
}
}
return target;
}
@Override
protected ReadableDelivery createTarget() {
// TODO Auto-generated method stub
return null;
}
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;
}
}