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 }; }
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; }