Skip to content
Snippets Groups Projects
Commit 7ef3d9d9 authored by Dominique Marcadet's avatar Dominique Marcadet
Browse files

clean code

parent b33baf7e
No related branches found
No related tags found
1 merge request!3Resolve "Implement NSD based validation"
...@@ -53,7 +53,7 @@ public class AnyLNValidator { ...@@ -53,7 +53,7 @@ public class AnyLNValidator {
for( DataObject dObj : lnClass.getDataObject() ) { for( DataObject dObj : lnClass.getDataObject() ) {
this.doMap.put( dObj.getName(), dObj ); this.doMap.put( dObj.getName(), dObj );
if( dObj.getRefersToCDC() != null ) { 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() )); this.cdcMap.put( dObj.getRefersToCDC().getName(), new DOIValidator( dObj.getRefersToCDC() ));
} }
} }
...@@ -64,7 +64,7 @@ public class AnyLNValidator { ...@@ -64,7 +64,7 @@ public class AnyLNValidator {
HashSet< String > checkedDO = new HashSet<>(); HashSet< String > checkedDO = new HashSet<>();
for( DOI doi : ln.getDOI() ) { 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 // Test if DOI is a possible DOI in this LN
if( !this.doMap.containsKey( doi.getName() ) ) { if( !this.doMap.containsKey( doi.getName() ) ) {
...@@ -78,7 +78,7 @@ public class AnyLNValidator { ...@@ -78,7 +78,7 @@ public class AnyLNValidator {
this.updateCompulsory( doi.getName(), presCond, checkedDO ); this.updateCompulsory( doi.getName(), presCond, checkedDO );
// Validation of DOI content // Validation of DOI content
if( !validateDOI( doi ) ) { if( ! validateDOI( doi ) ) {
return false; return false;
} }
...@@ -98,7 +98,7 @@ public class AnyLNValidator { ...@@ -98,7 +98,7 @@ public class AnyLNValidator {
public boolean checkCompulsory( String name, String presCond, HashSet< String > checked ) { public boolean checkCompulsory( String name, String presCond, HashSet< String > checked ) {
switch( presCond ) { switch( presCond ) {
case "M": case "M":
if( !checked.contains( name ) ) { if( ! checked.contains( name ) ) {
AbstractRiseClipseConsole.getConsole().error( "DO " + name + " is missing" ); AbstractRiseClipseConsole.getConsole().error( "DO " + name + " is missing" );
return false; return false;
} }
...@@ -127,15 +127,11 @@ public class AnyLNValidator { ...@@ -127,15 +127,11 @@ public class AnyLNValidator {
public boolean validateDOI( DOI doi ) { 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 // DOIValidator validates DOI content
String cdc = this.doMap.get( doi.getName() ).getRefersToCDC().getName(); String cdc = this.doMap.get( doi.getName() ).getRefersToCDC().getName();
return cdcMap.get( cdc ).validateDOI( doi ); return cdcMap.get( cdc ).validateDOI( doi );
} }
public void log( String message ) {
AbstractRiseClipseConsole.getConsole().info( message );
}
} }
...@@ -31,7 +31,6 @@ public class DOIValidator { ...@@ -31,7 +31,6 @@ public class DOIValidator {
private String cdc; private String cdc;
private HashMap< String, DataAttribute > daMap; private HashMap< String, DataAttribute > daMap;
//private static Boolean test = false;
public DOIValidator( CDC cdc ) { public DOIValidator( CDC cdc ) {
this.cdc = cdc.getName(); this.cdc = cdc.getName();
...@@ -39,20 +38,16 @@ public class DOIValidator { ...@@ -39,20 +38,16 @@ public class DOIValidator {
for( DataAttribute da : cdc.getDataAttribute() ) { for( DataAttribute da : cdc.getDataAttribute() ) {
this.daMap.put( da.getName(), da ); this.daMap.put( da.getName(), da );
} }
/*if(!test) {
testValidateVal();
}
test = true;*/
} }
public boolean validateDOI( DOI doi ) { public boolean validateDOI( DOI doi ) {
HashSet< String > checkedDA = new HashSet<>(); HashSet< String > checkedDA = new HashSet<>();
for( DAI dai : doi.getDAI() ) { 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 // 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 ); AbstractRiseClipseConsole.getConsole().error( "DA " + dai.getName() + " not found in CDC " + this.cdc );
return false; return false;
} }
...@@ -62,14 +57,14 @@ public class DOIValidator { ...@@ -62,14 +57,14 @@ public class DOIValidator {
this.updateCompulsory( dai.getName(), presCond, checkedDA ); this.updateCompulsory( dai.getName(), presCond, checkedDA );
// Validation of DAI content // Validation of DAI content
if( !validateDAI( dai ) ) { if( ! validateDAI( dai ) ) {
return false; return false;
} }
} }
// Verify all necessary DAI were present // 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 ) ) .map( x -> checkCompulsory( x.getKey(), x.getValue().getPresCond(), checkedDA ) )
.reduce( ( a, b ) -> a && b ).get() ) { .reduce( ( a, b ) -> a && b ).get() ) {
AbstractRiseClipseConsole.getConsole().error( "DO does not contain all mandatory DA from CDC " + this.cdc ); AbstractRiseClipseConsole.getConsole().error( "DO does not contain all mandatory DA from CDC " + this.cdc );
...@@ -110,19 +105,18 @@ public class DOIValidator { ...@@ -110,19 +105,18 @@ public class DOIValidator {
public boolean validateDAI( DAI dai ) { 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 // DataAttributes that are BASIC have a BasicType which describes allowed Val of DA
DataAttribute da = this.daMap.get( dai.getName() ); DataAttribute da = this.daMap.get( dai.getName() );
if( da.getTypeKind().getName().equals( "BASIC" ) ) { if( da.getTypeKind().getName().equals( "BASIC" ) ) {
for( Val val : dai.getVal() ) { 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() + AbstractRiseClipseConsole.getConsole().error( "Val " + val.getValue() + " of DA " + dai.getName() +
" is not of type " + da.getType() ); " is not of type " + da.getType() );
;
return false; 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() ); " is of type " + da.getType() );
} }
} }
...@@ -217,7 +211,7 @@ public class DOIValidator { ...@@ -217,7 +211,7 @@ public class DOIValidator {
} }
} }
public void testValidateVal() { private void testValidateVal() {
log( "\n--\tSTART TEST\t--\n" ); log( "\n--\tSTART TEST\t--\n" );
assertTrue( validateVal( "0", "BOOLEAN" ) ); assertTrue( validateVal( "0", "BOOLEAN" ) );
assertTrue( validateVal( "1", "BOOLEAN" ) ); assertTrue( validateVal( "1", "BOOLEAN" ) );
...@@ -302,7 +296,7 @@ public class DOIValidator { ...@@ -302,7 +296,7 @@ public class DOIValidator {
+ "1234567890123456789012345678901234567890123456789012345678901234", "VisString255" ) ); + "1234567890123456789012345678901234567890123456789012345678901234", "VisString255" ) );
} }
public void assertTrue( Boolean b ) { private void assertTrue( Boolean b ) {
if( b ) { if( b ) {
log( "Check" ); log( "Check" );
} }
...@@ -311,7 +305,7 @@ public class DOIValidator { ...@@ -311,7 +305,7 @@ public class DOIValidator {
} }
} }
public void log( String message ) { private void log( String message ) {
AbstractRiseClipseConsole.getConsole().info( message ); AbstractRiseClipseConsole.getConsole().info( message );
} }
} }
...@@ -48,7 +48,7 @@ public class NsdEObjectValidator implements EValidator { ...@@ -48,7 +48,7 @@ public class NsdEObjectValidator implements EValidator {
} ).get(); } ).get();
} }
public HashMap< String, AnyLNValidator > generateValidators( LNClass lnClass ) { private HashMap< String, AnyLNValidator > generateValidators( LNClass lnClass ) {
HashMap< String, AnyLNValidator > lnMap = new HashMap<>(); HashMap< String, AnyLNValidator > lnMap = new HashMap<>();
lnMap.put( lnClass.getName(), new AnyLNValidator( lnClass ) ); lnMap.put( lnClass.getName(), new AnyLNValidator( lnClass ) );
return lnMap; return lnMap;
...@@ -60,8 +60,7 @@ public class NsdEObjectValidator implements EValidator { ...@@ -60,8 +60,7 @@ public class NsdEObjectValidator implements EValidator {
} }
@Override @Override
public boolean validate( EClass eClass, EObject eObject, DiagnosticChain diagnostics, public boolean validate( EClass eClass, EObject eObject, DiagnosticChain diagnostics, Map< Object, Object > context ) {
Map< Object, Object > context ) {
if( this.lnMap == null ) { if( this.lnMap == null ) {
this.initializeValidationData(); this.initializeValidationData();
...@@ -78,9 +77,8 @@ public class NsdEObjectValidator implements EValidator { ...@@ -78,9 +77,8 @@ public class NsdEObjectValidator implements EValidator {
} }
@Override @Override
public boolean validate( EDataType eDataType, Object value, DiagnosticChain diagnostics, public boolean validate( EDataType eDataType, Object value, DiagnosticChain diagnostics, Map< Object, Object > context ) {
Map< Object, Object > context ) { AbstractRiseClipseConsole.getConsole().info( "NOT IMPLEMENTED: NSDEObjectValidator.validate( EDataType ): " + eDataType.getName() );
//AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validate( EDataType ): " + eDataType.getName() );
// TODO: use nsdResource to validate value // TODO: use nsdResource to validate value
...@@ -88,319 +86,18 @@ public class NsdEObjectValidator implements EValidator { ...@@ -88,319 +86,18 @@ public class NsdEObjectValidator implements EValidator {
} }
public boolean validateLN( AnyLN ln ) { public boolean validateLN( AnyLN ln ) {
AbstractRiseClipseConsole.getConsole().info( "" ); AbstractRiseClipseConsole.getConsole().verbose( "" );
AbstractRiseClipseConsole.getConsole().info( "NSDEObjectValidator.validateLN( " + ln.getLnClass() + " )" ); AbstractRiseClipseConsole.getConsole().verbose( "NSDEObjectValidator.validateLN( " + ln.getLnClass() + " )" );
//LN has valid LNClass //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" ); AbstractRiseClipseConsole.getConsole().error( "LNClass " + ln.getLnClass() + " not found in NSD files" );
return false; 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 //AnyLNValidator validates LN content
return lnMap.get( ln.getLnClass() ).validateLN( ln ); 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 );
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment