protected bool SetAttributeValue(
Node node,
uint attributeId,
object attributeValue)
{
switch (attributeId)
{
case Attributes.NodeId:
{
if (node.NodeId != (NodeId)attributeValue)
{
Log(
"Invalid NodeId attribute value for Node '{0}'. NodeId = {1}, Expected = {2}, Actual = {3}",
node,
node.NodeId,
node.NodeId,
new Variant(attributeValue));
return false;
}
break;
}
case Attributes.NodeClass:
{
if (node.NodeClass != (NodeClass)(int)attributeValue)
{
Log(
"Invalid NodeClass attribute value for Node '{0}'. NodeId = {1}, Expected = {2}, Actual = {3}",
node,
node.NodeId,
node.NodeClass,
new Variant(attributeValue));
return false;
}
break;
}
case Attributes.BrowseName:
{
node.BrowseName = (QualifiedName)attributeValue;
break;
}
case Attributes.DisplayName:
{
node.DisplayName = (LocalizedText)attributeValue;
break;
}
case Attributes.Description:
{
node.Description = (LocalizedText)attributeValue;
break;
}
case Attributes.WriteMask:
{
node.WriteMask = (uint)attributeValue;
break;
}
case Attributes.UserWriteMask:
{
node.UserWriteMask = (uint)attributeValue;
break;
}
case Attributes.ContainsNoLoops:
{
((IView)node).ContainsNoLoops = (bool)attributeValue;
break;
}
case Attributes.EventNotifier:
{
if (node.NodeClass == NodeClass.View)
{
((IView)node).EventNotifier = (byte)attributeValue;
}
else
{
((IObject)node).EventNotifier = (byte)attributeValue;
}
break;
}
case Attributes.Executable:
{
((IMethod)node).Executable = (bool)attributeValue;
break;
}
case Attributes.UserExecutable:
{
((IMethod)node).UserExecutable = (bool)attributeValue;
break;
}
case Attributes.DataType:
{
((IVariableBase)node).DataType = (NodeId)attributeValue;
break;
}
case Attributes.ValueRank:
{
((IVariableBase)node).ValueRank = (int)attributeValue;
break;
}
case Attributes.ArrayDimensions:
{
((IVariableBase)node).ArrayDimensions = (uint[])attributeValue;
break;
}
case Attributes.AccessLevel:
{
((IVariable)node).AccessLevel = (byte)attributeValue;
break;
}
case Attributes.UserAccessLevel:
{
((IVariable)node).UserAccessLevel = (byte)attributeValue;
break;
}
case Attributes.MinimumSamplingInterval:
{
((IVariable)node).MinimumSamplingInterval = (double)attributeValue;
break;
}
case Attributes.Historizing:
{
((IVariable)node).Historizing = (bool)attributeValue;
break;
}
case Attributes.IsAbstract:
{
switch (node.NodeClass)
{
case NodeClass.ObjectType: { ((IObjectType)node).IsAbstract = (bool)attributeValue; break; }
case NodeClass.VariableType: { ((IVariableType)node).IsAbstract = (bool)attributeValue; break; }
case NodeClass.ReferenceType: { ((IReferenceType)node).IsAbstract = (bool)attributeValue; break; }
case NodeClass.DataType: { ((IDataType)node).IsAbstract = (bool)attributeValue; break; }
}
break;
}
case Attributes.InverseName:
{
((IReferenceType)node).InverseName = (LocalizedText)attributeValue;
break;
}
case Attributes.Symmetric:
{
((IReferenceType)node).Symmetric = (bool)attributeValue;
break;
}
case Attributes.Value:
{
((IVariableBase)node).Value = attributeValue;
break;
}
}
return true;
}