package com.salesmanager.core.business.services.system; import java.util.List; import javax.inject.Inject; import org.springframework.stereotype.Service; import com.fasterxml.jackson.databind.ObjectMapper; import com.salesmanager.core.business.constants.Constants; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.business.repositories.system.MerchantConfigurationRepository; import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.model.system.MerchantConfig; import com.salesmanager.core.model.system.MerchantConfiguration; import com.salesmanager.core.model.system.MerchantConfigurationType; @Service("merchantConfigurationService") public class MerchantConfigurationServiceImpl extends SalesManagerEntityServiceImpl<Long, MerchantConfiguration> implements MerchantConfigurationService { private MerchantConfigurationRepository merchantConfigurationRepository; @Inject public MerchantConfigurationServiceImpl( MerchantConfigurationRepository merchantConfigurationRepository) { super(merchantConfigurationRepository); this.merchantConfigurationRepository = merchantConfigurationRepository; } @Override public MerchantConfiguration getMerchantConfiguration(String key, MerchantStore store) throws ServiceException { return merchantConfigurationRepository.findByMerchantStoreAndKey(store.getId(), key); } @Override public List<MerchantConfiguration> listByStore(MerchantStore store) throws ServiceException { return merchantConfigurationRepository.findByMerchantStore(store.getId()); } @Override public List<MerchantConfiguration> listByType(MerchantConfigurationType type, MerchantStore store) throws ServiceException { return merchantConfigurationRepository.findByMerchantStoreAndType(store.getId(), type); } @Override public void saveOrUpdate(MerchantConfiguration entity) throws ServiceException { if(entity.getId()!=null && entity.getId()>0) { super.update(entity); } else { super.create(entity); } } @Override public void delete(MerchantConfiguration merchantConfiguration) throws ServiceException { MerchantConfiguration config = merchantConfigurationRepository.findOne(merchantConfiguration.getId()); if(config!=null) { super.delete(config); } } @Override public MerchantConfig getMerchantConfig(MerchantStore store) throws ServiceException { MerchantConfiguration configuration = merchantConfigurationRepository.findByMerchantStoreAndKey(store.getId(), MerchantConfigurationType.CONFIG.name()); MerchantConfig config = null; if(configuration!=null) { String value = configuration.getValue(); ObjectMapper mapper = new ObjectMapper(); try { config = mapper.readValue(value, MerchantConfig.class); } catch(Exception e) { throw new ServiceException("Cannot parse json string " + value); } } return config; } @Override public void saveMerchantConfig(MerchantConfig config, MerchantStore store) throws ServiceException { MerchantConfiguration configuration = merchantConfigurationRepository.findByMerchantStoreAndKey(store.getId(), MerchantConfigurationType.CONFIG.name()); if(configuration==null) { configuration = new MerchantConfiguration(); configuration.setMerchantStore(store); configuration.setKey(MerchantConfigurationType.CONFIG.name()); configuration.setMerchantConfigurationType(MerchantConfigurationType.CONFIG); } String value = config.toJSONString(); configuration.setValue(value); if(configuration.getId()!=null && configuration.getId()>0) { super.update(configuration); } else { super.create(configuration); } } }