package com.salesmanager.shop.populator.catalog; import java.util.HashSet; import java.util.Set; import javax.inject.Inject; import org.apache.commons.lang.Validate; import com.salesmanager.core.business.exception.ConversionException; import com.salesmanager.core.business.services.catalog.product.ProductService; import com.salesmanager.core.business.services.customer.CustomerService; import com.salesmanager.core.business.services.reference.language.LanguageService; import com.salesmanager.core.business.utils.AbstractDataPopulator; import com.salesmanager.core.model.catalog.product.Product; import com.salesmanager.core.model.catalog.product.review.ProductReview; import com.salesmanager.core.model.catalog.product.review.ProductReviewDescription; import com.salesmanager.core.model.customer.Customer; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.model.reference.language.Language; import com.salesmanager.shop.model.catalog.product.PersistableProductReview; import com.salesmanager.shop.utils.DateUtil; public class PersistableProductReviewPopulator extends AbstractDataPopulator<PersistableProductReview, ProductReview> { @Inject private CustomerService customerService; @Inject private ProductService productService; @Inject private LanguageService languageService; public LanguageService getLanguageService() { return languageService; } public void setLanguageService(LanguageService languageService) { this.languageService = languageService; } @Override public ProductReview populate(PersistableProductReview source, ProductReview target, MerchantStore store, Language language) throws ConversionException { Validate.notNull(customerService,"customerService cannot be null"); Validate.notNull(productService,"productService cannot be null"); Validate.notNull(languageService,"languageService cannot be null"); try { if(target==null) { target = new ProductReview(); } Customer customer = customerService.getById(source.getCustomerId()); //check if customer belongs to store if(customer ==null || customer.getMerchantStore().getId().intValue()!=store.getId().intValue()) { throw new ConversionException("Invalid customer id for the given store"); } target.setReviewDate(DateUtil.getDate(source.getDate())); target.setCustomer(customer); target.setReviewRating(source.getRating()); Product product = productService.getById(source.getProductId()); //check if product belongs to store if(product ==null || product.getMerchantStore().getId().intValue()!=store.getId().intValue()) { throw new ConversionException("Invalid product id for the given store"); } target.setProduct(product); Language lang = languageService.getByCode(language.getCode()); if(lang ==null) { throw new ConversionException("Invalid language code, use iso codes (en, fr ...)"); } ProductReviewDescription description = new ProductReviewDescription(); description.setDescription(source.getDescription()); description.setLanguage(lang); description.setName("-"); description.setProductReview(target); Set<ProductReviewDescription> descriptions = new HashSet<ProductReviewDescription>(); descriptions.add(description); target.setDescriptions(descriptions); return target; } catch (Exception e) { throw new ConversionException("Cannot populate ProductReview", e); } } @Override protected ProductReview createTarget() { return null; } public CustomerService getCustomerService() { return customerService; } public void setCustomerService(CustomerService customerService) { this.customerService = customerService; } public ProductService getProductService() { return productService; } public void setProductService(ProductService productService) { this.productService = productService; } }