private void ImportElements([NotNull] ThreatModel source, [NotNull] IThreatModel target, out int externalInteractors, out int process, out int dataStore) { externalInteractors = 0; process = 0; dataStore = 0; var elements = source.Elements?.ToArray(); if (elements?.Any() ?? false) { var schemaManager = new EntitiesPropertySchemaManager(target); var schema = schemaManager.GetSchema(); foreach (var element in elements) { IEntity entity; switch (element.Value.ElementType) { case ElementType.StencilRectangle: entity = target.AddEntity <IExternalInteractor>(element.Value.Name); externalInteractors++; break; case ElementType.StencilEllipse: entity = target.AddEntity <IProcess>(element.Value.Name); process++; break; case ElementType.StencilParallelLines: entity = target.AddEntity <IDataStore>(element.Value.Name); dataStore++; break; default: entity = null; break; } if (entity != null) { schemaManager.SetMsTmtEntityId(entity, element.Key.ToString()); var properties = element.Value.Properties?.ToArray(); AddProperties(schema, entity, properties); IDiagram diagram = target.Diagrams?.FirstOrDefault(x => string.CompareOrdinal(x.Name, element.Value.Page) == 0); if (diagram == null) { diagram = target.AddDiagram(element.Value.Page); } diagram.AddEntityShape(entity.Id, new PointF(element.Value.Position.X * 2f, element.Value.Position.Y * 2f)); } } } }
public void Initialize([NotNull] IThreatModel model) { var entitiesPropertySchemaManager = new EntitiesPropertySchemaManager(model); entitiesPropertySchemaManager.GetSchema(); var dataFlowsPropertySchemaManager = new DataFlowsPropertySchemaManager(model); dataFlowsPropertySchemaManager.GetSchema(); var threatsPropertySchemaManager = new ThreatsPropertySchemaManager(model); threatsPropertySchemaManager.GetSchema(); }
private IEntity GetEntity([Required] string msEntityId, [NotNull] IThreatModel model, [NotNull] EntitiesPropertySchemaManager schemaManager) { IEntity result = null; var entities = model.Entities?.ToArray(); if (entities != null) { foreach (var entity in entities) { var id = schemaManager.GetMsTmtEntityId(entity); if (string.CompareOrdinal(id, msEntityId) == 0) { result = entity; break; } } } return(result); }
private int ImportDataFlows([NotNull] ThreatModel source, [NotNull] IThreatModel target) { int result = 0; var flows = source.Flows; if (flows?.Any() ?? false) { var entitiesSchemaManager = new EntitiesPropertySchemaManager(target); var dataFlowsSchemaManager = new DataFlowsPropertySchemaManager(target); var schema = dataFlowsSchemaManager.GetSchema(); foreach (var flow in flows) { var sourceEntity = GetEntity(flow.SourceGuid.ToString(), target, entitiesSchemaManager); var targetEntity = GetEntity(flow.TargetGuid.ToString(), target, entitiesSchemaManager); if (sourceEntity != null && targetEntity != null) { var dataFlow = target.AddDataFlow(flow.Name, sourceEntity.Id, targetEntity.Id); if (dataFlow != null) { dataFlowsSchemaManager.SetMsTmtDataFlowId(dataFlow, flow.FlowId.ToString()); var properties = flow.Properties?.ToArray(); AddProperties(schema, dataFlow, properties); } IDiagram diagram = target.Diagrams?.FirstOrDefault(x => string.CompareOrdinal(x.Name, flow.PageName) == 0); diagram?.AddLink(dataFlow); result++; } } } return(result); }