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