All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.linkare.zas.aspectj.decider.GroovyDecider Maven / Gradle / Ivy

Go to download

The AspectJ based implementation of the Zas project. This is the new version of the implementation of Zas which, initially, started as a M.Sc. thesis project by Paulo Zenida at ISCTE.

The newest version!
package com.linkare.zas.aspectj.decider;

import java.util.Map;

import com.linkare.zas.api.IAOPMetaData;
import com.linkare.zas.api.IJoinPoint;
import com.linkare.zas.api.IMethodSignature;
import com.linkare.zas.api.ISourceLocation;
import com.linkare.zas.el.AccessControlEnforcer;
import com.linkare.zas.el.ExpressionInterpreter;
import com.linkare.zas.el.GroovyExpressionInterpreter;
import com.linkare.zas.el.Instance;
import com.linkare.zas.el.InstanceUtils;
import com.linkare.zas.el.TestContext;
import com.linkare.zas.el.TestContextImpl;
import com.linkare.zas.el.TestResult;

/**
 * 
 * @author Paulo Zenida - Linkare TI
 * 
 */
public class GroovyDecider extends BaseDecider {

    @Override
    protected boolean internalHasAccess(Object subject, String protectedObjectAbstractAccessModes, IAOPMetaData aopMetaData) {
	final IJoinPoint joinPoint = aopMetaData.getJoinPoint();
	final Object obj = joinPoint.getThis();
	IMethodSignature ms = (IMethodSignature) joinPoint.getSignature();
	Class clazz = obj.getClass();
	String[] argNames = ms.getParameterNames();
	Class[] argTypes = ms.getParameterTypes();
	Object[] argValues = joinPoint.getArgs();
	Instance[] args = InstanceUtils.makeInstanceArray(argNames, argTypes, argValues);
	ISourceLocation loc = joinPoint.getSourceLocation();
	Instance instance = new Instance(clazz.getName(), clazz, obj);
	TestContext context = new TestContextImpl(clazz.getSimpleName(), clazz.getSimpleName(), instance, null, args, null, null, loc.getFileName(),
						  loc.getLine(), subject);
	String testExpr = protectedObjectAbstractAccessModes;
	context.setOldValuesMap(determineOldValues(testExpr, context));
	final ExpressionInterpreter expressionInterpreter = new GroovyExpressionInterpreter();
	final TestResult testResult = expressionInterpreter.invokeTest(testExpr, context);
	return testResult.isPassed();
    }

    protected Map determineOldValues(String testExpression, TestContext context) {
	AccessControlEnforcer acEnforcer = getAccessControlEnforcer();
	return acEnforcer.getExpressionInterpreter().determineOldValues(testExpression, context);
    }
}