/// <summary> /// Introduces a new change order and execute it /// </summary> public void RecordTagByDescription(string tag, bool exclude) { var changeOrder = new ChangeOrder(); changeOrder.Parameters = SelectedChainNames.Select(x => x.Name).ToArray(); changeOrder.Tag = tag; changeOrder.Type = ChangeOrderType.TagByDescription; changeOrder.ExcludeAlreadyTagged = exclude; _ChangeOrders.Add(changeOrder); ExecuteChangeOrder(changeOrder); }
/// <summary> /// Execute the change order, assigning tags as required /// </summary> void ExecuteChangeOrder(ChangeOrder order) { int affectedItems = 0; Log("Executing {0} | Excl:{1} Params:{2} Tag:{3}", order.Type, order.ExcludeAlreadyTagged, string.Join(", ", order.Parameters), order.Tag); if (order.Type == ChangeOrderType.TagByChainId) { foreach (var item in ProteinDB.Where(x => order.Parameters.Contains(x.ChainId))) { if (!string.IsNullOrWhiteSpace(order.Tag) || !order.ExcludeAlreadyTagged) { item.Tag = order.Tag; affectedItems++; } } } else if (order.Type == ChangeOrderType.TagByDescription) { foreach (var item in ProteinDB.Where(x => order.Parameters.Contains(x.Description))) { if (!string.IsNullOrWhiteSpace(order.Tag) || !order.ExcludeAlreadyTagged) { item.Tag = order.Tag; affectedItems++; } } } else if (order.Type == ChangeOrderType.TagByTag) { if (order.ExcludeAlreadyTagged) { throw new InvalidOperationException("Change Order TagByTag can not exclude already tagged chains"); } foreach (var item in ProteinDB.Where(x => order.Parameters.Contains(x.Description))) { item.Tag = order.Tag; affectedItems++; } } else { throw new NotImplementedException("Change Order not implemented"); } Log("Afected {0} chains", affectedItems); BuildChainNames(); }