Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
CustomizingOclEnvironments
Implicitly define a variable named 'help' in the context of every OCL expression that is parsed.
Docu follows
public static class MyEnvironmentFactory extends AbstractEnvironmentFactory {
public EvaluationEnvironment createEvaluationEnvironment() {
EvaluationEnvironment evalEnv = new EvalEnvironment();
evalEnv.add("help", OCLHelperFactory.eINSTANCE.createHelper());
return evalEnv;
}
protected Environment createEnvironment(EPackage packageContext) {
return new MyEnvironment(packageContext);
}
protected EClassifier asEClassifier(Object context) {
return (EClassifier) context;
}
protected EOperation asEOperation(Object operation) {
return (EOperation) operation;
}
protected EStructuralFeature asEStructuralFeature(Object property) {
return (EStructuralFeature) property;
}
public Environment createEnvironment(Environment parent) {
return new MyEnvironment(parent);
}
}
private static class MyEnvironment extends EcoreEnvironment {
public MyEnvironment(EPackage packageContext) {
super(packageContext);
init();
}
private void init() {
Variable vdcl = ExpressionsFactory.eINSTANCE.createVariable();
vdcl.setName("help");
vdcl.setType(TypeUtil.resolveType(this, OCLHelperPackage.eINSTANCE.getEClassifier("Helper")));
this.addElement("help", vdcl, true);
}
public MyEnvironment(Environment parent) {
super(parent);
init();
}
@Override
protected void collectStates(EClassifier owner, List pathPrefix, List states) {
super.collectStates(owner, pathPrefix, states);
}
@Override
public EClassifier lookupPathName(List names) {
if (names.get(0).equals("Helper")) {
return OCLHelperPackage.eINSTANCE.getEClassifier((String) names.get(0)); }
return super.lookupPathName(names);
}
}
IOCLHelper helper = HelperUtil.createOCLHelper(new MyEnvironmentFactory()); helper.setContext(OrganisationPackage.eINSTANCE.getOrganisation()); System.out.println(helper.evaluate(org, "help.testmethod(self.name)"));
--Chris.lenz.uibk.ac.at 08:39, 10 October 2006 (EDT)