public TaxonomyDetail(FwControllerContext fwControllerContext) { this.InitializeComponent(); this.DataContext = this; this.GenerateTaxonomyTree(fwControllerContext); this.OnPropertyChanged("CategoryTaxonomies"); this.OnPropertyChanged("SelectedTaxonomyProtocol"); }
public void GenerateTaxonomyTree(FwControllerContext fwControllerContext, ConversationVm conversation = null) { this._taxonomies = new List <TaxonomyCategory>(); NBAR2TaxonomyProtocol[] nbarTaxonomies; if (conversation == null) { var nbarDb = fwControllerContext.FwController.GetNbarProtocolPortDatabase(); nbarTaxonomies = nbarDb.Nbar2Taxonomy.NBAR2TaxonomyProtocol; } else { nbarTaxonomies = fwControllerContext.FwController.GetNbarTaxonomiesProtocolFromAppTags(conversation.Conversation.ApplicationTags); } foreach (var nbarTaxonomy in nbarTaxonomies) { var attributes = nbarTaxonomy.attributes.FirstOrDefault(); if (attributes != null) { var category = this._taxonomies.FirstOrDefault(taxonomyCategory => taxonomyCategory.Name == attributes.category); if (category == null) { category = new TaxonomyCategory { Name = attributes.category, Protocols = new List <TaxonomyProtocol>(), SubCategories = new List <TaxonomyCategory>() }; this._taxonomies.Add(category); } var subCategory = category.SubCategories.FirstOrDefault(taxonomyCategory => taxonomyCategory.Name == attributes.subcategory); if (subCategory == null) { subCategory = new TaxonomyCategory { Name = attributes.subcategory, Protocols = new List <TaxonomyProtocol>(), SubCategories = new List <TaxonomyCategory>() }; category.SubCategories.Add(subCategory); } var applicationGroup = subCategory.SubCategories.FirstOrDefault(taxonomyCategory => taxonomyCategory.Name == attributes.applicationgroup); if (applicationGroup == null) { applicationGroup = new TaxonomyCategory { Name = attributes.applicationgroup, Protocols = new List <TaxonomyProtocol>(), SubCategories = new List <TaxonomyCategory>() }; subCategory.SubCategories.Add(applicationGroup); } var taxProto = new TaxonomyProtocol { Name = nbarTaxonomy.name, CommonName = nbarTaxonomy.commonname, Description = nbarTaxonomy.helpstring, Encrypted = attributes.encrypted, Tunnel = attributes.tunnel, UnderLyingProtocols = nbarTaxonomy.underlyingprotocols }; foreach (var port in nbarTaxonomy.ports) { if (!string.IsNullOrEmpty(port.tcp)) { taxProto.Ports += string.Format("TCP:{0} ", port.tcp); } if (!string.IsNullOrEmpty(port.udp)) { taxProto.Ports += string.Format("UDP:{0} ", port.udp); } } applicationGroup.Protocols.Add(taxProto); } } }