/**
* 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.aop.geoloc;
import java.net.InetAddress;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.JoinPoint.StaticPart;
import org.hoteia.qalingo.core.domain.Retailer;
import org.hoteia.qalingo.core.domain.Store;
import org.hoteia.qalingo.core.jms.geoloc.producer.AddressGeolocMessageJms;
import org.hoteia.qalingo.core.jms.geoloc.producer.AddressGeolocMessageProducer;
import org.hoteia.qalingo.core.service.GeolocService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component(value = "geolocAspect")
public class GeolocAspect {
protected final Log logger = LogFactory.getLog(getClass());
@Autowired
protected AddressGeolocMessageProducer addressGeolocMessageProducer;
@Value("${env.name}")
protected String environmentName;
@Value("${env.id}")
protected String environmentId;
@Value("${app.name}")
protected String applicationName;
@Autowired
protected GeolocService geolocService;
public void before(final JoinPoint joinPoint) {
if(logger.isDebugEnabled()){
logger.debug("GeolocAspect, before");
}
}
public void afterReturning(final StaticPart staticPart, final Object result) {
if(logger.isDebugEnabled()){
logger.debug("GeolocAspect, afterReturning");
}
try {
final AddressGeolocMessageJms addressGeolocMessageJms = new AddressGeolocMessageJms();
addressGeolocMessageJms.setEnvironmentName(environmentName);
addressGeolocMessageJms.setEnvironmentId(environmentId);
addressGeolocMessageJms.setApplicationName(applicationName);
addressGeolocMessageJms.setServerName(InetAddress.getLocalHost().getHostName());
addressGeolocMessageJms.setServerIp(InetAddress.getLocalHost().getHostAddress());
if(result != null && result instanceof Store){
Store store = (Store) result;
addressGeolocMessageJms.setObjectId(store.getId());
addressGeolocMessageJms.setObjectType("Store");
addressGeolocMessageJms.setGeolocType("GeolocAddress");
addressGeolocMessageJms.setAddress(store.getAddress1());
addressGeolocMessageJms.setPostalCode(store.getPostalCode());
addressGeolocMessageJms.setCity(store.getCity());
addressGeolocMessageJms.setCountryCode(store.getCountryCode());
} else if(result != null && result instanceof Retailer){
Retailer retailer = (Retailer) result;
addressGeolocMessageJms.setObjectId(retailer.getId());
addressGeolocMessageJms.setObjectType("Retailer");
addressGeolocMessageJms.setGeolocType("GeolocAddress");
addressGeolocMessageJms.setAddress(retailer.getDefaultAddress().getAddress1());
addressGeolocMessageJms.setPostalCode(retailer.getDefaultAddress().getPostalCode());
addressGeolocMessageJms.setCity(retailer.getDefaultAddress().getCity());
addressGeolocMessageJms.setCountryCode(retailer.getDefaultAddress().getCountryCode());
}
// Generate and send the JMS message
addressGeolocMessageProducer.generateAndSendMessages(addressGeolocMessageJms);
} catch (Exception e) {
logger.error("GeolocAspect Target Object error: " + e);
}
}
}