diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/AnyLNValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/AnyLNValidator.java index aa7dbb38d656e0ca9b546ae26b7cd7f8f6593f66..5534900a9b43179ca7519c8ce33773cdef2d1dfa 100644 --- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/AnyLNValidator.java +++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/AnyLNValidator.java @@ -53,7 +53,7 @@ public class AnyLNValidator { for( DataObject dObj : lnClass.getDataObject() ) { this.doMap.put( dObj.getName(), dObj ); if( dObj.getRefersToCDC() != null ) { - if( !cdcMap.containsKey( dObj.getRefersToCDC().getName() ) ) { + if( ! cdcMap.containsKey( dObj.getRefersToCDC().getName() )) { this.cdcMap.put( dObj.getRefersToCDC().getName(), new DOIValidator( dObj.getRefersToCDC() )); } } @@ -64,7 +64,7 @@ public class AnyLNValidator { HashSet< String > checkedDO = new HashSet<>(); for( DOI doi : ln.getDOI() ) { - AbstractRiseClipseConsole.getConsole().info( "validateDOI( " + doi.getName() + " )" ); + AbstractRiseClipseConsole.getConsole().verbose( "validateDOI( " + doi.getName() + " )" ); // Test if DOI is a possible DOI in this LN if( !this.doMap.containsKey( doi.getName() ) ) { @@ -78,7 +78,7 @@ public class AnyLNValidator { this.updateCompulsory( doi.getName(), presCond, checkedDO ); // Validation of DOI content - if( !validateDOI( doi ) ) { + if( ! validateDOI( doi ) ) { return false; } @@ -98,7 +98,7 @@ public class AnyLNValidator { public boolean checkCompulsory( String name, String presCond, HashSet< String > checked ) { switch( presCond ) { case "M": - if( !checked.contains( name ) ) { + if( ! checked.contains( name ) ) { AbstractRiseClipseConsole.getConsole().error( "DO " + name + " is missing" ); return false; } @@ -127,15 +127,11 @@ public class AnyLNValidator { public boolean validateDOI( DOI doi ) { - AbstractRiseClipseConsole.getConsole().info( "found DO " + doi.getName() + " in LNClass " + this.lnClass ); + AbstractRiseClipseConsole.getConsole().verbose( "found DO " + doi.getName() + " in LNClass " + this.lnClass ); // DOIValidator validates DOI content String cdc = this.doMap.get( doi.getName() ).getRefersToCDC().getName(); return cdcMap.get( cdc ).validateDOI( doi ); } - 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/DOIValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/DOIValidator.java index 66f39f092133fd2633251729934e61b51a3bfd80..a8820c45bd779bdd2e261d6206e7332c9046d973 100644 --- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/DOIValidator.java +++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/DOIValidator.java @@ -31,7 +31,6 @@ public class DOIValidator { private String cdc; private HashMap< String, DataAttribute > daMap; - //private static Boolean test = false; public DOIValidator( CDC cdc ) { this.cdc = cdc.getName(); @@ -39,20 +38,16 @@ public class DOIValidator { for( DataAttribute da : cdc.getDataAttribute() ) { this.daMap.put( da.getName(), da ); } - /*if(!test) { - testValidateVal(); - } - test = true;*/ } public boolean validateDOI( DOI doi ) { HashSet< String > checkedDA = new HashSet<>(); for( DAI dai : doi.getDAI() ) { - AbstractRiseClipseConsole.getConsole().info( "validateDAI( " + dai.getName() + " )" ); + AbstractRiseClipseConsole.getConsole().verbose( "validateDAI( " + dai.getName() + " )" ); // Test if DAI is a possible DAI in this DOI - if( !this.daMap.containsKey( dai.getName() ) ) { + if( ! this.daMap.containsKey( dai.getName() ) ) { AbstractRiseClipseConsole.getConsole().error( "DA " + dai.getName() + " not found in CDC " + this.cdc ); return false; } @@ -62,14 +57,14 @@ public class DOIValidator { this.updateCompulsory( dai.getName(), presCond, checkedDA ); // Validation of DAI content - if( !validateDAI( dai ) ) { + if( ! validateDAI( dai ) ) { return false; } } // Verify all necessary DAI were present - if( !this.daMap.entrySet().stream() + if( ! this.daMap.entrySet().stream() .map( x -> checkCompulsory( x.getKey(), x.getValue().getPresCond(), checkedDA ) ) .reduce( ( a, b ) -> a && b ).get() ) { AbstractRiseClipseConsole.getConsole().error( "DO does not contain all mandatory DA from CDC " + this.cdc ); @@ -110,19 +105,18 @@ public class DOIValidator { public boolean validateDAI( DAI dai ) { - AbstractRiseClipseConsole.getConsole().info( "found DA " + dai.getName() + " in CDC " + this.cdc ); + AbstractRiseClipseConsole.getConsole().verbose( "found DA " + dai.getName() + " in CDC " + this.cdc ); // DataAttributes that are BASIC have a BasicType which describes allowed Val of DA DataAttribute da = this.daMap.get( dai.getName() ); if( da.getTypeKind().getName().equals( "BASIC" ) ) { for( Val val : dai.getVal() ) { - if( !validateVal( val.getValue(), da.getType() ) ) { + if( ! validateVal( val.getValue(), da.getType() ) ) { AbstractRiseClipseConsole.getConsole().error( "Val " + val.getValue() + " of DA " + dai.getName() + " is not of type " + da.getType() ); - ; return false; } - AbstractRiseClipseConsole.getConsole().info( "Val " + val.getValue() + " of DA " + dai.getName() + + AbstractRiseClipseConsole.getConsole().verbose( "Val " + val.getValue() + " of DA " + dai.getName() + " is of type " + da.getType() ); } } @@ -217,7 +211,7 @@ public class DOIValidator { } } - public void testValidateVal() { + private void testValidateVal() { log( "\n--\tSTART TEST\t--\n" ); assertTrue( validateVal( "0", "BOOLEAN" ) ); assertTrue( validateVal( "1", "BOOLEAN" ) ); @@ -302,7 +296,7 @@ public class DOIValidator { + "1234567890123456789012345678901234567890123456789012345678901234", "VisString255" ) ); } - public void assertTrue( Boolean b ) { + private void assertTrue( Boolean b ) { if( b ) { log( "Check" ); } @@ -311,7 +305,7 @@ public class DOIValidator { } } - public void log( String message ) { + private 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/NsdEObjectValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/NsdEObjectValidator.java index 26df2e6c26053077fd030d9c31b118a8c06674b8..712346692c1a3a881b9a27eb22fa68736f86fd57 100644 --- 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 @@ -48,7 +48,7 @@ public class NsdEObjectValidator implements EValidator { } ).get(); } - public HashMap< String, AnyLNValidator > generateValidators( LNClass lnClass ) { + private HashMap< String, AnyLNValidator > generateValidators( LNClass lnClass ) { HashMap< String, AnyLNValidator > lnMap = new HashMap<>(); lnMap.put( lnClass.getName(), new AnyLNValidator( lnClass ) ); return lnMap; @@ -60,8 +60,7 @@ public class NsdEObjectValidator implements EValidator { } @Override - public boolean validate( EClass eClass, EObject eObject, DiagnosticChain diagnostics, - Map< Object, Object > context ) { + public boolean validate( EClass eClass, EObject eObject, DiagnosticChain diagnostics, Map< Object, Object > context ) { if( this.lnMap == null ) { this.initializeValidationData(); @@ -78,9 +77,8 @@ public class NsdEObjectValidator implements EValidator { } @Override - public boolean validate( EDataType eDataType, Object value, DiagnosticChain diagnostics, - Map< Object, Object > context ) { - //AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validate( EDataType ): " + eDataType.getName() ); + public boolean validate( EDataType eDataType, Object value, DiagnosticChain diagnostics, Map< Object, Object > context ) { + AbstractRiseClipseConsole.getConsole().info( "NOT IMPLEMENTED: NSDEObjectValidator.validate( EDataType ): " + eDataType.getName() ); // TODO: use nsdResource to validate value @@ -88,319 +86,18 @@ public class NsdEObjectValidator implements EValidator { } public boolean validateLN( AnyLN ln ) { - AbstractRiseClipseConsole.getConsole().info( "" ); - AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateLN( " + ln.getLnClass() + " )" ); + AbstractRiseClipseConsole.getConsole().verbose( "" ); + AbstractRiseClipseConsole.getConsole().verbose( "NSDEObjectValidator.validateLN( " + ln.getLnClass() + " )" ); //LN has valid LNClass - if( !this.lnMap.containsKey( ln.getLnClass() ) ) { + if( ! this.lnMap.containsKey( ln.getLnClass() ) ) { AbstractRiseClipseConsole.getConsole().error( "LNClass " + ln.getLnClass() + " not found in NSD files" ); return false; } - AbstractRiseClipseConsole.getConsole().info( "found LNClass " + ln.getLnClass() + " in NSD files" ); + AbstractRiseClipseConsole.getConsole().verbose( "found LNClass " + ln.getLnClass() + " in NSD files" ); //AnyLNValidator validates LN content return lnMap.get( ln.getLnClass() ).validateLN( ln ); } - /* - public boolean validateLN(AnyLN ln) { - AbstractRiseClipseConsole.getConsole().info(""); - AbstractRiseClipseConsole.getConsole().info(""); - AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateLN( " + ln.getLnClass() + " )" ); - - if( ! this.lnMap.containsKey(ln.getLnClass()) ) { - AbstractRiseClipseConsole.getConsole().error( "LNClass " + ln.getLnClass() + " not found in NSD files" ); - return false; - } - AbstractRiseClipseConsole.getConsole().info( "found LNClass " + ln.getLnClass() + " in NSD files" ); - - HashSet<String> checkedDO = new HashSet<>(); - - /* - Optional< LNClass > lnClassFound = nsdResourceSet.getLNClassStream().filter( lNClass -> lNClass.getName().equals( ln.getLnClass() )).findAny(); - if( ! lnClassFound.isPresent() ) { - AbstractRiseClipseConsole.getConsole().error( "LNClass " + ln.getLnClass() + " not found in NSD files" ); - return false; - } - AbstractRiseClipseConsole.getConsole().info( "found LNClass " + ln.getLnClass() + " in NSD files" ); - - - // lnClassFound contains DataObject which describes allowed DOI in LN - for( DOI doi : ln.getDOI() ) { - - if(!this.lnMap.get(ln.getLnClass()).containsKey(doi.getName())) { - AbstractRiseClipseConsole.getConsole().error( "DO " + doi.getName() + " not found in LNClass " + ln.getLnClass()); - return false; - } - - String presCond = this.lnMap.get(ln.getLnClass()).get(doi.getName()); - switch(presCond) { - case "M": - case "O": - if(checkedDO.contains(doi.getName())) { - AbstractRiseClipseConsole.getConsole().error("DO " + doi.getName() + " cannot appear more than once"); - return false; - } else { - checkedDO.add(doi.getName()); - break; - } - case "F": - AbstractRiseClipseConsole.getConsole().error("DO " + doi.getName() + " is forbidden"); - return false; - } - - if( ! validateDO(doi) ){ - return false; - } - } - // TODO: check that compulsory DataObject in lnClassFound are present in ln - if(!this.lnMap.get(ln.getLnClass()).entrySet().stream().map(x -> checkCompulsory(x.getKey(), x.getValue(), checkedDO)).reduce((a, b) -> a && b).get()) { - AbstractRiseClipseConsole.getConsole().error( "LN does not contain all mandatory DO from class " + ln.getLnClass()); - return false; - } - return true; - } - */ - - /* - public boolean checkCompulsory(String dObj, String presCond, HashSet<String> checked) { - switch(presCond) { - case "M": - if(!checked.contains(dObj)) { - AbstractRiseClipseConsole.getConsole().error( "DO "+ dObj + " is missing"); - return false; - } - } - return true; - } - */ - - /* - public boolean validateDO(DOI doi) { - return true; - } - */ - - /* - public boolean validateDO(EList<DOI> lnDOI, LNClass lnClassFound) { - for( DOI doi : lnDOI ) { - Optional< DataObject > dataObjectFound = lnClassFound.getDataObject().stream().filter( dataObject -> dataObject.getName().equals( doi.getName()) ).findAny(); - AbstractRiseClipseConsole.getConsole().info(" "); - AbstractRiseClipseConsole.getConsole().info( "validateDO( " + doi.getName() + " )" ); - if( ! dataObjectFound.isPresent() ) { - AbstractRiseClipseConsole.getConsole().error( "DO " + doi.getName() + " not found in LNClass " + lnClassFound.getName()); - return false; - } - - try { - presenceDO = updatePresenceDO(presenceDO, dataObjectFound.get()); - } catch(Exception e) { - AbstractRiseClipseConsole.getConsole().error( "LN contains forbidden DO for class " + lnClassFound.getName()); - return false; - } - - // dataObjectFound refers to a CDC which describes allowed DAI in DOI - CDC cdcFound = dataObjectFound.get().getRefersToCDC(); - AbstractRiseClipseConsole.getConsole().info( "found DO " + doi.getName() + " (CDC: " + cdcFound.getName() + ") in LNClass " + lnClassFound.getName()); - if( ! validateDA(doi.getDAI(), cdcFound) ) { - return false; - } - - // TODO: check that compulsory DataAttribute in cdcFound are present in doi - } - - if(presenceDO.get("mandatory").size() > 0) { - AbstractRiseClipseConsole.getConsole().error( "LN does not contain all mandatory DO from class " + lnClassFound.getName()); - return false; - } - - return true; - } - - public HashMap <String, HashSet<String>> generatePresenceDO(LNClass lnClass) { - HashMap <String, HashSet<String>> sets = new HashMap<>(); - HashSet<String> mandatory = new HashSet<>(); - HashSet<String> forbidden = new HashSet<>(); - for(DataObject dObj : lnClass.getDataObject()) { - switch(dObj.getPresCond()) { - case "M": - case "AtLeastOne": - mandatory.add(dObj.getName()); - break; - case "F": - forbidden.add(dObj.getName()); - break; - default: - break; - } - } - sets.put("mandatory", mandatory); - sets.put("forbidden", forbidden); - return sets; - } - - public HashMap <String, HashSet<String>> updatePresenceDO(HashMap <String, HashSet<String>> sets, DataObject dObj) throws Exception { - HashSet<String> mandatory = sets.get("mandatory"); - HashSet<String> forbidden = sets.get("forbidden"); - switch(dObj.getPresCond()) { - case "M": - case "AtLeastOne": - mandatory.remove(dObj.getName()); - break; - case "AtMostOne": - if(forbidden.contains(dObj.getName())) { - throw new Exception("Forbidden"); - } - forbidden.add(dObj.getName()); - break; - case "F": - throw new Exception("Forbidden"); - default: - break; - } - return sets; - } - */ - - /* - public boolean validateDA(EList<DAI> doiDAI, CDC cdcFound) { - HashMap<String, HashSet<String>> presenceDA = generatePresenceDA(cdcFound); - for( DAI dai : doiDAI ) { - AbstractRiseClipseConsole.getConsole().info(" "); - AbstractRiseClipseConsole.getConsole().info( "validateDA( " + dai.getName() + " )" ); - Optional< DataAttribute > dataAttributeFound = cdcFound.getDataAttribute().stream().filter( dataAttribute -> dataAttribute.getName().equals( dai.getName() ) ).findAny(); - - if( ! dataAttributeFound.isPresent() ) { - AbstractRiseClipseConsole.getConsole().error( "DA " + dai.getName() + " not found in CDC " + cdcFound.getName()); - return false; - } - AbstractRiseClipseConsole.getConsole().info( "found DA " + dai.getName() + " in CDC " + cdcFound.getName()); - - try { - presenceDA = updatePresenceDA(presenceDA, dataAttributeFound.get()); - } catch(Exception e) { - AbstractRiseClipseConsole.getConsole().error( "DO contains forbidden DA for class " + cdcFound.getName()); - return false; - } - - // dataAttributeFound that are BASIC have a BasicType which describes allowed Val of DA - if(dataAttributeFound.get().getTypeKind().getName().equals("BASIC")) { - for(Val val : dai.getVal()) { - if( ! validateVal(val.getValue(), dataAttributeFound.get().getType()) ) { - AbstractRiseClipseConsole.getConsole().error( "Val " + val.getValue() + " of DA " + dai.getName() + - " is not of type " + dataAttributeFound.get().getType());; - return false; - } - AbstractRiseClipseConsole.getConsole().info( "Val " + val.getValue() + " of DA " + dai.getName() + - " is of type " + dataAttributeFound.get().getType()); - } - } - } - - if(presenceDA.get("mandatory").size() > 0) { - AbstractRiseClipseConsole.getConsole().error( "DO does not contain all mandatory DA from class " + cdcFound.getName()); - return false; - } - - return true; - } - - public HashMap <String, HashSet<String>> generatePresenceDA(CDC cdc) { - HashMap <String, HashSet<String>> sets = new HashMap<>(); - HashSet<String> mandatory = new HashSet<>(); - HashSet<String> forbidden = new HashSet<>(); - for(DataAttribute da : cdc.getDataAttribute()) { - switch(da.getPresCond()) { - case "M": - case "AtLeastOne": - mandatory.add(da.getName()); - break; - case "F": - forbidden.add(da.getName()); - break; - default: - break; - } - } - sets.put("mandatory", mandatory); - sets.put("forbidden", forbidden); - return sets; - } - - public HashMap <String, HashSet<String>> updatePresenceDA(HashMap <String, HashSet<String>> sets, DataAttribute da) throws Exception { - HashSet<String> mandatory = sets.get("mandatory"); - HashSet<String> forbidden = sets.get("forbidden"); - switch(da.getPresCond()) { - case "M": - case "AtLeastOne": - mandatory.remove(da.getName()); - break; - case "AtMostOne": - if(forbidden.contains(da.getName())) { - throw new Exception("Forbidden"); - } - forbidden.add(da.getName()); - break; - case "F": - throw new Exception("Forbidden"); - default: - break; - } - return sets; - } - */ - - /* - public boolean validateVal(String val, String type) { - int v; - long l; - float f; - switch(type) { - case "BOOLEAN": - return (val.equals("0") || val.equals("1") || val.equals("false") || val.equals("true")); - case "INT8": - v = Integer.parseInt(val); - return v >= -128 && v <= 127; - case "INT16": - v = Integer.parseInt(val); - return v >= -32768 && v <= 32767; - case "INT32": - v = Integer.parseInt(val); - return v >= Integer.MIN_VALUE && v <= Integer.MAX_VALUE; - case "INT64": - l = Long.parseLong(val); - return l >= Long.MIN_VALUE && l <= Long.MAX_VALUE; - case "INT8U": - v = Integer.parseInt(val); - return v >= 0 && v <= 255; - case "INT16U": - v = Integer.parseInt(val); - return v >= 0 && v <= 65535; - case "INT32U": - l = Long.parseLong(val); - String max = "4294967295"; - return l >= 0 && l <= Long.parseLong(max); - case "FLOAT32": - f = Float.parseFloat(val); - return f >= Float.MIN_VALUE && f <= Float.MAX_VALUE; - case "Octet64": - byte[] bytes = val.getBytes(); - return bytes.length <= 64; - case "VisString64": - return val.length() <= 255; - case "VisString129": - return val.length() <= 129; - case "Unicode255": - case "VisString255": - return val.length() <= 255; - default: - return false; - } - } - */ - - public void log( String message ) { - AbstractRiseClipseConsole.getConsole().info( message ); - } - }