From 20d36c928ad9dfb53ce1a95c531c9684b7974bf3 Mon Sep 17 00:00:00 2001
From: Dominique Marcadet <Dominique.Marcadet@centralesupelec.fr>
Date: Tue, 31 Mar 2020 12:29:29 +0200
Subject: [PATCH] a number at the end of a DO name is not always an instance
 number

---
 .../DataObjectPresenceConditionValidator.java | 21 ++++++++++---------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.validator/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/nsd/DataObjectPresenceConditionValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.validator/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/nsd/DataObjectPresenceConditionValidator.java
index 639b358..bccbaa8 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.validator/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/nsd/DataObjectPresenceConditionValidator.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.validator/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/nsd/DataObjectPresenceConditionValidator.java
@@ -15,7 +15,7 @@
 **      dominique.marcadet@centralesupelec.fr
 **      aurelie.dehouck-neveu@edf.fr
 **  Web site:
-**      http://wdi.supelec.fr/software/RiseClipse/
+**      http://wdi.centralesupelec.fr/software/RiseClipse/
 *************************************************************************
 */
 package fr.centralesupelec.edf.riseclipse.iec61850.scl.validator.nsd;
@@ -626,16 +626,17 @@ public class DataObjectPresenceConditionValidator {
     
     private boolean addDO( DO do_, String anyLNClassName, DiagnosticChain diagnostics ) {
         // An instance number may be set as a suffix
-        String[] names;
-        if( do_.getName().matches( "[a-zA-Z]+\\d+" )) {
+        // but a number at the end of the name is not always an instance number !
+        // Therefore, we first look for with the full name, then with the name without the suffix
+        
+        String[] names = new String[] { do_.getName() };
+        if( ! presentDO.containsKey( names[0] )) {
+            // if( do_.getName().matches( "[a-zA-Z]+\\d+" )) {
             names = do_.getName().split( "(?=\\d)", 2 );
-        }
-        else {
-            names = new String[] { do_.getName() };
-        }
-        if( names.length == 0 ) {
-            console.error( "[NSD validation] Unexpected DO name " + do_.getName() + " in LNodeType (line " + do_.getParentLNodeType().getLineNumber() );
-            return false;
+            if( names.length == 0 ) {
+                console.error( "[NSD validation] Unexpected DO name " + do_.getName() + " in LNodeType (line " + do_.getParentLNodeType().getLineNumber() );
+                return false;
+            }
         }
         if( ! presentDO.containsKey( names[0] )) {
             if( base != null ) {
-- 
GitLab