/// <summary> /// Imports a part of the OPC UA Address Space contained in the <see cref="UANodeSet" /> object model. /// </summary> /// <param name="model">The model to be imported.</param> /// <exception cref="System.ArgumentNullException">model;the model cannot be null</exception> void IAddressSpaceContext.ImportUANodeSet(UANodeSet model) { m_TraceEvent(TraceMessage.DiagnosticTraceMessage("Entering AddressSpaceContextService.ImportUANodeSet - importing from object model.")); if (model == null) throw new ArgumentNullException("model", "the model cannot be null"); ImportNodeSet(model); }
public static UANodeSet CreateNodeSetModel() { UANodeSet _ns = new UANodeSet() { NamespaceUris = new string[] { @"http://cas.eu/UA/Demo/" }, Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "Boolean", Value = "i=1" }, new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" } }, Items = new UANode[] { new UAReferenceType() { NodeId = "ns=1;i=985", BrowseName="1:FlowTo", DisplayName = new LocalizedText[]{ new LocalizedText() { Value = "FlowTo"}}, Symmetric = true, References = new Reference[] { new Reference() {ReferenceType="HasSubtype", IsForward=false, Value = "i=32"} } } } }; return _ns; }
//methods private void ImportNodeSet(UANodeSet model) { if (model.ServerUris != null) m_TraceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.NotSupportedFeature, "ServerUris is omitted during the import")); if (model.Extensions != null) m_TraceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.NotSupportedFeature, "Extensions is omitted during the import")); string _namespace = model.NamespaceUris == null ? m_NamespaceTable.GetString(0) : model.NamespaceUris[0]; m_TraceEvent(TraceMessage.DiagnosticTraceMessage(String.Format("Entering AddressSpaceContext.ImportNodeSet - starting import {0}.", _namespace))); UAModelContext _modelContext = new UAModelContext(model.Aliases, model.NamespaceUris, this); m_TraceEvent(TraceMessage.DiagnosticTraceMessage("AddressSpaceContext.ImportNodeSet - context for imported model is created and starting import nodes.")); foreach (UANode _nd in model.Items) this.ImportUANode(_nd, _modelContext, m_TraceEvent); m_TraceEvent(TraceMessage.DiagnosticTraceMessage(String.Format("Finishing AddressSpaceContext.ImportNodeSet - imported {0} nodes.", model.Items.Length))); }
//Helpers private static void ValidateAndExportModelPreparation(out UANodeSet _ns, out IAddressSpaceContext _as) { _ns = TestData.CreateNodeSetModel(); List<TraceMessage> _trace = new List<TraceMessage>(); int _diagnosticCounter = 0; Assert.AreEqual<int>(0, _trace.Where<TraceMessage>(x => x.BuildError.Focus != Focus.Diagnostic).Count<TraceMessage>()); Assert.IsTrue(_ns.NamespaceUris.Length >= 1, "Wrong test data - NamespaceUris must contain more then 2 items"); _as = new AddressSpaceContext(x => { Helpers.TraceHelper.TraceDiagnostic(x, _trace, ref _diagnosticCounter); }); Assert.IsNotNull(_as); Assert.AreEqual<int>(0, _trace.Where<TraceMessage>(x => x.BuildError.Focus != Focus.Diagnostic).Count<TraceMessage>()); _as.ImportUANodeSet(_ns); Assert.AreEqual<int>(0, _trace.Where<TraceMessage>(x => x.BuildError.Focus != Focus.Diagnostic).Count<TraceMessage>()); }
public void RecalculateNodeIdsUANodeSetTest() { UANodeSet _toTest = new UANodeSet() { NamespaceUris = new string[] { @"http://cas.eu/UA/Demo/" }, Aliases = new NodeIdAlias[] { }, Items = new UANode[] { new UAObject() { NodeId = "ns=1;i=1", BrowseName = "1:NewUAObject", DisplayName = new LocalizedText[] { new LocalizedText() { Value = "New UA Object" } }, References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value = ObjectTypeIds.BaseObjectType.ToString() }, new Reference() { ReferenceType = ReferenceTypeIds.Organizes.ToString(), IsForward = false, Value = "i=85" } }, // UAInstance ParentNodeId = string.Empty, // UAObject EventNotifier = 0x01, }, new UAVariableType() { NodeId = "ns=1;i=1", BrowseName = "1:NewUAObject", DisplayName = new LocalizedText[] { new LocalizedText() { Value = "New UA Object" } }, References = new Reference[] {}, // UAObject DataType = "ns=1;i=2", } } }; Mock <IUAModelContext> _uAModelContext = new Mock <IUAModelContext>(); _uAModelContext.Setup <string>(x => x.ImportNodeId(It.IsAny <string>())).Returns <string> (x => { NodeId nodeId = NodeId.Parse(x); if (nodeId.NamespaceIndex == 1) { nodeId.SetNamespaceIndex(10); } return(nodeId.ToString()); }); _uAModelContext.Setup <string>(x => x.ImportQualifiedName(It.IsAny <string>())).Returns <string> (x => { QualifiedName nodeId = QualifiedName.Parse(x); if (nodeId.NamespaceIndex == 1) { nodeId.NamespaceIndex = 10; } return(nodeId.ToString()); }); _toTest.Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "Alias name", Value = "ns=1;i=24" } }; _toTest.RecalculateNodeIds(_uAModelContext.Object); Assert.AreEqual <string>("ns=10;i=24", _toTest.Aliases[0].Value); Assert.AreEqual <string>("Alias name", _toTest.Aliases[0].Alias); Assert.AreEqual <string>("ns=10;i=1", _toTest.Items[0].NodeId); Assert.AreEqual <string>("ns=10;i=2", ((UAVariableType)_toTest.Items[1]).DataType); }