Example #1
0
        public IScript Create(string script, Element proc)
        {
            List <string> parameters = null;
            string        param      = Utility.GetParameter(script);

            int numParams;

            if (param == null)
            {
                numParams = 0;
            }
            else
            {
                parameters = Utility.SplitParameter(param);
                numParams  = parameters.Count;
            }

            if (ExpectedParameters.Count() > 0)
            {
                if (!ExpectedParameters.Contains(numParams))
                {
                    throw new Exception(string.Format("Expected {0} parameter(s)", FormatExpectedParameters(), script));
                }
            }

            if (!RequireProcedure)
            {
                return(CreateInt(parameters));
            }
            else
            {
                return(CreateInt(parameters, proc));
            }
        }
Example #2
0
        public override CommandOutput Run(Context context, IEnumerable <string> parameters)
        {
            var action      = (string)ExpectedParameters.ElementAt(0).Convert(parameters.ElementAt(0));
            var actionParam = parameters.Count() > 1 ?
                              (string)ExpectedParameters.ElementAt(1).Convert(parameters.ElementAt(1)) :
                              string.Empty;

            switch (action.ToLower())
            {
            case "peek": return(PeekMacro(actionParam));

            case "record": return(RecordMacro(actionParam));

            case "run": return(RunMacro(actionParam, context));

            case "save": return(SaveMacro(context));

            case "cancel": return(CancelMacro(context));

            case "status": return(GetMacroStatus());

            case "list": return(ListMacros(context));

            case "delete": return(DeleteMacro(actionParam));

            default:
                return(new CommandOutput($"unknown action '{action}'", false));
            }
        }
