Пример #1
0
        /// <summary>
        ///     Evaluates the expressions.
        /// </summary>
        /// <param name="contextEntity">The context entity.</param>
        /// <param name="expressions">The expressions.</param>
        /// <returns></returns>
        private Dictionary <string, EvaluateResult> EvaluateExpressionsInternal(IEntity contextEntity, IDictionary <string, CalcEngineExpression> expressions)
        {
            var results = new Dictionary <string, EvaluateResult>();

            var contextEntityTypeId = new EntityRef(contextEntity.TypeIds.FirstOrDefault());

            foreach (var item in expressions)
            {
                string key = item.Key;

                try
                {
                    CalcEngineExpression expression = item.Value;

                    IExpression compiledExpression = CompileExpression(contextEntityTypeId, expression);
                    string      value = RunExpression(compiledExpression, contextEntity);

                    results[key] = new EvaluateResult
                    {
                        Value = value,
                        CompiledExpression = compiledExpression
                    };
                }
                catch (Exception ex)
                {
                    results[key] = new EvaluateResult
                    {
                        Error = ex.ToString()
                    };
                }
            }

            return(results);
        }
Пример #2
0
        public void ToString_OfNonEmptyEvaluateResult_ReturnsMessage()
        {
            var result = new EvaluateResult("avoid the " + "interning");

            var actual = result.ToString();

            Assert.AreEqual("avoid the interning", actual);
        }
Пример #3
0
        public void Equals_WithNull_ReturnsFalse()
        {
            var value = new EvaluateResult("");

            var condition = value.Equals(null);

            Assert.IsFalse(condition);
        }
Пример #4
0
        public void Equals_WithSameMessage_ReturnsTrue()
        {
            var expected = new EvaluateResult("avoid " + "interning");
            var actual   = new EvaluateResult("avoid" + " interning");

            var condition = expected.Equals(actual);

            Assert.IsTrue(condition);
        }
Пример #5
0
        public void OperatorNotEqual_WithSameMessages_ReturnsFalse()
        {
            var expected = new EvaluateResult("avoid " + "interning");
            var actual   = new EvaluateResult("avoid" + " interning");

            var condition = expected != actual;

            Assert.IsFalse(condition);
        }
        public void Print_WithNonEmptyResult_PrintsMessage()
        {
            var parser      = new Parser();
            var inputOutput = MakeInputOutput();
            var rte         = MakeRunTimeEnvironment(inputOutput);
            var repl        = new ReadEvaluatePrintLoop(rte, parser);
            var result      = new EvaluateResult("message");

            repl.Print(result);

            Assert.AreEqual("message", inputOutput.OutputStrings[0]);
        }
Пример #7
0
        protected override System.Drawing.Color GenerateColor(EvaluateResult er, int index)
        {
            Color c = Color.White;

            if (SecurityEventService.Instance.IsSecurityActionResultExisting(er.ResultGuid))
            {
                c = Color.FromArgb(SecurityEventService.Instance.GetSecurityActionResult(er.ResultGuid).BackgroundColor);
            }
            else
            {
                c = er.BackColor;
            }

            return(c);
        }
Пример #8
0
        public Task <EvaluateResult> EvaluateRoot(Guid permission)
        {
            if (!UseAuthorization ||
                _securityContext.IsAdministrator())
            {
                return(Task.FromResult(new EvaluateResult(Guid.Empty, permission, true, null)));
            }

            var defaultRule = _securityOptions
                              .DefaultSecurityRules
                              .First(x => x.Rule.Right == permission);

            var result = new EvaluateResult(
                Guid.Empty,
                permission,
                defaultRule.Rule.Type == RuleType.Allow,
                null);

            return(Task.FromResult(result));
        }
Пример #9
0
        /// <summary>
        ///     Gets the calculate engine eval response.
        /// </summary>
        /// <param name="expressionResults">The expression results.</param>
        /// <returns></returns>
        private CalcEngineEvalResponse GetCalcEngineEvalResponse(
            IDictionary <string, EvaluateResult> expressionResults)
        {
            var response = new CalcEngineEvalResponse {
                Results = new Dictionary <string, CalcEngineEvalResult>()
            };

            foreach (var kvp in expressionResults)
            {
                string         key    = kvp.Key;
                EvaluateResult result = kvp.Value;

                if (!string.IsNullOrWhiteSpace(result.Error))
                {
                    // Error result
                    var errorResult = new CalcEngineEvalResult
                    {
                        ErrorMessage = result.Error
                    };
                    response.Results[key] = errorResult;
                }
                else
                {
                    IExpression expression = result.CompiledExpression;

                    // Success Result
                    var successResult = new CalcEngineEvalResult
                    {
                        Value        = result.Value,
                        ResultType   = expression.ResultType.Type,
                        IsList       = expression.ResultType.IsList,
                        EntityTypeId = expression.ResultType.EntityTypeId
                    };

                    response.Results[key] = successResult;
                }
            }

            return(response);
        }
