From 743355a7692ca80f72774a11dd019f530dfadf7f Mon Sep 17 00:00:00 2001
From: Dominique Marcadet <Dominique.Marcadet@centralesupelec.fr>
Date: Fri, 29 Mar 2019 17:01:54 +0100
Subject: [PATCH] enable back OCL validation

---
 .../scl/validator/RiseClipseValidatorSCL.java | 60 ++++++++++---------
 1 file changed, 33 insertions(+), 27 deletions(-)

diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/RiseClipseValidatorSCL.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/RiseClipseValidatorSCL.java
index afa0175..e0c46a8 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/RiseClipseValidatorSCL.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/RiseClipseValidatorSCL.java
@@ -20,31 +20,32 @@ package fr.centralesupelec.edf.riseclipse.iec61850.scl.validator;
 
 import java.util.ArrayList;
 
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.provider.NsdItemProviderAdapterFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.scl.SclPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.scl.provider.SclItemProviderAdapterFactory;
 import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
+import fr.centralesupelec.edf.riseclipse.util.RiseClipseFatalException;
 import fr.centralesupelec.edf.riseclipse.util.TextRiseClipseConsole;
+import fr.centralesupelec.edf.riseclipse.validation.ocl.OCLValidator;
+
+import org.eclipse.emf.ecore.EValidator;
 import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.pivot.validation.ComposedEValidator;
 
 public class RiseClipseValidatorSCL {
 
-    //private static OCLValidator oclValidator;
+    private static OCLValidator oclValidator;
     private static SclItemProviderAdapterFactory sclAdapter;
     private static SCLModelLoader sclLoader;
     private static NsdValidator nsdValidator;
-    //private static boolean oclValidation = false;
+    private static boolean oclValidation = false;
     private static boolean nsdValidation = false;
-    private static NsdItemProviderAdapterFactory nsdAdapter;
 
     public static void usage( IRiseClipseConsole console ) {
         console.setLevel( IRiseClipseConsole.INFO_LEVEL );
         console.info(
                 "java -jar RiseClipseValidatorSCL.jar [--verbose] [--make-explicit-links] [<oclFile> | <nsdFile> | <sclFile>]*" );
-        console.info( /*"Files ending with \".ocl\" are considered OCL files, "
-                      +*/ "files ending with \\\".nsd\\\" are considered NSD files, "
+        console.info( "Files ending with \".ocl\" are considered OCL files, "
+                + "files ending with \\\".nsd\\\" are considered NSD files, "
                 + "all others are considered SCL files" );
         System.exit( -1 );
     }
@@ -78,15 +79,15 @@ public class RiseClipseValidatorSCL {
             }
         }
 
-        //ArrayList< String > oclFiles = new ArrayList<>();
+        ArrayList< String > oclFiles = new ArrayList<>();
         ArrayList< String > nsdFiles = new ArrayList<>();
         ArrayList< String > sclFiles = new ArrayList<>();
         for( int i = posFiles; i < args.length; ++i ) {
-            /*if( args[i].endsWith( ".ocl" )) {
+            if( args[i].endsWith( ".ocl" ) ) {
                 oclFiles.add( args[i] );
                 oclValidation = true;
             }
-            else*/ if( args[i].endsWith( ".nsd" ) ) {
+            else if( args[i].endsWith( ".nsd" ) ) {
                 nsdFiles.add( args[i] );
                 nsdValidation = true;
             }
@@ -95,7 +96,7 @@ public class RiseClipseValidatorSCL {
             }
         }
 
-        prepare( console, /*oclFiles,*/ nsdFiles );
+        prepare( console, oclFiles, nsdFiles );
         for( int i = 0; i < sclFiles.size(); ++i ) {
             run( console, make_explicit_links, sclFiles.get( i ) );
         }
@@ -123,35 +124,40 @@ public class RiseClipseValidatorSCL {
     }
 
     public static void prepare( IRiseClipseConsole console,
-            /*ArrayList< String > oclFiles,*/ ArrayList< String > nsdFiles ) {
-        @NonNull
-        ComposedEValidator validator = ComposedEValidator.install( SclPackage.eINSTANCE );
+            ArrayList< String > oclFiles, ArrayList< String > nsdFiles ) {
+        SclPackage sclPg = SclPackage.eINSTANCE;
+        if( sclPg == null ) {
+            throw new RiseClipseFatalException( "SCL package not found", null );
+        }
+
+        ComposedEValidator validator = ComposedEValidator.install( sclPg );
+
+        if( oclValidation ) {
+            // TODO: change OCLValidator constructor to take same arguments as NsdValidator ?
+            //oclValidator = new OCLValidator( validator, true );
+            oclValidator = new OCLValidator( sclPg, true );
 
-        /*if( oclValidation ) {
-            oclValidator = new OCLValidator( validator, true );
-        
             for( int i = 0; i < oclFiles.size(); ++i ) {
                 oclValidator.addOCLDocument( oclFiles.get( i ), console );
             }
-        }*/
+        }
 
         if( nsdValidation ) {
             nsdValidator = new NsdValidator( validator, console );
             for( int i = 0; i < nsdFiles.size(); ++i ) {
                 nsdValidator.addNsdDocument( nsdFiles.get( i ), console );
             }
-            //nsdAdapter = new NsdItemProviderAdapterFactory();
         }
 
         sclLoader = new SCLModelLoader( console );
         sclAdapter = new SclItemProviderAdapterFactory();
 
-        /*for(EValidator v: validator.getChildren()) {
-        	if(v.getClass() == NsdEObjectValidator.class) {
-        		NsdEObjectValidator nsdValidator = (NsdEObjectValidator) v;
-        		nsdValidator.initializeValidationData();
-        	}
-        }*/
+        for( EValidator v : validator.getChildren() ) {
+            if( v.getClass() == NsdEObjectValidator.class ) {
+                NsdEObjectValidator nsdValidator = ( NsdEObjectValidator ) v;
+                nsdValidator.initializeValidationData();
+            }
+        }
     }
 
     public static void run( IRiseClipseConsole console, boolean make_explicit_links, String sclFile ) {
@@ -162,10 +168,10 @@ public class RiseClipseValidatorSCL {
             sclLoader.finalizeLoad();
         }
         if( resource != null ) {
-            /*if( oclValidation ) {
+            if( oclValidation ) {
                 console.info( "Validating file: " + sclFile + " with OCL" );
                 oclValidator.validate( resource, sclAdapter, console );
-            }*/
+            }
             if( nsdValidation ) {
                 console.info( "Validating file: " + sclFile + " with NSD" );
                 nsdValidator.validate( resource, sclAdapter, console );
-- 
GitLab