Example #3
0
        public IScript Create(string script, ScriptContext scriptContext)
        {
            List <string> parameters = null;
            string        param      = Utility.GetParameter(script);

            int numParams;

            if (param == null)
            {
                numParams = 0;
            }
            else
            {
                parameters = Utility.SplitParameter(param);
                numParams  = parameters.Count;
            }

            if (ExpectedParameters.Count() > 0)
            {
                if (!ExpectedParameters.Contains(numParams))
                {
                    throw new Exception(string.Format("Expected {0} parameter(s) in script '{1}'", FormatExpectedParameters(), script));
                }
            }

            return(CreateInt(parameters, scriptContext));
        }
        private bool AreItemsEqual(object[] items)
        {
            List <Type> list = ExpectedParameters.ToList();

            foreach (var item in items)
            {
                Type itemType = item.GetType();
                (bool rmFlag, Type rmType) = FindType(itemType, list);

                if (rmFlag)
                {
                    list.Remove(rmType);
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }
Example #5
0
        private void BuildOrderByNode(EqlOrderByNode orderByNode, ParseTreeNode parseTreeNode)
        {
            //first 2 nodes are keywords ORDER BY
            var orderbyListNode = parseTreeNode.ChildNodes[2].ChildNodes;

            foreach (var orderMemberNode in orderbyListNode)
            {
                string fieldName = string.Empty;
                var    direction = "ASC";
                if (orderMemberNode.ChildNodes[0].ChildNodes[0].Token.ValueString == "@")                 //argument
                {
                    var paramName = "@" + orderMemberNode.ChildNodes[0].ChildNodes[1].Token.ValueString;
                    if (!ExpectedParameters.Contains(paramName))
                    {
                        ExpectedParameters.Add(paramName);
                    }
                    var param = Parameters.SingleOrDefault(x => x.ParameterName == paramName);
                    if (param == null)
                    {
                        throw new EqlException($"ORDER BY: Parameter '{paramName}' not found.");
                    }

                    fieldName = (param.Value ?? string.Empty).ToString();
                    if (string.IsNullOrWhiteSpace(fieldName))
                    {
                        throw new EqlException($"ORDER BY: Invalid order field name in parameter '{paramName}'");
                    }
                }
                else
                {
                    fieldName = orderMemberNode.ChildNodes[0].ChildNodes[0].Token.ValueString;
                }

                if (orderMemberNode.ChildNodes.Count > 1 && orderMemberNode.ChildNodes[1].ChildNodes.Count > 0)
                {
                    if (orderMemberNode.ChildNodes[1].ChildNodes[0].ChildNodes.Count > 0 &&
                        orderMemberNode.ChildNodes[1].ChildNodes[0].ChildNodes[0].Token.ValueString == "@")
                    {
                        var paramName = "@" + orderMemberNode.ChildNodes[1].ChildNodes[0].ChildNodes[1].Token.ValueString;
                        if (!ExpectedParameters.Contains(paramName))
                        {
                            ExpectedParameters.Add(paramName);
                        }
                        var param = Parameters.SingleOrDefault(x => x.ParameterName == paramName);
                        if (param == null)
                        {
                            throw new EqlException($"ORDER BY: Parameter '{paramName}' not found.");
                        }

                        direction = (param.Value ?? string.Empty).ToString();
                        if (string.IsNullOrWhiteSpace(direction))
                        {
                            throw new EqlException($"ORDER BY: Invalid order direction in parameter '{paramName}'");
                        }

                        direction = direction.ToUpper();

                        if (!(direction == "ASC" || direction == "DESC"))
                        {
                            throw new EqlException($"ORDER BY: Invalid direction '{direction}'");
                        }
                    }
                    else
                    {
                        direction = orderMemberNode.ChildNodes[1].ChildNodes[0].Token.ValueString.ToUpper();
                    }
                }

                orderByNode.Fields.Add(new EqlOrderByFieldNode {
                    FieldName = fieldName, Direction = direction
                });
            }
        }
Example #6
0
        private void BuildSelectTree(EqlSelectNode selectNode, ParseTreeNode parseTreeNode)
        {
            foreach (var parseNode in parseTreeNode.ChildNodes)
            {
                switch (parseNode.Term.Name.ToLowerInvariant())
                {
                case "select":                         //select keyword - ignore it
                    continue;

                case "column_item_list":
                    BuildSelectFieldList(selectNode.Fields, parseNode);
                    continue;

                case "from_clause":
                    selectNode.From = new EqlFromNode {
                        EntityName = parseNode.ChildNodes[1].ChildNodes[0].Token.ValueString
                    };
                    continue;

                case "where_clause_optional":
                    if (parseNode.ChildNodes.Count == 0)
                    {
                        continue;
                    }
                    selectNode.Where = new EqlWhereNode();
                    BuildWhereNode(selectNode.Where, parseNode);
                    continue;

                case "order_clause_optional":
                    if (parseNode.ChildNodes.Count == 0)
                    {
                        continue;
                    }
                    selectNode.OrderBy = new EqlOrderByNode();
                    BuildOrderByNode(selectNode.OrderBy, parseNode);
                    continue;

                case "page_clause_optional":
                {
                    if (parseNode.ChildNodes.Count == 0)
                    {
                        continue;
                    }

                    selectNode.Page = new EqlPageNode();
                    var termType = parseNode.ChildNodes[1].Term.Name.ToLowerInvariant();
                    switch (termType)
                    {
                    case "argument":
                    {
                        string paramName = "@" + parseNode.ChildNodes[1].ChildNodes[1].Token.ValueString;
                        if (!ExpectedParameters.Contains(paramName))
                        {
                            ExpectedParameters.Add(paramName);
                        }
                        var param = Parameters.SingleOrDefault(x => x.ParameterName == paramName);
                        if (param == null)
                        {
                            throw new EqlException($"PAGE: Parameter '{paramName}' not found.");
                        }

                        int number;
                        if (!Int32.TryParse((param.Value ?? string.Empty).ToString(), out number))
                        {
                            throw new EqlException($"PAGE: Invalid parameter '{paramName}' value '{param.Value}'.");
                        }

                        selectNode.Page.Number = number;
                    }
                    break;

                    case "number":
                        selectNode.Page.Number = Convert.ToDecimal(parseNode.ChildNodes[1].Token.ValueString);
                        break;

                    default:
                        throw new EqlException("Invalid PAGE argument.");
                    }
                }
                    continue;

                case "pagesize_clause_optional":
                {
                    if (parseNode.ChildNodes.Count == 0)
                    {
                        continue;
                    }

                    selectNode.PageSize = new EqlPageSizeNode();
                    var termType = parseNode.ChildNodes[1].Term.Name.ToLowerInvariant();
                    switch (termType)
                    {
                    case "argument":
                    {
                        string paramName = "@" + parseNode.ChildNodes[1].ChildNodes[1].Token.ValueString;
                        if (!ExpectedParameters.Contains(paramName))
                        {
                            ExpectedParameters.Add(paramName);
                        }
                        var param = Parameters.SingleOrDefault(x => x.ParameterName == paramName);
                        if (param == null)
                        {
                            throw new EqlException($"PAGESIZE: Parameter '{paramName}' not found.");
                        }

                        int number;
                        if (!Int32.TryParse((param.Value ?? string.Empty).ToString(), out number))
                        {
                            throw new EqlException($"PAGESIZE: Invalid parameter '{paramName}' value '{param.Value}'.");
                        }

                        selectNode.PageSize.Number = number;
                    }
                    break;

                    case "number":
                        selectNode.PageSize.Number = Convert.ToDecimal(parseNode.ChildNodes[1].Token.ValueString);
                        break;

                    default:
                        throw new EqlException("PAGESIZE: Invalid syntax.");
                    }
                }
                    continue;

                default:
                    throw new EqlException("Unknown term in select command syntax parse tree.");
                }
            }
        }
Example #7
0
 public MeanFilterImplementation()
 {
     ExpectedParameters.Add("maskSize");
 }
 public bool CanInvoke <TKey>(TKey key, Type expectedReturnType = null, params object[] parameters)
 => ExpectedKeyType == key.GetType() &&
 _Key.Equals(key) &&
 expectedReturnType == ExpectedReturnType &&
 ExpectedParameters.Count() == parameters.Count() &&
 AreItemsEqual(parameters);
Example #9
0
 public Binarization()
 {
     ExpectedParameters.Add("threshold");
 }