package com.salesmanager.core.business.services.system; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.json.simple.JSONArray; import org.json.simple.JSONValue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.fasterxml.jackson.databind.ObjectMapper; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.business.repositories.system.ModuleConfigurationRepository; import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl; import com.salesmanager.core.business.services.reference.loader.IntegrationModulesLoader; import com.salesmanager.core.business.utils.CacheUtils; import com.salesmanager.core.model.system.IntegrationModule; import com.salesmanager.core.model.system.ModuleConfig; @Service("moduleConfigurationService") public class ModuleConfigurationServiceImpl extends SalesManagerEntityServiceImpl<Long, IntegrationModule> implements ModuleConfigurationService { private static final Logger LOGGER = LoggerFactory.getLogger(ModuleConfigurationServiceImpl.class); @Inject private IntegrationModulesLoader integrationModulesLoader; private ModuleConfigurationRepository moduleConfigurationRepository; @Inject private CacheUtils cache; @Inject public ModuleConfigurationServiceImpl( ModuleConfigurationRepository moduleConfigurationRepository) { super(moduleConfigurationRepository); this.moduleConfigurationRepository = moduleConfigurationRepository; } @Override public IntegrationModule getByCode(String moduleCode) { return moduleConfigurationRepository.findByCode(moduleCode); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public List<IntegrationModule> getIntegrationModules(String module) { List<IntegrationModule> modules = null; try { //CacheUtils cacheUtils = CacheUtils.getInstance(); modules = (List<IntegrationModule>) cache.getFromCache("INTEGRATION_M)" + module); if(modules==null) { modules = moduleConfigurationRepository.findByModule(module); //set json objects for(IntegrationModule mod : modules) { String regions = mod.getRegions(); if(regions!=null) { Object objRegions=JSONValue.parse(regions); JSONArray arrayRegions=(JSONArray)objRegions; Iterator i = arrayRegions.iterator(); while(i.hasNext()) { mod.getRegionsSet().add((String)i.next()); } } String details = mod.getConfigDetails(); if(details!=null) { //Map objects = mapper.readValue(config, Map.class); Map<String,String> objDetails= (Map<String, String>) JSONValue.parse(details); mod.setDetails(objDetails); } String configs = mod.getConfiguration(); if(configs!=null) { //Map objects = mapper.readValue(config, Map.class); Object objConfigs=JSONValue.parse(configs); JSONArray arrayConfigs=(JSONArray)objConfigs; Map<String,ModuleConfig> moduleConfigs = new HashMap<String,ModuleConfig>(); Iterator i = arrayConfigs.iterator(); while(i.hasNext()) { Map values = (Map)i.next(); String env = (String)values.get("env"); ModuleConfig config = new ModuleConfig(); config.setScheme((String)values.get("scheme")); config.setHost((String)values.get("host")); config.setPort((String)values.get("port")); config.setUri((String)values.get("uri")); config.setEnv((String)values.get("env")); if((String)values.get("config1")!=null) { config.setConfig1((String)values.get("config1")); } if((String)values.get("config2")!=null) { config.setConfig1((String)values.get("config2")); } moduleConfigs.put(env, config); } mod.setModuleConfigs(moduleConfigs); } } cache.putInCache(modules, "INTEGRATION_M)" + module); } } catch (Exception e) { LOGGER.error("getIntegrationModules()", e); } return modules; } @Override public void createOrUpdateModule(String json) throws ServiceException { ObjectMapper mapper = new ObjectMapper(); try { @SuppressWarnings("rawtypes") Map object = mapper.readValue(json, Map.class); IntegrationModule module = integrationModulesLoader.loadModule(object); if(module!=null) { IntegrationModule m = this.getByCode(module.getCode()); if(m!=null) { this.delete(m); } this.create(module); } } catch (Exception e) { throw new ServiceException(e); } } }