ZoneServiceImpl.java

144 lines | 3.951 kB Blame History Raw Download
package com.salesmanager.core.business.services.reference.zone;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import br.ufrgs.inf.prosoft.cache.*;

import com.salesmanager.core.business.constants.Constants;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.business.repositories.reference.zone.ZoneRepository;
import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl;
//import com.salesmanager.core.business.utils.CacheUtils;
import com.salesmanager.core.model.reference.country.Country;
import com.salesmanager.core.model.reference.language.Language;
import com.salesmanager.core.model.reference.zone.Zone;
import com.salesmanager.core.model.reference.zone.ZoneDescription;

@Service("zoneService")
public class ZoneServiceImpl extends SalesManagerEntityServiceImpl<Long, Zone> implements
		ZoneService {
	
	private final static String ZONE_CACHE_PREFIX = "ZONES_";

	private ZoneRepository zoneRepository;
	
//	@Inject
//	private CacheUtils cache;
	
	private static final Logger LOGGER = LoggerFactory.getLogger(ZoneServiceImpl.class);

	@Inject
	public ZoneServiceImpl(ZoneRepository zoneRepository) {
		super(zoneRepository);
		this.zoneRepository = zoneRepository;
	}

	@Override
	public Zone getByCode(String code) {
		return zoneRepository.findByCode(code);
	}

	@Override
	public void addDescription(Zone zone, ZoneDescription description) throws ServiceException {
		if (zone.getDescriptions()!=null) {
				if(!zone.getDescriptions().contains(description)) {
					zone.getDescriptions().add(description);
					update(zone);
				}
		} else {
			List<ZoneDescription> descriptions = new ArrayList<ZoneDescription>();
			descriptions.add(description);
			zone.setDescriptons(descriptions);
			update(zone);
		}
	}

public static Caffeine<String, List<Zone>> getZonesByCountryCache = new Caffeine<>("static-multi:ZoneServiceImpl.getZonesByCountry", 1200000);
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Zone> getZones(Country country, Language language) throws ServiceException {
		String cacheKey = ZONE_CACHE_PREFIX + country.getIsoCode() + Constants.UNDERSCORE + language.getCode();
		return getZonesByCountryCache.computeIfAbsent(cacheKey, () -> {
		
			List<Zone> zones = null;
			try {

				
	//			zones = (List<Zone>) cache.getFromCache(cacheKey);

			
			
				if(zones==null) {
				
					zones = zoneRepository.listByLanguageAndCountry(country.getIsoCode(), language.getId());
				
					//set names
					for(Zone zone : zones) {
						ZoneDescription description = zone.getDescriptions().get(0);
						zone.setName(description.getName());
						
					}
	//				cache.putInCache(zones, cacheKey);
				}

			} catch (Exception e) {
				LOGGER.error("getZones()", e);
			}
			return zones;
		
		}, 1200000);
		
	}
	
public static Caffeine<String, Map<String, Zone>> getZonesByLanguageCache = new Caffeine<>("static-multi:ZoneServiceImpl.getZonesByLanguage", 1200000);

	@Override
	@SuppressWarnings("unchecked")
	public Map<String, Zone> getZones(Language language) throws ServiceException {
		
		String cacheKey = ZONE_CACHE_PREFIX + language.getCode();
		return getZonesByLanguageCache.computeIfAbsent(cacheKey, () -> {

			Map<String, Zone> zones = null;
			try {

				
	//			zones = (Map<String, Zone>) cache.getFromCache(cacheKey);

			
			
				if(zones==null) {
					zones = new HashMap<String, Zone>();
					List<Zone> zns = zoneRepository.listByLanguage(language.getId());
				
					//set names
					for(Zone zone : zns) {
						ZoneDescription description = zone.getDescriptions().get(0);
						zone.setName(description.getName());
						zones.put(zone.getCode(), zone);
						
					}
	//				cache.putInCache(zones, cacheKey);
				}

			} catch (Exception e) {
				LOGGER.error("getZones()", e);
			}
			return zones;
		
		}, 1200000);
		
	}

}