diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/META-INF/MANIFEST.MF b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/META-INF/MANIFEST.MF index 2057aad55681263f9de6b7b040d8bd5c6ae01e30..70b6e48c79d2496fd6da9978220082ed9e30a0d1 100644 --- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/META-INF/MANIFEST.MF +++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/META-INF/MANIFEST.MF @@ -19,4 +19,5 @@ Require-Bundle: org.eclipse.core.runtime, fr.centralesupelec.edf.riseclipse.iec61850.scl.edit, fr.centralesupelec.edf.riseclipse.validation.ocl, fr.centralesupelec.edf.riseclipse.iec61850.nsd, - fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit + fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit, + org.eclipse.ocl.xtext.oclinecore diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDEObjectValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDEObjectValidator.java deleted file mode 100644 index 10e251fb8c07d9244c127bd9b6a404149049bae2..0000000000000000000000000000000000000000 --- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDEObjectValidator.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Copyright (c) 2019 CentraleSupélec & EDF. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * This file is part of the RiseClipse tool - * - * Contributors: - * Computer Science Department, CentraleSupélec - * EDF R&D - * Contacts: - * dominique.marcadet@centralesupelec.fr - * aurelie.dehouck-neveu@edf.fr - * Web site: - * http://wdi.supelec.fr/software/RiseClipse/ - */ -package fr.centralesupelec.edf.riseclipse.iec61850.scl.validator; - -import java.util.Map; - -import org.eclipse.emf.common.util.DiagnosticChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EDataType; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EValidator; -import org.eclipse.emf.ecore.resource.Resource; - -import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot; -import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType; -import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC; -import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass; -import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS; -import fr.centralesupelec.edf.riseclipse.iec61850.scl.AnyLN; -import fr.centralesupelec.edf.riseclipse.iec61850.scl.DA; -import fr.centralesupelec.edf.riseclipse.iec61850.scl.DOType; -import fr.centralesupelec.edf.riseclipse.iec61850.scl.LNode; -import fr.centralesupelec.edf.riseclipse.iec61850.scl.LNodeType; -import fr.centralesupelec.edf.riseclipse.util.AbstractRiseClipseConsole; - -public class NSDEObjectValidator implements EValidator { - - private NS ns; - - public NSDEObjectValidator( Resource nsdResource ) { - DocumentRoot root = (DocumentRoot) nsdResource.getContents().get( 0 ); - ns = (NS) root.getNS(); - } - - @Override - public boolean validate( EObject eObject, DiagnosticChain diagnostics, Map< Object, Object > context ) { - return validate( eObject.eClass(), eObject, diagnostics, context ); - } - - @Override - public boolean validate( EClass eClass, EObject eObject, DiagnosticChain diagnostics, - Map< Object, Object > context ) { - - switch(eClass.getName()) { - case "LNode": - LNode lnd = (LNode) eObject; - return validateLN(lnd.getLnClass()); - case "LNodeType": - LNodeType lnt = (LNodeType) eObject; - return validateLN(lnt.getLnClass()); - case "LN0": - case "LN": - AnyLN ln = (AnyLN) eObject; - return validateLN(ln.getLnClass()); - case "DOType": - DOType dot = (DOType) eObject; - return validateDO(dot.getCdc()); - case "DA": - DA da = (DA) eObject; - return validateDA(da.getBType()); - default: - return false; - } - } - - @Override - public boolean validate( EDataType eDataType, Object value, DiagnosticChain diagnostics, - Map< Object, Object > context ) { - AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validate( EDataType ): " + eDataType.getName() ); - - // TODO: use nsdResource to validate value - - - return true; - } - - - public boolean validateLN(String lnClassName) { - AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateLN( " + lnClassName + " )" ); - if(ns.getLNClasses() != null) { - EList<LNClass> lnClass = ns.getLNClasses().getLNClass(); - for(int i = 0; i < lnClass.size(); i++) { - if(lnClassName.equals(lnClass.get(i).getName())) { - //log("is valid"); - return true; - } - } - //log("is not valid"); - return false; - } else { - return true; - } - } - - public boolean validateDO(String cdcName) { - AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateDO( " + cdcName + " )" ); - if(ns.getCDCs() != null) { - EList<CDC> cdc = ns.getCDCs().getCDC(); - for(int i = 0; i < cdc.size(); i++) { - if(cdcName.equals(cdc.get(i).getName())) { - //log("is valid"); - return true; - } - } - //log("is not valid"); - return false; - } else { - return true; - } - } - - public boolean validateDA(String basicTypeName) { - AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateDA( " + basicTypeName + " )" ); - if(ns.getBasicTypes() != null) { - EList<BasicType> basicTypes = ns.getBasicTypes().getBasicType(); - for(int i = 0; i < basicTypes.size(); i++) { - if(basicTypeName.equals(basicTypes.get(i).getName())) { - //log("is valid"); - return true; - } - } - //log("is not valid"); - return false; - } else { - return true; - } - } - - - public void log(String message) { - AbstractRiseClipseConsole.getConsole().info(message); - } - - -} diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDModelLoader.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDModelLoader.java deleted file mode 100644 index 3a56a29dab4675398f269f3567b3a129884497c1..0000000000000000000000000000000000000000 --- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDModelLoader.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright (c) 2019 CentraleSupélec & EDF. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * This file is part of the RiseClipse tool - * - * Contributors: - * Computer Science Department, CentraleSupélec - * EDF R&D - * Contacts: - * dominique.marcadet@centralesupelec.fr - * aurelie.dehouck-neveu@edf.fr - * Web site: - * http://wdi.supelec.fr/software/RiseClipse/ - */ -package fr.centralesupelec.edf.riseclipse.iec61850.scl.validator; - -import org.eclipse.emf.ecore.EValidator; -import org.eclipse.emf.ecore.resource.Resource; - -import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage; -import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceFactoryImpl; -import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole; -import fr.centralesupelec.edf.riseclipse.util.RiseClipseModelLoader; -import fr.centralesupelec.edf.riseclipse.util.TextRiseClipseConsole; - -public class NSDModelLoader extends RiseClipseModelLoader { - - public NSDModelLoader( IRiseClipseConsole console ) { - super( console ); - } - - @Override - public void reset() { - super.reset(); - - // Register the appropriate resource factory to handle all file - // extensions. - getResourceSet().getResourceFactoryRegistry().getExtensionToFactoryMap() - .put( Resource.Factory.Registry.DEFAULT_EXTENSION, new NsdResourceFactoryImpl() ); - - // Register the package to ensure it is available during loading. - getResourceSet().getPackageRegistry().put( NsdPackage.eNS_URI, NsdPackage.eINSTANCE ); - } - - public Resource loadWithoutValidation( String name ) { - Object eValidator = EValidator.Registry.INSTANCE.remove( NsdPackage.eINSTANCE ); - - Resource resource = load( name ); - - if( eValidator != null ) { - EValidator.Registry.INSTANCE.put( NsdPackage.eINSTANCE, eValidator ); - } - return resource; - } - - public static void main( String[] args ) { - IRiseClipseConsole console = new TextRiseClipseConsole(); - NSDModelLoader loader = new NSDModelLoader( console ); - - for( int i = 0; i < args.length; ++i ) { - @SuppressWarnings( "unused" ) - Resource resource = loader.load( args[i] ); - } - } - -} diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdEObjectValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdEObjectValidator.java new file mode 100644 index 0000000000000000000000000000000000000000..dc1a656ce3926a509e554811c2d8a8721381a867 --- /dev/null +++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdEObjectValidator.java @@ -0,0 +1,181 @@ +/** + * Copyright (c) 2019 CentraleSupélec & EDF. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * This file is part of the RiseClipse tool + * + * Contributors: + * Computer Science Department, CentraleSupélec + * EDF R&D + * Contacts: + * dominique.marcadet@centralesupelec.fr + * aurelie.dehouck-neveu@edf.fr + * Web site: + * http://wdi.supelec.fr/software/RiseClipse/ + */ +package fr.centralesupelec.edf.riseclipse.iec61850.scl.validator; + +import java.util.Map; +import java.util.Optional; + +import org.eclipse.emf.common.util.DiagnosticChain; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EDataType; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EValidator; +import org.eclipse.emf.ecore.resource.Resource; + +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceSetImpl; +import fr.centralesupelec.edf.riseclipse.iec61850.scl.AnyLN; +import fr.centralesupelec.edf.riseclipse.iec61850.scl.DA; +import fr.centralesupelec.edf.riseclipse.iec61850.scl.DAI; +import fr.centralesupelec.edf.riseclipse.iec61850.scl.DOI; +import fr.centralesupelec.edf.riseclipse.iec61850.scl.DOType; +import fr.centralesupelec.edf.riseclipse.iec61850.scl.LNode; +import fr.centralesupelec.edf.riseclipse.iec61850.scl.LNodeType; +import fr.centralesupelec.edf.riseclipse.util.AbstractRiseClipseConsole; + +public class NsdEObjectValidator implements EValidator { + + private NsdResourceSetImpl nsdResourceSet; + + public NsdEObjectValidator( NsdResourceSetImpl nsdResourceSet ) { + this.nsdResourceSet = nsdResourceSet; + } + + @Override + public boolean validate( EObject eObject, DiagnosticChain diagnostics, Map< Object, Object > context ) { + return validate( eObject.eClass(), eObject, diagnostics, context ); + } + + @Override + public boolean validate( EClass eClass, EObject eObject, DiagnosticChain diagnostics, + Map< Object, Object > context ) { + + switch(eClass.getName()) { +// case "LNode": +// LNode lnd = (LNode) eObject; +// return validateLN(lnd.getLnClass()); +// case "LNodeType": +// LNodeType lnt = (LNodeType) eObject; +// return validateLN(lnt.getLnClass()); + case "LN0": + case "LN": + AnyLN ln = (AnyLN) eObject; + return validateLN(ln); +// case "DOType": +// DOType dot = (DOType) eObject; +// return validateDO(dot.getCdc()); +// case "DA": +// DA da = (DA) eObject; +// return validateDA(da.getBType()); + default: + return false; + } + } + + @Override + public boolean validate( EDataType eDataType, Object value, DiagnosticChain diagnostics, + Map< Object, Object > context ) { + AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validate( EDataType ): " + eDataType.getName() ); + + // TODO: use nsdResource to validate value + + + return true; + } + + + public boolean validateLN(AnyLN ln) { + AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateLN( " + ln.getLnClass() + " )" ); + + // TODO: inheritance of LNClass must be taken into account + + Optional< LNClass > lnClassFound = nsdResourceSet.getLNClassStream().filter( lNClass -> lNClass.getName().equals( ln.getLnClass() )).findAny(); + if( ! lnClassFound.isPresent() ) { + AbstractRiseClipseConsole.getConsole().error( "ln.getLnClass() not found in NSD files" ); + return false; + } + AbstractRiseClipseConsole.getConsole().info( "found ln.getLnClass() in NSD files" ); + + // lnClassFound contains DataObject which describes allowed DOI in LN + for( DOI doi : ln.getDOI() ) { + Optional< DataObject > dataObjectFound = lnClassFound.get().getDataObject().stream().filter( dataObject -> dataObject.getName().equals( doi.getName()) ).findAny(); + + if( ! dataObjectFound.isPresent() ) { + // TODO: add message + return false; + } + + // dataObjectFound refers to a CDC which describes allowed DAI in DOI + CDC cdcFound = dataObjectFound.get().getRefersToCDC(); + for( DAI dai : doi.getDAI() ) { + Optional< DataAttribute > dataAttributeFound = cdcFound.getDataAttribute().stream().filter( dataAttribute -> dataAttribute.getName().equals( dai.getName() ) ).findAny(); + if( ! dataAttributeFound.isPresent() ) { + // TODO: add message + return false; + } + + // TODO: is there anything else to check ? + } + + // TODO: check that compulsory DataObject in cdcFound are present in doi + } + + // TODO: check that compulsory DataAttribute in lnClassFound are present in ln + + return true; + } + +// public boolean validateDO(String cdcName) { +// AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateDO( " + cdcName + " )" ); +// if(ns.getCDCs() != null) { +// EList<CDC> cdc = ns.getCDCs().getCDC(); +// for(int i = 0; i < cdc.size(); i++) { +// if(cdcName.equals(cdc.get(i).getName())) { +// //log("is valid"); +// return true; +// } +// } +// //log("is not valid"); +// return false; +// } else { +// return true; +// } +// } +// +// public boolean validateDA(String basicTypeName) { +// AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateDA( " + basicTypeName + " )" ); +// if(ns.getBasicTypes() != null) { +// EList<BasicType> basicTypes = ns.getBasicTypes().getBasicType(); +// for(int i = 0; i < basicTypes.size(); i++) { +// if(basicTypeName.equals(basicTypes.get(i).getName())) { +// //log("is valid"); +// return true; +// } +// } +// //log("is not valid"); +// return false; +// } else { +// return true; +// } +// } + + + public void log(String message) { + AbstractRiseClipseConsole.getConsole().info(message); + } + + +} diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdModelLoader.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdModelLoader.java new file mode 100644 index 0000000000000000000000000000000000000000..8fb4bd869e30377c3b56027dc62f7ba1a27d064c --- /dev/null +++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdModelLoader.java @@ -0,0 +1,129 @@ +/** + * Copyright (c) 2019 CentraleSupélec & EDF. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * This file is part of the RiseClipse tool + * + * Contributors: + * Computer Science Department, CentraleSupélec + * EDF R&D + * Contacts: + * dominique.marcadet@centralesupelec.fr + * aurelie.dehouck-neveu@edf.fr + * Web site: + * http://wdi.supelec.fr/software/RiseClipse/ + */ +package fr.centralesupelec.edf.riseclipse.iec61850.scl.validator; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.eclipse.emf.common.util.Diagnostic; +import org.eclipse.emf.ecore.EDataType; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.EValidator; +import org.eclipse.emf.ecore.EValidator.SubstitutionLabelProvider; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.util.Diagnostician; +//import org.eclipse.ocl.pivot.delegate.OCLDelegateDomain; +import org.eclipse.emf.edit.provider.IItemLabelProvider; + +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.provider.NsdItemProviderAdapterFactory; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceFactoryImpl; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceSetImpl; +import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole; +import fr.centralesupelec.edf.riseclipse.util.RiseClipseModelLoader; +import fr.centralesupelec.edf.riseclipse.util.TextRiseClipseConsole; + +public class NsdModelLoader extends RiseClipseModelLoader { + + public NsdModelLoader( IRiseClipseConsole console ) { + super( console ); + } + + @Override + public void reset() { + super.reset(new NsdResourceSetImpl() ); + + // Register the appropriate resource factory to handle all file + // extensions. + getResourceSet().getResourceFactoryRegistry().getExtensionToFactoryMap() + .put( Resource.Factory.Registry.DEFAULT_EXTENSION, new NsdResourceFactoryImpl() ); + + // Register the package to ensure it is available during loading. + getResourceSet().getPackageRegistry().put( NsdPackage.eNS_URI, NsdPackage.eINSTANCE ); + } + + @Override + public NsdResourceSetImpl getResourceSet() { + return ( NsdResourceSetImpl ) super.getResourceSet(); + } + + public Resource loadWithoutValidation( String name ) { + Object eValidator = EValidator.Registry.INSTANCE.remove( NsdPackage.eINSTANCE ); + + Resource resource = load( name ); + + if( eValidator != null ) { + EValidator.Registry.INSTANCE.put( NsdPackage.eINSTANCE, eValidator ); + } + return resource; + } + + public static void main( String[] args ) { + IRiseClipseConsole console = new TextRiseClipseConsole(); + //console.setLevel( IRiseClipseConsole.ERROR_LEVEL ); + NsdModelLoader loader = new NsdModelLoader( console ); + + org.eclipse.ocl.xtext.oclinecore.OCLinEcoreStandaloneSetup.doSetup(); + + Map<Object, Object> context = new HashMap< Object, Object >(); + SubstitutionLabelProvider substitutionLabelProvider = new EValidator.SubstitutionLabelProvider() { + + @Override + public String getValueLabel( EDataType eDataType, Object value ) { + return Diagnostician.INSTANCE.getValueLabel( eDataType, value ); + } + + @Override + public String getObjectLabel( EObject eObject ) { + NsdItemProviderAdapterFactory adapter = new NsdItemProviderAdapterFactory(); + IItemLabelProvider labelProvider = ( IItemLabelProvider ) adapter .adapt( eObject, IItemLabelProvider.class ); + return labelProvider.getText( eObject ); + } + + @Override + public String getFeatureLabel( EStructuralFeature eStructuralFeature ) { + return Diagnostician.INSTANCE.getFeatureLabel( eStructuralFeature ); + } + }; + context.put(EValidator.SubstitutionLabelProvider.class, substitutionLabelProvider ); + + for( int i = 0; i < args.length; ++i ) { + Resource resource = loader.load( args[i] ); + if( resource == null ) continue; + if( resource.getContents().size() == 0 ) continue; + Diagnostic diagnostic = Diagnostician.INSTANCE.validate( resource.getContents().get( 0 ), context ); + + if( diagnostic.getSeverity() == Diagnostic.ERROR || diagnostic.getSeverity() == Diagnostic.WARNING ) { + for( Iterator< Diagnostic > d = diagnostic.getChildren().iterator(); d.hasNext(); ) { + Diagnostic childDiagnostic = d.next(); + switch( childDiagnostic.getSeverity() ) { + case Diagnostic.ERROR: + case Diagnostic.WARNING: + console.error( "\t" + childDiagnostic.getMessage() ); + } + } + } + } + loader.getResourceSet().buildExplicitLinks( console ); + } + +} diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdValidator.java similarity index 87% rename from fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDValidator.java rename to fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdValidator.java index 0bffb4600fcf0e8ea2c41b6037905f24106c834c..5d105c4b8df1d85dffcc44331c33968c97553021 100644 --- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NSDValidator.java +++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdValidator.java @@ -38,25 +38,27 @@ import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.ocl.pivot.validation.ComposedEValidator; +import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceSetImpl; import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole; -public class NSDValidator { +public class NsdValidator { private @NonNull EPackage modelPackage; - private ComposedEValidator validator; + private NsdModelLoader nsdLoader; - public NSDValidator( @NonNull EPackage modelPackage ) { - this.modelPackage = modelPackage; - validator = ComposedEValidator.install( modelPackage ); + public NsdValidator( @NonNull ComposedEValidator validator, IRiseClipseConsole console ) { + nsdLoader = new NsdModelLoader( console ); + validator.addChild( new NsdEObjectValidator( nsdLoader.getResourceSet() )); } - public boolean addNSDDocument( Resource resource, IRiseClipseConsole console ) { - NSDEObjectValidator nsdObjectValidator = new NSDEObjectValidator( resource ); - validator.addChild( nsdObjectValidator ); - return true; + public void addNsdDocument( String nsdFile, IRiseClipseConsole console ) { + console.info( "Loading nsd: " + nsdFile ); + nsdLoader.load( nsdFile ); } public void validate( Resource resource, final AdapterFactory adapter, IRiseClipseConsole console ) { + nsdLoader.getResourceSet().buildExplicitLinks( console ); + Map<Object, Object> context = new HashMap< Object, Object >(); SubstitutionLabelProvider substitutionLabelProvider = new EValidator.SubstitutionLabelProvider() { 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 acfe5d5d052589e1c8d3983a67df26850689ae3b..45e7de32fbc1b127c5ec8c9309a3771470c2f42d 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 @@ -30,22 +30,24 @@ import fr.centralesupelec.edf.riseclipse.validation.ocl.OCLValidator; //import org.eclipse.emf.common.util.URI; 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 NsdValidator nsdValidator; + //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 ); } @@ -56,7 +58,6 @@ public class RiseClipseValidatorSCL { console.setLevel( IRiseClipseConsole.INFO_LEVEL ); displayLegal( console ); - console.setLevel( IRiseClipseConsole.WARNING_LEVEL ); if( args.length == 0 ) usage( console ); @@ -80,15 +81,15 @@ public class RiseClipseValidatorSCL { } } - ArrayList< File > 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" )) { - oclFiles.add( new File( args[i] )); + /*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; } @@ -97,7 +98,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 )); } @@ -122,29 +123,24 @@ public class RiseClipseValidatorSCL { console.info( "" ); } - public static void prepare( IRiseClipseConsole console, ArrayList< File > oclFiles, ArrayList< String > nsdFiles ) { - if( oclValidation ) { - oclValidator = new OCLValidator( SclPackage.eINSTANCE, true ); + public static void prepare( IRiseClipseConsole console, /*ArrayList< String > oclFiles,*/ ArrayList< String > nsdFiles ) { + @NonNull + ComposedEValidator validator = ComposedEValidator.install( SclPackage.eINSTANCE ); + + /*if( oclValidation ) { + oclValidator = new OCLValidator( validator, true ); for( int i = 0; i < oclFiles.size(); ++i ) { - console.info( "Loading ocl: " + oclFiles.get( i )); - // workaround for bug 486872 -// File file = new File( oclFiles.get( i )); -// URI uri = file.isFile() ? URI.createFileURI( file.getAbsolutePath() ) : URI.createURI( oclFiles.get( i )); -// oclFiles.add( uri ); -// ocl.addOCLDocument( uri, console ); oclValidator.addOCLDocument( oclFiles.get( i ), console ); } - } + }*/ if( nsdValidation ) { - nsdValidator = new NSDValidator( SclPackage.eINSTANCE ); - NSDModelLoader nsdLoader = new NSDModelLoader( console ); + nsdValidator = new NsdValidator( validator, console ); for( int i = 0; i < nsdFiles.size(); ++i ) { - console.info( "Loading nsd: " + nsdFiles.get( i )); - nsdValidator.addNSDDocument( nsdLoader.load( nsdFiles.get( i )), console ); + nsdValidator.addNsdDocument( nsdFiles.get( i ), console ); } - nsdAdapter = new NsdItemProviderAdapterFactory(); + //nsdAdapter = new NsdItemProviderAdapterFactory(); } sclLoader = new SCLModelLoader( console ); @@ -159,13 +155,13 @@ 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, nsdAdapter, console ); + nsdValidator.validate( resource, sclAdapter, console ); } } }