package org.dresdenocl.language.ocl.staticsemantics.postporcessor;
import java.util.List;
import org.dresdenocl.essentialocl.expressions.ExpressionInOcl;
import org.dresdenocl.essentialocl.expressions.OclExpression;
import org.dresdenocl.language.ocl.resource.ocl.IOclResourcePostProcessor;
import org.dresdenocl.language.ocl.resource.ocl.mopp.OclResource;
import org.dresdenocl.language.ocl.staticsemantics.OclStaticSemanticsException;
import org.dresdenocl.modelbus.ModelBusPlugin;
import org.dresdenocl.pivotmodel.Constraint;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
public class OclStaticSemanticsPostProcessor implements
IOclResourcePostProcessor {
public void process(OclResource resource) {
EList<EObject> contents = resource.getContents();
if (!contents.isEmpty()) {
EObject root = contents.get(0);
try {
org.dresdenocl.language.ocl.staticsemantics.OclStaticSemantics oclStaticSemantics = OclStaticSemanticsProvider
.getStaticSemantics(resource);
List<Constraint> result = oclStaticSemantics
.cs2EssentialOcl(root);
/*
* Probably notify listeners of the model that constraints have
* been reparsed.
*/
if (result.size() > 0) {
if (ModelBusPlugin.getModelRegistry().getActiveModel() != null) {
ModelBusPlugin.getModelRegistry().getActiveModel()
.setChanged();
ModelBusPlugin.getModelRegistry().getActiveModel()
.notifiyListeners();
}
// no else.
}
// no else.
// printResult(result);
} catch (OclStaticSemanticsException e) {
// e.printStackTrace();
}
}
}
private void printResult(List<Constraint> result) {
System.out.println();
for (Constraint constraint : result) {
printConstraint(constraint);
}
}
private void printConstraint(Constraint constraint) {
System.out.print(constraint.getConstrainedElement() + " ");
System.out.print(constraint.getName());
System.out.println("(" + constraint.getKind() + ")");
printExpression((ExpressionInOcl) constraint.getSpecification());
}
private void printExpression(ExpressionInOcl specification) {
System.out.println(specification.getBody());
}
private void printBodyExpression(OclExpression bodyExpression) {
System.out.println(bodyExpression);
}
@Override
public void terminate() {
// left empty
}
}