public override void Perform(Model sourceModel) { var makefile = (Makefile)sourceModel.RootElements[0]; if (ElementIndex >= makefile.Elements.Count) { ElementIndex = makefile.Elements.Count - 1; } var rule = makefile.Elements[ElementIndex] as IRule; while (rule == null && ElementIndex < makefile.Elements.Count - 1) { ElementIndex++; rule = makefile.Elements[ElementIndex] as IRule; } if (rule == null) { return; } var dependencyFileDep = new FileDep { ID = Id, Name = Name }; rule.Dependencies.Add(dependencyFileDep); }
public override void Perform(Model sourceModel) { var makefile = (IMakefile)sourceModel.RootElements[0]; var rule = new Rule { ID = IdRule, Name = NameRule }; var dependencyFileDep = new FileDep { ID = IdFileDep, Name = NameFileDep }; rule.Dependencies.Add(dependencyFileDep); var shellLine = new ShellLine { ID = IdShellLine, Command = CommandShellLine, Display = false }; rule.ShellLines.Add(shellLine); makefile.Elements.Add(rule); }
private static Model CopyMakeModel(Model sourceModel) { var targetModel = new Model(); var makefile = (Makefile)sourceModel.RootElements[0]; var newMakefile = new Makefile { ID = makefile.ID, Name = makefile.Name, Comment = new Comment() { ID = makefile.Comment.ID, Text = makefile.Comment.Text } }; foreach (var element in makefile.Elements) { if (element is Rule) { var rule = element as Rule; var newRule = new Rule { ID = rule.ID, Name = rule.Name }; foreach (var shellLine in rule.ShellLines) { var newShellLine = new ShellLine { ID = shellLine.ID, Display = shellLine.Display, Command = shellLine.Command }; newRule.ShellLines.Add(newShellLine); } foreach (var dependency in rule.Dependencies) { if (dependency is FileDep) { var fileDep = dependency as FileDep; var newFileDep = new FileDep { ID = fileDep.ID, Name = fileDep.Name }; newRule.Dependencies.Add(newFileDep); } } newMakefile.Elements.Add(newRule); } else if (element is Macro) { var macro = element as Macro; var newMacro = new Macro { ID = macro.ID, Name = macro.Name, Value = macro.Value }; newMakefile.Elements.Add(newMacro); } } targetModel.RootElements.Add(newMakefile); return(targetModel); }
public static Model GenerateMake(int numberOfElements) { var rand = new Random(); var rules = new List <Rule>(); int idCounter = 0; var model = new Model(); var makefile = new Makefile { ID = idCounter.ToString(), Name = "makefile name" }; model.RootElements.Add(makefile); idCounter++; var comment = new Comment { ID = idCounter.ToString(), Text = "comment text" + idCounter }; makefile.Comment = comment; idCounter++; //~10% macros for (int i = 0; i < (numberOfElements / 10); i++) { var macro = new Macro { ID = idCounter.ToString(), Name = "macro name" + idCounter, Value = "macro value" + idCounter }; idCounter++; makefile.Elements.Add(macro); } //~25% rules for (int i = 0; i < (numberOfElements / 4); i++) { var rule = new Rule { ID = idCounter.ToString(), Name = "RuleName" + idCounter }; idCounter++; rules.Add(rule); makefile.Elements.Add(rule); var dependencyFileDep = new FileDep { ID = idCounter.ToString(), Name = "fileName" + idCounter }; rule.Dependencies.Add(dependencyFileDep); idCounter++; var shellLine = new ShellLine { ID = idCounter.ToString(), Command = "command shell line " + idCounter }; var dice = rand.NextDouble(); shellLine.Display = dice > 0.5; rule.ShellLines.Add(shellLine); idCounter++; } for (int i = idCounter; i < numberOfElements; i++) { var ruleNumber = rand.Next(rules.Count - 1); var dice = rand.NextDouble(); if (dice < 0.5) { var shellLine = new ShellLine { ID = idCounter.ToString(), Command = "command shell line " + idCounter }; var displayDice = rand.NextDouble(); shellLine.Display = dice > 0.5; rules[ruleNumber].ShellLines.Add(shellLine); idCounter++; } else { var dependencyFileDep = new FileDep { ID = idCounter.ToString(), Name = "fileName" + idCounter }; rules[ruleNumber].Dependencies.Add(dependencyFileDep); idCounter++; } } return(model); }