private void RunMacros(JProperty macro, JObject variablesSection, IParameterSet parameters) { RunnableProjectGenerator.ParameterSet set = (RunnableProjectGenerator.ParameterSet)parameters; string variableName = macro.Name; JObject def = (JObject)macro.Value; switch (def["type"].ToString()) { case "guid": HandleGuidAction(variableName, def, set); break; case "random": HandleRandomAction(variableName, def, set); break; case "now": HandleNowAction(variableName, def, set); break; case "evaluate": HandleEvaluateAction(variableName, variablesSection, def, set); break; case "constant": HandleConstantAction(variableName, def, set); break; case "regex": HandleRegexAction(variableName, variablesSection, def, set); break; } }
private static void HandleConstantAction(string variableName, JObject def, RunnableProjectGenerator.ParameterSet parameters) { string value = def["action"].ToString(); Parameter p = new Parameter { IsVariable = true, Name = variableName }; parameters.AddParameter(p); parameters.ParameterValues[p] = value; }
private static void HandleGuidAction(string variableName, JObject def, RunnableProjectGenerator.ParameterSet parameters) { switch (def["action"].ToString()) { case "new": string fmt = def["format"]?.ToString(); if (fmt != null) { Guid g = Guid.NewGuid(); string value = char.IsUpper(fmt[0]) ? g.ToString(fmt[0].ToString()).ToUpperInvariant() : g.ToString(fmt[0].ToString()).ToLowerInvariant(); Parameter p = new Parameter { IsVariable = true, Name = variableName }; parameters.AddParameter(p); parameters.ParameterValues[p] = value; } else { Guid g = Guid.NewGuid(); const string guidFormats = "ndbpxNDPBX"; for (int i = 0; i < guidFormats.Length; ++i) { Parameter p = new Parameter { IsVariable = true, Name = variableName + "-" + guidFormats[i] }; string rplc = char.IsUpper(guidFormats[i]) ? g.ToString(guidFormats[i].ToString()).ToUpperInvariant() : g.ToString(guidFormats[i].ToString()).ToLowerInvariant(); parameters.AddParameter(p); parameters.ParameterValues[p] = rplc; } Parameter pd = new Parameter { IsVariable = true, Name = variableName }; parameters.AddParameter(pd); parameters.ParameterValues[pd] = g.ToString("D"); } break; } }
private static void HandleNowAction(string variableName, JObject def, RunnableProjectGenerator.ParameterSet parameters) { string format = def["action"]?.ToString(); bool utc = bool.Parse(def["utc"]?.ToString() ?? "False"); DateTime time = utc ? DateTime.UtcNow : DateTime.Now; string value = time.ToString(format); Parameter p = new Parameter { IsVariable = true, Name = variableName }; parameters.AddParameter(p); parameters.ParameterValues[p] = value; }
private static void HandleRandomAction(string variableName, JObject def, RunnableProjectGenerator.ParameterSet parameters) { switch (def["action"].ToString()) { case "new": int low = int.Parse(def["low"]?.ToString() ?? "0"); int high = int.Parse(def["high"]?.ToString() ?? int.MaxValue.ToString()); Random rnd = new Random(); int val = rnd.Next(low, high); string value = val.ToString(); Parameter p = new Parameter { IsVariable = true, Name = variableName }; parameters.AddParameter(p); parameters.ParameterValues[p] = value; break; } }
private void HandleEvaluateAction(string variableName, JObject variablesSection, JObject def, RunnableProjectGenerator.ParameterSet parameters) { ConditionEvaluator evaluator = CppStyleEvaluatorDefinition.CppStyleEvaluator; VariableCollection vars = HandleVariables(parameters, variablesSection, null, true); switch (def["evaluator"]?.ToString() ?? "C++") { case "C++": evaluator = CppStyleEvaluatorDefinition.CppStyleEvaluator; break; } byte[] data = Encoding.UTF8.GetBytes(def["action"].ToString()); int len = data.Length; int pos = 0; IProcessorState state = new ProcessorState(vars, data, Encoding.UTF8); bool res = evaluator(state, ref len, ref pos); Parameter p = new Parameter { IsVariable = true, Name = variableName }; parameters.AddParameter(p); parameters.ParameterValues[p] = res.ToString(); }
private void HandleRegexAction(string variableName, JObject variablesSection, JObject def, RunnableProjectGenerator.ParameterSet parameters) { VariableCollection vars = HandleVariables(parameters, variablesSection, null, true); string action = def["action"]?.ToString(); string value = null; switch (action) { case "replace": string sourceVar = def["source"]?.ToString(); JArray steps = def["steps"] as JArray; object working; if (!vars.TryGetValue(sourceVar, out working)) { ITemplateParameter param; if (!parameters.TryGetParameter(sourceVar, out param) || !parameters.ParameterValues.TryGetValue(param, out value)) { value = string.Empty; } } else { value = working?.ToString() ?? ""; } if (steps != null) { foreach (JToken child in steps) { JObject map = (JObject)child; string regex = map["regex"]?.ToString(); string replaceWith = map["replacement"]?.ToString(); value = Regex.Replace(value, regex, replaceWith); } } break; } Parameter p = new Parameter { IsVariable = true, Name = variableName }; parameters.AddParameter(p); parameters.ParameterValues[p] = value; }