private static IEnumerable <IPropertySchema> GetSchemas([NotNull] IThreatModel model, IEnumerable <IProperty> properties) { IEnumerable <IPropertySchema> result = null; if (properties?.Any() ?? false) { List <IPropertySchema> list = new List <IPropertySchema>(); foreach (var property in properties) { var propertyType = model.GetPropertyType(property.PropertyTypeId); if (propertyType != null) { var schema = model.GetSchema(propertyType.SchemaId); if (schema != null && !list.Contains(schema)) { list.Add(schema); } } } if (list.Count > 0) { result = list.Where(x => x.Visible) .OrderByDescending(x => x.Priority) .ThenByDescending(x => x.Name); } } return(result); }
private static void CleanProperties(this IPropertiesContainer container, [NotNull] IThreatModel model) { var properties = container?.Properties?.ToArray(); if (properties?.Any() ?? false) { foreach (var property in properties) { var propertyType = model.GetPropertyType(property.PropertyTypeId); if (propertyType == null) { container.RemoveProperty(property.PropertyTypeId); } } } }
private void AddSchemas([NotNull] List <Guid> schemas, IEnumerable <IEnumerable <IProperty> > listProps) { var listPropsArray = listProps?.ToArray(); if (listPropsArray?.Any() ?? false) { foreach (var listProp in listPropsArray) { var props = listProp?.ToArray(); if (props?.Any() ?? false) { foreach (var prop in props) { var propertyType = _model.GetPropertyType(prop.PropertyTypeId); if (propertyType != null) { if (!schemas.Contains(propertyType.SchemaId) && !(_model.GetSchema(propertyType.SchemaId)?.NotExportable ?? true)) { schemas.Add(propertyType.SchemaId); } if ((_extractors?.Any() ?? false) && prop is IPropertyJsonSerializableObject jsonProperty) { foreach (var extractor in _extractors) { var extractedSchemas = extractor.GetPropertySchemas(jsonProperty)?.ToArray(); if (extractedSchemas?.Any() ?? false) { foreach (var schema in extractedSchemas) { if (!schema.NotExportable && !schemas.Contains(schema.Id)) { schemas.Add(schema.Id); } } } } } } } } } } }