public Argument Extract(Cell cell, Parameter parameter, Command command)
        {
            if (!Regex.IsMatch(cell.Content, @"[@$=\(\)]"))
            {
                if (!Context.Arguments.Any(s => s.Name.Equals(cell.Content)
                    && s.Parameter.ParameterType.Equals(parameter.ParameterType)
                    && s.Command.Id == command.Id))
                {
                    var arg = new Argument
                    {
                        Name = cell.Content,
                        Parameter = parameter,
                        Command = command
                    };
                    return arg;
                }
                return (from a in Context.Arguments
                        where a.Name.Equals(cell.Content)
                              && a.Parameter.ParameterType.Equals(parameter.ParameterType)
                        select a).FirstOrDefault();
            }

            var pType = LatticeEnum.ParamterType.Call.ToString();
            return new Argument
            {
                Name = cell.Content,
                Parameter = (from p in Context.Parameters
                             where p.ParameterType.Equals(pType)
                             select p).FirstOrDefault(),
                Command = command,
                IsValid = false
            };
        }
Example #2
0
        public int Extract(Cell mainCell)
        {
            Logger.Info("Extracting Command");

            var commandText = mainCell.Content;

            var signature = Regex.Match(commandText, CallRegex).Groups[1].Value;

            var call = (from c in Context.Calls
                        where c.Signature.Equals(signature, StringComparison.InvariantCultureIgnoreCase)
                        select c).FirstOrDefault();

            if (call == null)
                return 0;

            var command = new Command();

            command.Arguments = new List<Argument>();

            command.Call = call;

            //var arguments = Regex.Match(commandText, @"@.*\((.*)\)").Groups[1].Value.Split(',');

            //int count = 0;
            //var transformer = new CellReferenceTransformer();

            //var parameters = (from p in Context.Parameters
            //                  where p.Call.Id == command.Call.Id
            //                  orderby p.Position
            //                  select p).ToList();

            //foreach (var parameter in parameters)
            //{
            //    var transformedArgument = transformer.Tranform(arguments[count]);

            //    foreach (var cell in Layout.Cells)
            //    {
            //        if (cell.Row == transformedArgument.Item1 && cell.Column == transformedArgument.Item2)
            //        {
            //            var extractor = new ArgumentExtractor(Context);
            //            var argument = extractor.Extract(cell, parameter, command);

            //            if (argument == null)
            //            {
            //                return 0;
            //            }

            //            command.Arguments.Add(argument);

            //            break;
            //        }
            //    }
            //    count++;
            //}

            command.Layout = Layout;
            command.Cell = mainCell;

            Context.Commands.Add(command);
            Context.SaveChanges();

            return 1;
        }