package org.egov.pgr.elasticsearch.service.advice; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.egov.infra.config.properties.ApplicationProperties; import org.egov.pgr.elasticSearch.entity.ComplaintIndex; import org.egov.pgr.elasticSearch.service.ComplaintIndexService; import org.egov.pgr.entity.Complaint; import org.elasticsearch.client.transport.NoNodeAvailableException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Aspect @Component public class ComplaintIndexingAdvice { private static final Logger LOG = LoggerFactory.getLogger(ComplaintIndexingAdvice.class); @Autowired private ComplaintIndexService complaintIndexService; @Autowired private ApplicationProperties applicationProperties; @AfterReturning(pointcut = "execution(* org.egov.pgr.service.ComplaintService.createComplaint (..))", returning = "retVal") public void createComplaintIndex(final Object retVal){ Complaint savedComplaint = (Complaint)retVal; final ComplaintIndex savedComplaintIndex = new ComplaintIndex(); BeanUtils.copyProperties(savedComplaint, savedComplaintIndex); try { // Indexing complaint here complaintIndexService.createComplaintIndex(savedComplaintIndex); } catch (NoNodeAvailableException exception) { if (applicationProperties.devMode()) LOG.error("An error occurred, None of the Elastic search nodes are Available ", exception); else throw exception; } } @AfterReturning(pointcut = "execution(* org.egov.pgr.service.ComplaintService.update (..))", returning = "retVal") public void updateComplaintIndex(JoinPoint joinPoint, final Object retVal){ Complaint savedComplaint = (Complaint)retVal; Object[] arguments = joinPoint.getArgs(); final ComplaintIndex savedComplaintIndex = new ComplaintIndex(); BeanUtils.copyProperties(savedComplaint, savedComplaintIndex); try { // Indexing complaint here complaintIndexService.updateComplaintIndex(savedComplaintIndex, Long.valueOf(arguments[1].toString()),arguments[2].toString()); } catch (NoNodeAvailableException exception) { if (applicationProperties.devMode()) LOG.error("An error occurred, None of the Elastic search nodes are Available ", exception); else throw exception; } } }