package com.salesmanager.core.business.services.catalog.product.file; import javax.inject.Inject; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.business.modules.cms.content.StaticContentFileManager; import com.salesmanager.core.business.repositories.catalog.product.file.DigitalProductRepository; import com.salesmanager.core.business.services.catalog.product.ProductService; import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl; import com.salesmanager.core.model.catalog.product.Product; import com.salesmanager.core.model.catalog.product.file.DigitalProduct; import com.salesmanager.core.model.content.FileContentType; import com.salesmanager.core.model.content.InputContentFile; import com.salesmanager.core.model.merchant.MerchantStore; @Service("digitalProductService") public class DigitalProductServiceImpl extends SalesManagerEntityServiceImpl<Long, DigitalProduct> implements DigitalProductService { private DigitalProductRepository digitalProductRepository; @Inject StaticContentFileManager productDownloadsFileManager; @Inject ProductService productService; @Inject public DigitalProductServiceImpl(DigitalProductRepository digitalProductRepository) { super(digitalProductRepository); this.digitalProductRepository = digitalProductRepository; } @Override public void addProductFile(Product product, DigitalProduct digitalProduct, InputContentFile inputFile) throws ServiceException { Assert.notNull(digitalProduct,"DigitalProduct cannot be null"); Assert.notNull(product,"Product cannot be null"); digitalProduct.setProduct(product); try { Assert.notNull(inputFile.getFile(),"InputContentFile.file cannot be null"); Assert.notNull(product.getMerchantStore(),"Product.merchantStore cannot be null"); this.saveOrUpdate(digitalProduct); productDownloadsFileManager.addFile(product.getMerchantStore().getCode(), inputFile); product.setProductVirtual(true); productService.update(product); } catch (Exception e) { throw new ServiceException(e); } finally { try { if(inputFile.getFile()!=null) { inputFile.getFile().close(); } } catch(Exception ignore) {} } } @Override public DigitalProduct getByProduct(MerchantStore store, Product product) throws ServiceException { return digitalProductRepository.findByProduct(store.getId(), product.getId()); } @Override public void delete(DigitalProduct digitalProduct) throws ServiceException { Assert.notNull(digitalProduct,"DigitalProduct cannot be null"); Assert.notNull(digitalProduct.getProduct(),"DigitalProduct.product cannot be null"); //refresh file digitalProduct = this.getById(digitalProduct.getId()); super.delete(digitalProduct); productDownloadsFileManager.removeFile(digitalProduct.getProduct().getMerchantStore().getCode(), FileContentType.PRODUCT, digitalProduct.getProductFileName()); digitalProduct.getProduct().setProductVirtual(false); productService.update(digitalProduct.getProduct()); } @Override public void saveOrUpdate(DigitalProduct digitalProduct) throws ServiceException { Assert.notNull(digitalProduct,"DigitalProduct cannot be null"); Assert.notNull(digitalProduct.getProduct(),"DigitalProduct.product cannot be null"); if(digitalProduct.getId()==null || digitalProduct.getId().longValue()==0) { super.save(digitalProduct); } else { super.create(digitalProduct); } digitalProduct.getProduct().setProductVirtual(true); productService.update(digitalProduct.getProduct()); } }