コード例 #1
0
        public override SelectionRuleNode CreateNode([NotNull] Node node, params object[] parameters)
        {
            SelectionRuleNode result = null;

            if (parameters != null && parameters.Length == 1 && parameters[0] is string trustBoundaryTemplateName)
            {
                var trustBoundaryTemplate = _model?.TrustBoundaryTemplates?
                                            .FirstOrDefault(x => string.CompareOrdinal(x.Name, trustBoundaryTemplateName) == 0);

                if (trustBoundaryTemplate != null)
                {
                    result = new TrustBoundaryTemplateRuleNode(trustBoundaryTemplate)
                    {
                        Scope = Scope
                    };
                }
            }

            return(result);
        }
コード例 #2
0
        public override SelectionRuleNode VisitFlowExpression(TmtParser.FlowExpressionContext context)
        {
            SelectionRuleNode result = null;

            var id = context.right?.Text?.Trim('\'');

            if (!string.IsNullOrWhiteSpace(id))
            {
                switch (context.op?.GetText())
                {
                case "is":
                    result = GetIdComparisonRuleNode(id, Scope.Object);
                    break;

                case "crosses":
                    var template = GetTrustBoundaryTemplate(id);
                    if (template != null)
                    {
                        result = new TrustBoundaryTemplateRuleNode(template);
                    }
                    else
                    {
                        if (_source.ElementTypes?.Any(x => x.IsGeneric &&
                                                      (x.ElementType == ElementType.BorderBoundary || x.ElementType == ElementType.LineBoundary) &&
                                                      string.CompareOrdinal(x.TypeId, id) == 0) ?? false)
                        {
                            result = new CrossTrustBoundaryRuleNode("Crosses Trust Boundary", true);
                        }
                    }
                    break;
                }

                if (Rule == null)
                {
                    Rule = result;
                }
            }

            return(result);
        }
コード例 #3
0
        private static void UpdateNode([NotNull] Node node,
                                       IEnumerable <ITrustBoundaryTemplate> templates, [NotNull] TrustBoundaryTemplateRuleNode ruleNode)
        {
            var values   = templates?.Select(x => x.Name).ToArray();
            var selected = templates?.FirstOrDefault(x => x.Id == ruleNode.TrustBoundaryTemplate)?.Name;

            if ((values?.Any() ?? false) && !string.IsNullOrWhiteSpace(selected))
            {
                UpdateNode(node, ruleNode.Name, null, null, values, selected, "crosses");
            }
        }