package com.megatim.fdxconsultation.service.impl.filters; import com.megatim.fdxcommons.core.ifaces.interceptor.AfterUserAction; import com.megatim.fdxcommons.core.ifaces.interceptor.InterceptorHandler; import com.megatim.fdxcommons.model.log.ContainerContextDto; import com.megatim.fdxcommons.model.log.UserActionLog; import com.megatim.fdxconsultation.tools.context.AppCommonContext; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.container.ResourceInfo; import javax.ws.rs.core.Context; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.Provider; import org.apache.camel.ProducerTemplate; import org.apache.camel.cdi.CdiCamelContext; /** * * @author ASUS */ @Provider public class AfterUserActionFilter implements ContainerResponseFilter { @Context private ResourceInfo resourceInfo; @Inject private InterceptorHandler handler; @Inject private CdiCamelContext camelContext; @Context private SecurityContext securityContext; @Context private HttpServletRequest servletRequest; @Context private UriInfo uriInfo; @Inject private AfterUserAction afterAction; @Override public void filter(ContainerRequestContext crc, ContainerResponseContext crc1) throws IOException { try { UserActionLog log = afterAction.filter(getContainerContext(crc, crc1)); if (log != null) { ProducerTemplate producerTemplate = camelContext.createProducerTemplate(); producerTemplate.asyncSendBody("direct:" + AppCommonContext.WEB_USER_ACTION_DIRECT, log); } } catch (Exception ex) { Logger.getLogger(AfterUserActionFilter.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); } } private ContainerContextDto getContainerContext(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) { ContainerContextDto containerContext = new ContainerContextDto(); containerContext.setContainerRequestContext(containerRequestContext); containerContext.setContainerResponseContext(containerResponseContext); containerContext.setHttpServletRequest(servletRequest); containerContext.setUriInfo(uriInfo); containerContext.setResourceInfo(resourceInfo); containerContext.setSecurityContext(securityContext); return containerContext; } }