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);
        }
コード例 #2
0
        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);
        }