package com.salesmanager.shop.populator.customer; import com.salesmanager.core.business.exception.ConversionException; import com.salesmanager.core.business.services.reference.language.LanguageService; import com.salesmanager.core.business.utils.AbstractDataPopulator; import com.salesmanager.core.model.customer.attribute.CustomerOption; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.model.reference.language.Language; import com.salesmanager.shop.model.customer.attribute.CustomerOptionDescription; import com.salesmanager.shop.model.customer.attribute.PersistableCustomerOption; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.Validate; import org.apache.commons.lang3.StringUtils; import java.util.HashSet; import java.util.Set; public class PersistableCustomerOptionPopulator extends AbstractDataPopulator<PersistableCustomerOption, CustomerOption> { private LanguageService languageService; @Override public CustomerOption populate(PersistableCustomerOption source, CustomerOption target, MerchantStore store, Language language) throws ConversionException { Validate.notNull(languageService, "Requires to set LanguageService"); try { target.setCode(source.getCode()); target.setMerchantStore(store); target.setSortOrder(source.getOrder()); if(!StringUtils.isBlank(source.getType())) { target.setCustomerOptionType(source.getType()); } else { target.setCustomerOptionType("TEXT"); } target.setPublicOption(true); if(!CollectionUtils.isEmpty(source.getDescriptions())) { Set<com.salesmanager.core.model.customer.attribute.CustomerOptionDescription> descriptions = new HashSet<com.salesmanager.core.model.customer.attribute.CustomerOptionDescription>(); for(CustomerOptionDescription desc : source.getDescriptions()) { com.salesmanager.core.model.customer.attribute.CustomerOptionDescription description = new com.salesmanager.core.model.customer.attribute.CustomerOptionDescription(); Language lang = languageService.getByCode(desc.getLanguage()); if(lang==null) { throw new ConversionException("Language is null for code " + description.getLanguage() + " use language ISO code [en, fr ...]"); } description.setLanguage(lang); description.setName(desc.getName()); description.setTitle(desc.getTitle()); description.setCustomerOption(target); descriptions.add(description); } target.setDescriptions(descriptions); } } catch (Exception e) { throw new ConversionException(e); } return target; } @Override protected CustomerOption createTarget() { return null; } public void setLanguageService(LanguageService languageService) { this.languageService = languageService; } public LanguageService getLanguageService() { return languageService; } }