示例#1
0
        private static void UpdateNode([NotNull] Node node,
                                       IEnumerable <IFlowTemplate> templates, [NotNull] FlowTemplateRuleNode ruleNode)
        {
            var values   = templates?.Select(x => x.Name).ToArray();
            var selected = templates?.FirstOrDefault(x => x.Id == ruleNode.FlowTemplate)?.Name;

            if ((values?.Any() ?? false) && !string.IsNullOrWhiteSpace(selected))
            {
                UpdateNode(node, ruleNode.Name, null, null, values, selected);
            }
        }
示例#2
0
        public override SelectionRuleNode CreateNode([NotNull] Node node, params object[] parameters)
        {
            SelectionRuleNode result = null;

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

                if (flowTemplate != null)
                {
                    result = new FlowTemplateRuleNode(flowTemplate)
                    {
                        Scope = Scope
                    };
                }
            }

            return(result);
        }
示例#3
0
        private SelectionRuleNode GetIdComparisonRuleNode([Required] string id, Scope scope)
        {
            SelectionRuleNode result = null;

            var elementType = _source.ElementTypes?.FirstOrDefault(x => string.CompareOrdinal(x.TypeId, id) == 0);

            var entityTemplate = GetEntityTemplate(id);

            if (elementType?.IsGeneric ?? false)
            {
                switch (elementType.ElementType)
                {
                case ElementType.StencilRectangle:
                    result = new EnumValueRuleNode("Object Type", null, null,
                                                   new[] { "External Interactor", "Process", "Data Store" },
                                                   "External Interactor")
                    {
                        Scope = scope
                    };
                    break;

                case ElementType.StencilEllipse:
                    result = new EnumValueRuleNode("Object Type", null, null,
                                                   new[] { "External Interactor", "Process", "Data Store" },
                                                   "Process")
                    {
                        Scope = scope
                    };
                    break;

                case ElementType.StencilParallelLines:
                    result = new EnumValueRuleNode("Object Type", null, null,
                                                   new[] { "External Interactor", "Process", "Data Store" },
                                                   "Data Store")
                    {
                        Scope = scope
                    };
                    break;
                }
            }
            else if (entityTemplate != null)
            {
                switch (entityTemplate.EntityType)
                {
                case EntityType.ExternalInteractor:
                    result = new ExternalInteractorTemplateRuleNode(entityTemplate)
                    {
                        Scope = scope
                    };
                    break;

                case EntityType.Process:
                    result = new ProcessTemplateRuleNode(entityTemplate)
                    {
                        Scope = scope
                    };
                    break;

                case EntityType.DataStore:
                    result = new DataStoreTemplateRuleNode(entityTemplate)
                    {
                        Scope = scope
                    };
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            else
            {
                var flowTemplate = GetFlowTemplate(id);
                if (flowTemplate != null)
                {
                    result = new FlowTemplateRuleNode(flowTemplate);
                }
                else
                {
                    result = new ComparisonRuleNode(ObjectPropertySchemaManager.ThreatModelObjectId,
                                                    Resources.DefaultNamespace, Resources.TmtObjectPropertySchema,
                                                    ComparisonOperator.Exact, id)
                    {
                        Scope = scope
                    };
                }
            }



            return(result);
        }