/// <summary>
/// Generate test data for creating extended rule.
/// </summary>
/// <param name="rulename">The rule name.</param>
/// <param name="ruleSequence">The rule sequence.</param>
/// <param name="ruleState">The rule state.</param>
/// <param name="provider">The rule provider.</param>
/// <param name="actionType">The rule action Type.</param>
/// <param name="actionData">The rule action data.</param>
/// <param name="contentRestrictSubjectName">The subject name of the rule content restriction.</param>
/// <param name="namedPropertyInfo">The namedPropertyInfo that needed for construct the rule data.</param>
/// <returns>An array of TaggedPropertyValue of an extended rule.</returns>
public static TaggedPropertyValue[] GenerateExtendedRuleTestData(string rulename, int ruleSequence, uint ruleState, string provider, ActionType actionType, IActionData actionData, string contentRestrictSubjectName, NamedPropertyInfo namedPropertyInfo)
{
List<TaggedPropertyValue> propList = new List<TaggedPropertyValue>();
TaggedPropertyValue pidTagRuleMessageName = new TaggedPropertyValue();
PropertyTag pidTagRuleMessageNameTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagRuleMessageName,
PropertyType = (ushort)PropertyType.PtypString
};
pidTagRuleMessageName.PropertyTag = pidTagRuleMessageNameTag;
pidTagRuleMessageName.Value = Encoding.Unicode.GetBytes(rulename + "\0");
propList.Add(pidTagRuleMessageName);
TaggedPropertyValue pidTagMessageClass = new TaggedPropertyValue();
PropertyTag pidTagMessageClassTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagMessageClass,
PropertyType = (ushort)PropertyType.PtypString
};
pidTagMessageClass.PropertyTag = pidTagMessageClassTag;
pidTagMessageClass.Value = Encoding.Unicode.GetBytes(Constants.ExtendedRuleMessageClass + "\0");
propList.Add(pidTagMessageClass);
TaggedPropertyValue pidTagRuleMessageSequence = new TaggedPropertyValue();
PropertyTag pidTagRuleMessageSequencePropertyTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagRuleMessageSequence,
PropertyType = (ushort)PropertyType.PtypInteger32
};
pidTagRuleMessageSequence.PropertyTag = pidTagRuleMessageSequencePropertyTag;
pidTagRuleMessageSequence.Value = BitConverter.GetBytes(ruleSequence);
propList.Add(pidTagRuleMessageSequence);
TaggedPropertyValue pidTagRuleMessageState = new TaggedPropertyValue();
PropertyTag pidTagRuleMessageStatePropertyTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagRuleMessageState,
PropertyType = (ushort)PropertyType.PtypInteger32
};
pidTagRuleMessageState.PropertyTag = pidTagRuleMessageStatePropertyTag;
pidTagRuleMessageState.Value = BitConverter.GetBytes(ruleState);
propList.Add(pidTagRuleMessageState);
TaggedPropertyValue pidTagRuleMessageLevel = new TaggedPropertyValue();
PropertyTag pidTagRuleMessageLevelPropertyTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagRuleMessageLevel,
PropertyType = (ushort)PropertyType.PtypInteger32
};
pidTagRuleMessageLevel.PropertyTag = pidTagRuleMessageLevelPropertyTag;
pidTagRuleMessageLevel.Value = BitConverter.GetBytes(Constants.ExtendedRuleMessageLevel);
propList.Add(pidTagRuleMessageLevel);
TaggedPropertyValue pidTagRuleMessageProvider = new TaggedPropertyValue();
PropertyTag pidTagRuleMessageProviderPropertyTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagRuleMessageProvider,
PropertyType = (ushort)PropertyType.PtypString
};
pidTagRuleMessageProvider.PropertyTag = pidTagRuleMessageProviderPropertyTag;
pidTagRuleMessageProvider.Value = Encoding.Unicode.GetBytes(provider + "\0");
propList.Add(pidTagRuleMessageProvider);
ExtendedRuleActions extendedRuleActions = new ExtendedRuleActions
{
NamedPropertyInformation = namedPropertyInfo
};
extendedRuleActions.RuleVersion = Constants.ExtendedRuleVersion;
extendedRuleActions.RuleActionBuffer = GetRuleAction(actionType, CountByte.FourBytesCount, actionData, Constants.CommonActionFlavor, Constants.RuleActionFlags);
TaggedPropertyValue pidTagExtendedRuleMessageActions = new TaggedPropertyValue();
PropertyTag pidTagExtendedRuleMessageActionsPropertyTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagExtendedRuleMessageActions,
PropertyType = (ushort)PropertyType.PtypBinary
};
pidTagExtendedRuleMessageActions.PropertyTag = pidTagExtendedRuleMessageActionsPropertyTag;
pidTagExtendedRuleMessageActions.Value = Common.AddInt16LengthBeforeBinaryArray(extendedRuleActions.Serialize());
propList.Add(pidTagExtendedRuleMessageActions);
TaggedPropertyValue pidTagExtendedRuleMessageCondition = new TaggedPropertyValue();
PropertyTag pidTagExtendedRuleMessageConditionPropertyTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagExtendedRuleMessageCondition,
PropertyType = (ushort)PropertyType.PtypBinary
};
pidTagExtendedRuleMessageCondition.PropertyTag = pidTagExtendedRuleMessageConditionPropertyTag;
TaggedPropertyValue taggedProperty = new TaggedPropertyValue();
PropertyTag taggedPropertyPropertyTag = new PropertyTag
{
PropertyId = (ushort)PropertyId.PidTagSubject,
PropertyType = (ushort)PropertyType.PtypString
};
taggedProperty.PropertyTag = taggedPropertyPropertyTag;
taggedProperty.Value = Encoding.Unicode.GetBytes(contentRestrictSubjectName + "\0");
ContentRestriction contentRestriction = new ContentRestriction
{
FuzzyLevelLow = ContentRestriction.FuzzyLevelLowValue.FL_SUBSTRING,
FuzzyLevelHigh = ContentRestriction.FuzzyLevelHighValue.FL_IGNORECASE,
PropertyTag = taggedProperty.PropertyTag,
TaggedValue = taggedProperty
};
ExtendedRuleCondition extendedRuleCondition = new ExtendedRuleCondition
{
NamedPropertyInformation = namedPropertyInfo,
RuleRestriction = contentRestriction
};
pidTagExtendedRuleMessageCondition.Value = Common.AddInt16LengthBeforeBinaryArray(extendedRuleCondition.Serialize());
propList.Add(pidTagExtendedRuleMessageCondition);
return propList.ToArray();
}