<%@ jet package="org.eclipse.emf.refactor.metrics" class="OCLCalculateClass"
imports="org.eclipse.emf.refactor.metrics.ocl.core.OCLMetricInfo"%>
<%OCLMetricInfo info = (OCLMetricInfo) argument; %>
package <%=info.getPackage()%>;

import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
import org.eclipse.emf.refactor.metrics.ocl.managers.OCLManager;


public final class <%=info.getClassName()%> implements IMetricCalculator {

	private final String expression = 
		"<%=info.getExpression()%>";	
	private List<EObject> context; 
		
	@Override
	public void setContext(List<EObject> context) {
		this.context = context;
	}	
		
	@Override
	public double calculate() {	
		EObject contextObject = context.get(0);
		return OCLManager.evaluateOCLOnContextObject(contextObject, expression);
	}
}