Skip to content

Commit

Permalink
optimize PropertyChangedUtil
Browse files Browse the repository at this point in the history
  • Loading branch information
Ahoo-Wang committed Jul 19, 2019
1 parent 716e3f1 commit 1152493
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 33 deletions.
28 changes: 28 additions & 0 deletions src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
using System;
using System.Xml;
using SmartSql.Exceptions;

namespace SmartSql.Configuration.Tags
{
public class PropertyChangedUtil
{
private const String PROPERTY_CHANGED = nameof(IPropertyChanged.PropertyChanged);

/// <summary>
/// 验证属性值变更状态是否满足要求
/// </summary>
Expand Down Expand Up @@ -40,5 +46,27 @@ public static bool IsCondition(IPropertyChanged propertyChanged, AbstractRequest
}
}
}

public static bool? GetPropertyChanged(XmlNode xmlNode, Statement statement)
{
string strVal = xmlNode.Attributes?[PROPERTY_CHANGED]?.Value?.Trim();
if (String.IsNullOrEmpty(strVal))
{
if (statement.EnablePropertyChangedTrack)
{
return statement.EnablePropertyChangedTrack;
}

return null;
}

if (!Boolean.TryParse(strVal, out var boolVal))
{
throw new SmartSqlException($"can not convert {strVal} to Boolean from xml-node:{xmlNode.Value}.");
}

return boolVal;

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace SmartSql.Configuration.Tags.TagBuilders
{
public abstract class AbstractTagBuilder : ITagBuilder
{
private const String PROPERTY_CHANGED = nameof(IPropertyChanged.PropertyChanged);

private const String PREPEND = nameof(Tag.Prepend);
private const String PROPERTY = nameof(Tag.Property);
private const String REQUIRED = nameof(Tag.Required);
Expand All @@ -33,32 +33,6 @@ public Decimal GetXmlAttributeValueAsDecimal(XmlNode xmlNode, string attributeNa
return decimalVal;
}

public bool TryGetXmlAttributeValueAsBool(XmlNode xmlNode, string attributeName, out bool boolVal)
{
string strVal = GetXmlAttributeValue(xmlNode, attributeName);
if (String.IsNullOrEmpty(strVal))
{
boolVal = false;
return false;
}

if (!Boolean.TryParse(strVal, out boolVal))
{
throw new SmartSqlException($"can not convert {strVal} to Boolean from xml-node:{xmlNode.Value}.");
}

return true;
}

public bool? GetPropertyChanged(XmlNode xmlNode)
{
if (TryGetXmlAttributeValueAsBool(xmlNode, PROPERTY_CHANGED, out var boolVal))
{
return boolVal;
}
return null;
}

public String GetPrepend(XmlNode xmlNode)
{
return GetXmlAttributeValue(xmlNode, PREPEND);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,12 @@ public class IsPropertyBuilder : AbstractTagBuilder
{
public override ITag Build(XmlNode xmlNode, Statement statement)
{
var propertyChanged = GetPropertyChanged(xmlNode);
if (statement.EnablePropertyChangedTrack && !propertyChanged.HasValue)
{
propertyChanged = statement.EnablePropertyChangedTrack;
}
return new IsProperty
{
Property = GetProperty(xmlNode),
Prepend = GetPrepend(xmlNode),
ChildTags = new List<ITag>(),
PropertyChanged = propertyChanged,
PropertyChanged = PropertyChangedUtil.GetPropertyChanged(xmlNode, statement),
Statement = statement
};
}
Expand Down

0 comments on commit 1152493

Please sign in to comment.