package com.salesmanager.core.business.services.catalog.product.attribute;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.business.repositories.catalog.product.attribute.ProductOptionRepository;
import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl;
import com.salesmanager.core.model.catalog.product.attribute.ProductAttribute;
import com.salesmanager.core.model.catalog.product.attribute.ProductOption;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
@Service("productOptionService")
public class ProductOptionServiceImpl extends
SalesManagerEntityServiceImpl<Long, ProductOption> implements ProductOptionService {
private ProductOptionRepository productOptionRepository;
@Inject
private ProductAttributeService productAttributeService;
@Inject
public ProductOptionServiceImpl(
ProductOptionRepository productOptionRepository) {
super(productOptionRepository);
this.productOptionRepository = productOptionRepository;
}
@Override
public List<ProductOption> listByStore(MerchantStore store, Language language) throws ServiceException {
return productOptionRepository.findByStoreId(store.getId(), language.getId());
}
@Override
public List<ProductOption> listReadOnly(MerchantStore store, Language language) throws ServiceException {
return productOptionRepository.findByReadOnly(store.getId(), language.getId(), true);
}
@Override
public List<ProductOption> getByName(MerchantStore store, String name, Language language) throws ServiceException {
try {
return productOptionRepository.findByName(store.getId(), name, language.getId());
} catch (Exception e) {
throw new ServiceException(e);
}
}
@Override
public void saveOrUpdate(ProductOption entity) throws ServiceException {
//save or update (persist and attach entities
if(entity.getId()!=null && entity.getId()>0) {
super.update(entity);
} else {
super.save(entity);
}
}
@Override
public void delete(ProductOption entity) throws ServiceException {
//remove all attributes having this option
List<ProductAttribute> attributes = productAttributeService.getByOptionId(entity.getMerchantStore(), entity.getId());
for(ProductAttribute attribute : attributes) {
productAttributeService.delete(attribute);
}
ProductOption option = this.getById(entity.getId());
//remove option
super.delete(option);
}
@Override
public ProductOption getByCode(MerchantStore store, String optionCode) {
return productOptionRepository.findByCode(store.getId(), optionCode);
}
@Override
public ProductOption getById(MerchantStore store, Long optionId) {
return productOptionRepository.findOne(store.getId(), optionId);
}
}