private int ImportEntityTemplates([NotNull] ThreatModel source, [NotNull] IThreatModel target) { int result = 0; var elements = source.ElementTypes? .Where(x => !x.IsGeneric) .ToArray(); if (elements?.Any() ?? false) { var schemaManager = new ObjectPropertySchemaManager(target); IEntityTemplate entityTemplate; ITrustBoundaryTemplate trustBoundaryTemplate; Interfaces.Scope scope; IPropertySchema baseSchema; var baseEISchema = new BaseExternalInteractorPropertySchemaManager(target).GetSchema(); var basePSchema = new BaseProcessPropertySchemaManager(target).GetSchema(); var baseDSSchema = new BaseDataStorePropertySchemaManager(target).GetSchema(); var baseTBSchema = new BaseTrustBoundaryPropertySchemaManager(target).GetSchema(); foreach (var element in elements) { switch (element.ElementType) { case ElementType.StencilRectangle: entityTemplate = target.AddEntityTemplate(element.Name, element.Description, element.Image, element.Image, element.Image, EntityType.ExternalInteractor); trustBoundaryTemplate = null; scope = Scope.ExternalInteractor; baseSchema = baseEISchema; result++; break; case ElementType.StencilEllipse: entityTemplate = target.AddEntityTemplate(element.Name, element.Description, element.Image, element.Image, element.Image, EntityType.Process); trustBoundaryTemplate = null; scope = Scope.Process; baseSchema = basePSchema; result++; break; case ElementType.StencilParallelLines: entityTemplate = target.AddEntityTemplate(element.Name, element.Description, element.Image, element.Image, element.Image, EntityType.DataStore); trustBoundaryTemplate = null; scope = Scope.DataStore; baseSchema = baseDSSchema; result++; break; case ElementType.LineBoundary: case ElementType.BorderBoundary: entityTemplate = null; trustBoundaryTemplate = target.AddTrustBoundaryTemplate(element.Name, element.Description); scope = Scope.TrustBoundary; baseSchema = baseTBSchema; result++; break; default: entityTemplate = null; trustBoundaryTemplate = null; scope = Scope.Undefined; baseSchema = null; break; } if (entityTemplate != null) { InitializeBaseSchema(entityTemplate, baseSchema); schemaManager.SetObjectId(entityTemplate, element.TypeId); var properties = element.Properties?.ToArray(); AddProperties(target, element.Name, scope, baseSchema, entityTemplate, properties); } else if (trustBoundaryTemplate != null) { InitializeBaseSchema(trustBoundaryTemplate, baseSchema); schemaManager.SetObjectId(trustBoundaryTemplate, element.TypeId); var properties = element.Properties?.ToArray(); AddProperties(target, element.Name, scope, baseSchema, trustBoundaryTemplate, properties); } } } return(result); }