private OperatorRegistry GetOperatorRegistry() { if (operatorRegistry == null) { operatorRegistry = DataManager?.List?.ServiceProvider?.GetService <OperatorRegistry>() ?? new OperatorRegistry(); } return(operatorRegistry); }
/// <summary> /// Check message on alert conditions. /// </summary> /// <param name="message">Message.</param> public void Process(Message message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } var schema = _schemas.TryGetValue(message.GetType()); if (schema == null) { return; } var type = schema.AlertType; if (type == null) { return; } var canAlert = schema.Rules.All(rule => { var value = rule.Property.GetValue(message, null); switch (rule.Operator) { case ComparisonOperator.Equal: return(rule.Value.Equals(value)); case ComparisonOperator.NotEqual: return(!rule.Value.Equals(value)); case ComparisonOperator.Greater: return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) == 1); case ComparisonOperator.GreaterOrEqual: return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) >= 0); case ComparisonOperator.Less: return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) == -1); case ComparisonOperator.LessOrEqual: return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) <= 0); case ComparisonOperator.Any: return(true); default: throw new ArgumentOutOfRangeException(); } }); if (canAlert) { PushAlert((AlertTypes)type, schema.Caption, schema.Message, message.LocalTime); } }
void IAlertService.Validate(object entity, DateTime time) { if (entity == null) { throw new ArgumentNullException("entity"); } var schema = _schemas.TryGetValue(entity.GetType()); if (schema == null) { return; } var type = schema.AlertType; if (type == null) { return; } var canAlert = schema.Rules.All(rule => { var value = rule.Property.GetValue(entity, null); switch (rule.Operator) { case ComparisonOperator.Equal: return(rule.Value.Equals(value)); case ComparisonOperator.NotEqual: return(!rule.Value.Equals(value)); case ComparisonOperator.Greater: return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) == 1); case ComparisonOperator.GreaterOrEqual: return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) >= 0); case ComparisonOperator.Less: return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) == -1); case ComparisonOperator.LessOrEqual: return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) <= 0); case ComparisonOperator.Any: return(true); default: throw new ArgumentOutOfRangeException(); } }); if (canAlert) { PushAlert((AlertTypes)type, schema.Caption, schema.Message, time); } }
public TokenType Evaluate(Dictionary <Variable, TokenType> var_values) { return(ProcessCalculate((node, p1, p2) => { if (p1 is Variable && node.op == '=') { return OperatorRegistry.ExecuteBinaryOperation(node, p1, p2.Evaluate(var_values)); } return OperatorRegistry.ExecuteBinaryOperation(node, p1.Evaluate(var_values), p2.Evaluate(var_values)); }, (node) => { return node; }).Evaluate(var_values)); }
public override TokenType Evaluate(Dictionary <Variable, TokenType> var_values) { return(OperatorRegistry.ExecuteUnaryOperation(operation, token.Evaluate(var_values))); }