private bool VerifyVariableBaseConsistency(IVariableBase node)
{
INode datatype = Session.NodeCache.Find(node.DataType) as INode;
if (datatype == null || datatype.NodeClass != NodeClass.DataType)
{
Log(
"DataType is not recognized for Node '{0}'. NodeId = {1}, DataType = {2}",
node,
node.NodeId,
node.DataType);
return false;
}
if (node.ValueRank < -3)
{
Log(
"ValueRank is invalid for Node '{0}'. NodeId = {1}, ValueRank = {2}",
node,
node.NodeId,
node.ValueRank);
return false;
}
if (node.ValueRank <= 0)
{
if (node.ArrayDimensions != null && node.ArrayDimensions.Count > 0)
{
Log(
"ArrayDimensions not allowed for variable length values Node '{0}'. NodeId = {1}, ValueRank = {2}, ArrayDimensions = {3}",
node,
node.NodeId,
node.ValueRank,
new Variant(node.ArrayDimensions));
return false;
}
}
else
{
if (node.ArrayDimensions != null && node.ArrayDimensions.Count > 0 && node.ArrayDimensions.Count != node.ValueRank)
{
Log(
"ArrayDimensions length does not match ValueRank values Node '{0}'. NodeId = {1}, Expected = {2}, Actual = {3}",
node,
node.NodeId,
node.ValueRank,
node.ArrayDimensions.Count);
return false;
}
}
return true;
}