protected override ServiceResult WriteNonValueAttribute(
ISystemContext context,
uint attributeId,
object value)
{
ServiceResult result = null;
switch (attributeId)
{
case Attributes.DataType:
{
NodeId dataType = value as NodeId;
if (dataType == null)
{
return StatusCodes.BadTypeMismatch;
}
if ((WriteMask & AttributeWriteMask.DataType) == 0)
{
return StatusCodes.BadNotWritable;
}
if (OnWriteDataType != null)
{
result = OnWriteDataType(context, this, ref dataType);
}
if (ServiceResult.IsGood(result))
{
DataType = dataType;
}
return result;
}
case Attributes.ValueRank:
{
int? valueRankRef = value as int?;
if (valueRankRef == null)
{
return StatusCodes.BadTypeMismatch;
}
if ((WriteMask & AttributeWriteMask.ValueRank) == 0)
{
return StatusCodes.BadNotWritable;
}
int valueRank = valueRankRef.Value;
if (OnWriteValueRank != null)
{
result = OnWriteValueRank(context, this, ref valueRank);
}
if (ServiceResult.IsGood(result))
{
ValueRank = valueRank;
}
return result;
}
case Attributes.ArrayDimensions:
{
IList<uint> arrayDimensions = value as IList<uint>;
if ((WriteMask & AttributeWriteMask.ArrayDimensions) == 0)
{
return StatusCodes.BadNotWritable;
}
if (OnWriteArrayDimensions != null)
{
result = OnWriteArrayDimensions(context, this, ref arrayDimensions);
}
if (ServiceResult.IsGood(result))
{
if (arrayDimensions != null)
{
m_arrayDimensions = new ReadOnlyList<uint>(arrayDimensions);
}
else
{
ArrayDimensions = null;
}
}
return result;
}
}
return base.WriteNonValueAttribute(context, attributeId, value);
}