Example #1
0
        private ISsrsObjectRewriter BuildReplacementRule(ReplacementRuleDef def)
        {
            var filter = PathFilter.ParseGlob(def.Filter) ?? PathFilter.MatchAll;

            switch (def.Target)
            {
            case "DataSet.DataSourceReference":
                return(new SsrsDataSetDataSourceReferenceRewriter(filter, def.Replacement));

            default:
                throw new FormatException($"Unrecognised replacement target: {def.Target}");
            }
        }
Example #2
0
        public ISsrsObjectRewriter Parse(string rule)
        {
            var replacementRule = rxReplacementRule.Match(rule);

            if (replacementRule.Success)
            {
                var def = new ReplacementRuleDef {
                    Target      = replacementRule.Groups["target"].Value,
                    Filter      = replacementRule.Groups["filter"].Success ? replacementRule.Groups["filter"].Value : null,
                    Replacement = replacementRule.Groups["replacement"].Value
                };
                if (def.Filter == null && def.Replacement.StartsWith("{"))
                {
                    // Possible typo in the rule, eg '...:{SomePattern=Replacement'.
                    throw new FormatException("Filter must be specified if replacement value starts with '{'.");
                }
                return(BuildReplacementRule(def));
            }

            throw new FormatException($"Rewrite rule could not be parsed: '{rule}'");
        }