Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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();
        }