/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
* http://www.apache.org/licenses/LICENSE-2.0
*
* Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.service.pojo;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.dozer.Mapper;
import org.hoteia.qalingo.core.domain.Market;
import org.hoteia.qalingo.core.domain.MarketArea;
import org.hoteia.qalingo.core.domain.MarketPlace;
import org.hoteia.qalingo.core.pojo.GeolocData;
import org.hoteia.qalingo.core.pojo.geoloc.GeolocDataPojo;
import org.hoteia.qalingo.core.pojo.market.MarketAreaPojo;
import org.hoteia.qalingo.core.pojo.market.MarketPlacePojo;
import org.hoteia.qalingo.core.pojo.market.MarketPojo;
import org.hoteia.qalingo.core.pojo.util.mapper.PojoUtil;
import org.hoteia.qalingo.core.service.GeolocService;
import org.hoteia.qalingo.core.service.MarketService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service("marketPojoService")
@Transactional(readOnly = true)
public class MarketPojoService {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
protected GeolocService geolocService;
@Autowired
protected MarketService marketService;
@Autowired
protected Mapper dozerBeanMapper;
public MarketPlacePojo getMarketPlaceByCode(final String marketPlaceCode) {
final MarketPlace marketPlace = marketService.getMarketPlaceByCode(marketPlaceCode);
logger.debug("Found {} marketPlace:", marketPlace.getName());
return dozerBeanMapper.map(marketPlace, MarketPlacePojo.class);
}
public List<MarketPlacePojo> getMarketPlaces() {
final List<MarketPlace> allMarketPlaces = marketService.findMarketPlaces();
logger.debug("Found {} MarketPlaces", allMarketPlaces.size());
return PojoUtil.mapAll(dozerBeanMapper, allMarketPlaces, MarketPlacePojo.class);
}
public MarketPojo getMarketByCode(final String marketCode) {
final Market market = marketService.getMarketByCode(marketCode);
logger.debug("Found {} market:", market.getName());
return dozerBeanMapper.map(market, MarketPojo.class);
}
public List<MarketPojo> getMarketsByMarketPlaceCode(final String marketPlaceCode) {
final List<Market> markets = marketService.findMarkets();
logger.debug("Found {} Markets", markets.size());
return PojoUtil.mapAll(dozerBeanMapper, markets, MarketPojo.class);
}
public MarketAreaPojo getMarketAreaByCode(final String marketAreaCode) {
final MarketArea marketArea = marketService.getMarketAreaByCode(marketAreaCode);
logger.debug("Found {} marketArea:", marketArea.getName());
return dozerBeanMapper.map(marketArea, MarketAreaPojo.class);
}
public GeolocDataPojo getGeolocDataByRemoteAddress(final String remoteAddress) throws Exception {
final GeolocData geolocData = geolocService.getGeolocData(remoteAddress);
GeolocDataPojo geolocDataPojo = new GeolocDataPojo();
if(geolocData != null){
if(geolocData.getCountry() != null){
geolocDataPojo.setCountryName(geolocData.getCountry().getName());
geolocDataPojo.setCountryIsoCode(geolocData.getCountry().getIsoCode());
}
if(geolocData.getCity() != null){
geolocDataPojo.setCityName(geolocData.getCity().getName());
geolocDataPojo.setGeoNameId(geolocData.getCity().getGeoNameId());
}
}
return dozerBeanMapper.map(geolocData, GeolocDataPojo.class);
}
public MarketAreaPojo getMarketAreaByGeolocData(final GeolocDataPojo geolocData) throws Exception {
MarketArea marketAreaGeoloc = null;
if(geolocData != null){
if(geolocData != null && StringUtils.isNotEmpty(geolocData.getCountryIsoCode())){
List<MarketArea> marketAreas = marketService.findMarketAreaOpenedByGeolocCountryCode(geolocData.getCountryIsoCode());
if(marketAreas != null && marketAreas.size() == 1){
marketAreaGeoloc = marketAreas.get(0);
} else {
// WE HAVE MANY MARKET AREA FOR THE CURRENT COUNTRY CODE - WE SELECT THE DEFAULT MARKET PLACE ASSOCIATE
for (Iterator<MarketArea> iterator = marketAreas.iterator(); iterator.hasNext();) {
MarketArea marketAreaIt = (MarketArea) iterator.next();
if(marketAreaIt.getMarket().getMarketPlace().isDefault()){
marketAreaGeoloc = marketAreaIt;
}
}
}
}
}
return dozerBeanMapper.map(marketAreaGeoloc, MarketAreaPojo.class);
}
}