Пример #10
0
 public byte[] Evaluate(ref RemoteParamData paramsValue, out ProgramStatistics executeTime, ProcessCallInfo callInfo)
 {
     try
     {
         var          channel = GetServiceInterface();
         IAsyncResult result  = channel.BeginEvaluatePlan(PlanHandle, callInfo, paramsValue, null, null);
         result.AsyncWaitHandle.WaitOne();
         EvaluateResult evaluateResult = channel.EndEvaluatePlan(result);
         executeTime        = evaluateResult.ExecuteTime;
         _programStatistics = executeTime;
         paramsValue.Data   = evaluateResult.ParamData;
         return(evaluateResult.Result);
     }
     catch (FaultException <DataphorFault> fault)
     {
         throw DataphorFaultUtility.FaultToException(fault.Detail);
     }
     catch (CommunicationException ce)
     {
         ReportCommunicationError();
         throw new ServerException(ServerException.Codes.CommunicationFailure, ErrorSeverity.Environment, ce);
     }
 }
Пример #11
0
 protected static MockStatement MakeStatement(EvaluateResult result)
 {
     return(new MockStatement(result));
 }
Пример #12
0
 protected abstract string GenerateKey(EvaluateResult er);
Пример #13
0
 protected abstract string GenerateTitle(EvaluateResult er);
Пример #14
0
        public void EvaluateResult_WithFormat_StoresFormattedMessage()
        {
            var result = new EvaluateResult("{0}", "format");

            Assert.AreEqual("format", result.Message);
        }
Пример #15
0
        public void EvaluateResult_WithMessage_IsNotNone()
        {
            var result = new EvaluateResult("message");

            Assert.IsTrue(result != EvaluateResult.None);
        }
Пример #16
0
 protected abstract Color GenerateColor(EvaluateResult er, int index);
Пример #17
0
        public void EvaluateResult_WithMessage_StoresMessage()
        {
            var result = new EvaluateResult("message");

            Assert.AreEqual("message", result.Message);
        }
Пример #18
0
 public void EvaluateResult_WithNullMessage_ThrowsArgumentNullException()
 {
     var result = new EvaluateResult(null);
 }
Пример #19
0
 public MockStatement()
 {
     this.action = () => { };
     this.result = EvaluateResult.None;
 }
Пример #20
0
 public MockStatement(Action action)
 {
     this.action = action;
     this.result = EvaluateResult.None;
 }
Пример #21
0
 public MockStatement(EvaluateResult result)
 {
     this.action = () => { };
     this.result = result;
 }
Пример #22
0
 protected override System.Drawing.Color GenerateColor(EvaluateResult er, int index)
 {
     return(ColorsPool.Instance.GetColor(index));
 }
        public override void Execute(LogRecord record, ILogColumnService colSrv)
        {
            try
            {
                m_result.Clear();

                List <OperateParam> lstParams = new List <OperateParam>();

                foreach (SecurityEvent se in m_events)
                {
                    foreach (SecurityAction sa in se.SecurityActions)
                    {
                        if (sa.Conditions.Count <= 0)
                        {
                            continue;
                        }

                        bool result = true;

                        // 先检查是否满足关系要求
                        foreach (SecurityCondition condition in sa.Conditions)
                        {
                            if (!record.Items.ContainsKey(condition.SourceCol))
                            {
                                result = false;
                                break;
                            }

                            lstParams.Clear();

                            IRelation relation = RelationService.Instance.GetRelation(colSrv.GetLogColumn(condition.SourceCol).Type, condition.RelationName);

                            if (condition.IsUsingDestCol)
                            {
                                foreach (string s in condition.MultiValues)
                                {
                                    int colIndex = Convert.ToInt32(s);

                                    if (!record.Items.ContainsKey(colIndex))
                                    {
                                        result = false;
                                        goto NextAction;
                                    }

                                    lstParams.Add(new OperateParam(record.Items[colIndex].Conetent));
                                }
                            }
                            else
                            {
                                foreach (string s in condition.MultiValues)
                                {
                                    lstParams.Add(new OperateParam(s));
                                }
                            }

                            // 检测是否满足关系
                            if (!relation.Validate(lstParams))
                            {
                                result = false;
                            }
                            else
                            {
                                lstParams.Insert(0, new OperateParam(record.Items[condition.SourceCol].Conetent));
                                result = result && relation.Implement(lstParams);
                            }

                            if (!result)
                            {
                                break;
                            }
                        }

NextAction:

                        // 如果符合结果
                        if (result)
                        {
                            EvaluateResult er = new EvaluateResult(record.RecordGuid);
                            er.AppGuid    = record.AppGuid;
                            er.TableGuid  = record.TableGuid;
                            er.ActionName = sa.Name;
                            er.ActionGuid = sa.ActionGuid;
                            er.EventName  = se.Name;
                            er.EventGuid  = se.EventGuid;
                            er.ResultGuid = sa.ResultGuid;

                            m_result.Add(er);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("根据策略分析日志记录失败,错误消息为:" + ex.Message);
            }
        }