@@ -76,6 +76,8 @@ public class NodeSetToAML
7676 private const string MetaModelName = "OpcAmlMetaModel" ;
7777 private const string UaBaseRole = "UaBaseRole" ;
7878 private const string MethodNodeClass = "UaMethodNodeClass" ;
79+ private const string RefClassConnectsToPath = "RefClassConnectsToPath" ;
80+ private const string IsSource = "IsSource" ;
7981 private ModelManager m_modelManager ;
8082 private CAEXDocument m_cAEXDocument ;
8183 private AttributeTypeLibType m_atl_temp ;
@@ -798,9 +800,30 @@ SystemUnitFamilyType FindOrAddSUC(ref SystemUnitClassLibType scl, ref RoleClassL
798800
799801 #endregion
800802
801-
803+
802804 #region ICL
803805
806+ private void OverrideAttribute ( IClassWithBaseClassReference owner , string Name , string AttType , object val )
807+ {
808+ var atts = owner . GetInheritedAttributes ( ) ;
809+ foreach ( var aa in atts )
810+ {
811+ if ( aa . Name == Name )
812+ {
813+ if ( aa . AttributeDataType == AttType && aa . AttributeValue . Equals ( val ) )
814+ {
815+ return ; // no need to override
816+ }
817+ }
818+ }
819+
820+ AttributeType a = owner . Attribute . Append ( ) ;
821+ a . Name = Name ;
822+ a . AttributeDataType = AttType ;
823+ a . AttributeValue = val ;
824+
825+ }
826+
804827 private void ProcesReferenceType ( ref InterfaceClassLibType icl , NodeId nodeId )
805828 {
806829 var refnode = m_modelManager . FindNode < NodeSet . UAReferenceType > ( nodeId ) ;
@@ -834,7 +857,7 @@ private void ProcesReferenceType(ref InterfaceClassLibType icl, NodeId nodeId)
834857 }
835858 }
836859
837-
860+
838861 // ovveride any attribute values
839862 if ( BaseNodeId != null )
840863 {
@@ -847,6 +870,12 @@ private void ProcesReferenceType(ref InterfaceClassLibType icl, NodeId nodeId)
847870
848871 if ( refnode . InverseName != null )
849872 AddModifyAttribute ( true , added . Attribute , "InverseName" , "LocalizedText" , refnode . InverseName [ 0 ] . Value ) ;
873+
874+ OverrideAttribute ( added , IsSource , "xs:boolean" , true ) ;
875+ OverrideAttribute ( added , RefClassConnectsToPath , "xs:string" , ( inverseAdded != null ? inverseAdded . CAEXPath ( ) : added . CAEXPath ( ) ) ) ;
876+
877+
878+
850879
851880 if ( inverseAdded != null )
852881 {
@@ -856,6 +885,9 @@ private void ProcesReferenceType(ref InterfaceClassLibType icl, NodeId nodeId)
856885 if ( basenode . Symmetric != refnode . Symmetric )
857886 OverrideBooleanAttribute ( inverseAdded . Attribute , "Symmetric" , refnode . Symmetric ) ;
858887 AddModifyAttribute ( true , inverseAdded . Attribute , "InverseName" , "LocalizedText" , refnode . DecodedBrowseName . Name ) ;
888+ // OverrideBooleanAttribute(inverseAdded.Attribute, "IsSource", false);
889+ OverrideAttribute ( inverseAdded , IsSource , "xs:boolean" , false ) ;
890+ OverrideAttribute ( inverseAdded , RefClassConnectsToPath , "xs:string" , added . CAEXPath ( ) ) ;
859891
860892 }
861893
0 commit comments