EPackage.Registry registry = new EPackageRegistryImpl();
registry.put(Projet01Package.eNS_URI, Projet01Package.eINSTANCE);
EcoreEnvironmentFactory environmentFactory = new EcoreEnvironmentFactory(registry);
OCL ocl = OCL.newInstance(environmentFactory);
File file = new File("C:/Users/jerome/workspace/OCLToPLSQL/model/projet01.ocl");
InputStream in = new FileInputStream(file);
Map<String, Constraint> constraintMap = new HashMap<String, Constraint>();
try {
OCLInput document = new OCLInput(in);
List<Constraint> constraints = ocl.parse(document);
Integer numberConstraint = 0;
for (Constraint next : constraints) {
if(next.getStereotype().toString() == "invariant")
{
String actualContext = contexteWithoutSelf(next.getSpecification().getContextVariable().toString());
constraintMap.put(next.getName(), next);
Iterator<EObject> body = next.getSpecification().eAllContents();
Map mapSpecsFromTreeIte = new HashMap();
Integer numberMapSpecsFromTreeIterator = 0;
String globalconstraint = next.getSpecification().getBodyExpression().toString();
Boolean isSimpleCycleConstraint = globalconstraint.matches("^self\\.([a-z]+\\.){2}=\\(self\\.[a-z]+\\.[a-z]+\\)$");
Boolean isComplexConstraint = globalconstraint.matches("^(([a-z]+\\.){3}=\\([a-z]+\\.[a-z]+\\))|(([a-z]+\\.){2}=\\(([a-z]+\\.){2}[a-z]+\\))|(([a-z]+\\.){3,}=\\(([a-z]+\\.){2,}[a-z]+\\))$");
if(isSimpleCycleConstraint == true) {
String specsFromTreeIteValueTemp = null;
Integer numberParsedConstraint = 0;
while(body.hasNext()) {
String containBodyConstraint = body.next().toString();
Boolean regExForValideConstraint = BodyConstraintSelfOnly(containBodyConstraint);
if (regExForValideConstraint == true) {
if (numberMapSpecsFromTreeIterator % 2 == 0) {
specsFromTreeIteValueTemp = containBodyConstraint;
}
else {
String[] entityWithoutObject = containBodyConstraint.split("\\(expression: ");
String mapSpecsFromTreeIteKey = entityWithoutObject[1].substring(0, entityWithoutObject[1].length()-1);
if (!mapSpecsFromTreeIteKey.equals("Boolean")) {
if (!mapSpecsFromTreeIteKey.equals(actualContext)) {
mapSpecsFromTreeIte.put(numberParsedConstraint, new ParsedConstraint(numberConstraint, actualContext, parsedConstraintWithoutSelf(specsFromTreeIteValueTemp), mapSpecsFromTreeIteKey));
numberParsedConstraint++;
}
}
}
}
numberMapSpecsFromTreeIterator++;
}