public bool TryHandle(ITransformationContext transformationContext, JToken makro, string[] makroArguments) { if (makroArguments.Length != 2 || makroArguments[0] != "PATCH") { return(false); } JArray array = (JArray)makro.Parent; int index = array.IndexOf(makro); array.RemoveAt(index); string extensionToken = makroArguments[1]; IIncludeContext includeContext = transformationContext.GetPluginPolicy <IIncludeContext>(); ILogMessageSink logger = transformationContext.GetPluginPolicy <ILogMessageSink>(); IEnumerable <(IPolicyPatch, IEnumerable <JObject>)> basePatches = _patchCollector .GetBasePatches(transformationContext, includeContext, $"{extensionToken}.json") .Select(p => (p, p.GetPolicies())); foreach ((IPolicyPatch, IEnumerable <JObject>)patch in basePatches) { foreach (JObject policy in patch.Item2) { string sourceTerm = CreateSourceTerm(policy, patch.Item1.PatchSourcePath, "Base"); AppendPatchSource(policy, sourceTerm); logger.Message(sourceTerm); array.Insert(index, policy); index++; } } IEnumerable <IPolicyPatch> targetedPatches = _patchCollector .GetTargetedPatches(transformationContext, includeContext, $"{extensionToken}.json"); foreach (IPolicyPatch policy in targetedPatches) { ApplyPatch(logger, policy, array); } return(true); }
public void EvaluateMakros(ITransformationContext transformationContext, JArray documentObject) { transformationContext.GetPluginPolicy <ILogMessageSink>() .EnterBlock(logger => { transformationContext.SetPluginPolicy(logger); JToken makroToken = null; while ((makroToken = FindNextMakroToken(documentObject)) != null) { string makroValue = makroToken.Value <string>(); int startIndex = makroValue.IndexOf("{$"); makroValue = makroValue.Substring(startIndex); int endIndex = makroValue.IndexOf("}"); makroValue = makroValue.Substring(2, endIndex - 2); string[] makroArguments = makroValue.Split(" "); foreach (ITransformationEnginePlugin plugin in _enginePlugins) { if (!plugin.TryHandle(transformationContext, makroToken, makroArguments)) { continue; } break; } } }); }
public static bool PluginIncludeConditionDelegate(ITransformationContext context, JObject conditionNode) { TargetingInformation targetingInformation = context.GetPluginPolicy <TargetingInformation>(); JObject targetInformation = (JObject)conditionNode["targetInformation"]; bool canApply = true; if (targetInformation["targetStages"] != null) { canApply &= targetInformation["targetStages"] .Values <string>() .Contains(targetingInformation.Stage); } if (targetInformation["targetServers"] != null) { canApply &= targetInformation["targetServers"] .Values <string>() .Contains(targetingInformation.Server); } if (targetInformation["targetRoles"] != null) { canApply &= targetInformation["targetRoles"] .Values <string>() .Contains(targetingInformation.Role); } if (targetInformation["targetReplications"] != null) { if (string.IsNullOrEmpty(targetingInformation.Replication)) { return(false); } canApply &= targetInformation["targetReplications"] .Values <string>() .Contains(targetingInformation.Replication); } return(canApply); }
public bool TryHandle(ITransformationContext transformationContext, JToken makroToken, string[] makroArguments) { if (makroArguments.Length != 2 || makroArguments[0] != "TARGET") { return(false); } string makroString = makroToken.Value <string>(); makroString = makroString.Replace( $"{{${string.Join(' ', makroArguments)}}}", (string)targetingInformationProperties .Single(p => string.Equals(p.Name, makroArguments[1], StringComparison.CurrentCultureIgnoreCase)) .GetValue(transformationContext.GetPluginPolicy <TargetingInformation>())); makroToken.Replace(new JValue(makroString)); return(true); }