Commit 74635514 authored by Brian Long's avatar Brian Long
Browse files

added WebScriptContext request scope support

parent 6e7b5311
Loading
Loading
Loading
Loading
+50 −0
Original line number Diff line number Diff line
package com.inteligr8.alfresco.annotations.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.extensions.webscripts.WebScript;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;
import org.springframework.web.context.WebApplicationContext;

import com.inteligr8.alfresco.annotations.context.WebScriptContext;

/**
 * This aspect captures the WebScript execution context.
 */
@Aspect
public class WebScriptAspect {
	
	private final Logger logger = LoggerFactory.getLogger(this.getClass());
	
	private ThreadLocal<WebScriptContext> context = new ThreadLocal<>();
	
	@Pointcut("execution(public void org.springframework.extensions.webscripts.WebScript.execute(..))")
	public void isWebScriptExecute() {
	}

	@Around("isWebScriptExecute()")
	public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
		this.logger.trace("execute({})", joinPoint);

		WebScript ws = (WebScript) joinPoint.getTarget();
		WebScriptRequest req = (WebScriptRequest) joinPoint.getArgs()[0];
		WebScriptResponse res = (WebScriptResponse) joinPoint.getArgs()[1];
		this.context.set(new WebScriptContext(ws, req, res));
		
		return joinPoint.proceed();
	}
	
	@Bean
	@Scope(WebApplicationContext.SCOPE_REQUEST)
	public WebScriptContext getContext() {
		return this.context.get();
	}

}
+31 −0
Original line number Diff line number Diff line
package com.inteligr8.alfresco.annotations.context;

import org.springframework.extensions.webscripts.WebScript;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;

public class WebScriptContext {
	
	private final WebScript webscript;
	private final WebScriptRequest request;
	private final WebScriptResponse response;
	
	public WebScriptContext(WebScript webscript, WebScriptRequest request, WebScriptResponse response) {
		this.webscript = webscript;
		this.request = request;
		this.response = response;
	}
	
	public WebScript getWebscript() {
		return webscript;
	}
	
	public WebScriptRequest getRequest() {
		return request;
	}
	
	public WebScriptResponse getResponse() {
		return response;
	}

}
+2 −0
Original line number Diff line number Diff line
@@ -13,5 +13,7 @@
		<aspect name="com.inteligr8.alfresco.annotations.aspect.NodeTypeAspect" />
		<aspect name="com.inteligr8.alfresco.annotations.aspect.NodeAspectAspect" />
		<aspect name="com.inteligr8.alfresco.annotations.aspect.ChildIsPrimaryAspect" />

		<aspect name="com.inteligr8.alfresco.annotations.aspect.WebScriptAspect" />
	</aspects>
</aspectj>
 No newline at end of file