Ejemplo n.º 1
0
        /// <summary>
        /// Method called when the user clicks Ok button on InputSelectionDialog.
        /// Takes care of parsing the selections and returning the result to the user.
        /// In case there was an error parsing, it will show the input selection dialog again with the sequence highlighted.
        /// </summary>
        /// <param name="selectionDialog">InputSequenceDialog object which raised this event</param>
        private void OnInputSequenceDialogSubmit(ISelectionDialog dialog)
        {
            InputSelectionDialog     selectionDialog = dialog as InputSelectionDialog;
            List <ISequence>         parsedSequences = new List <ISequence>();
            List <Range>             rangesInCurrentSequenceItem;
            List <InputSequenceItem> sequenceItems = selectionDialog.GetSequences();

            try
            {
                foreach (InputSequenceItem currentSequenceItem in sequenceItems)
                {
                    try
                    {
                        rangesInCurrentSequenceItem = GetRanges(currentSequenceItem.SequenceAddress);
                        if (rangesInCurrentSequenceItem.Count > 0)
                        {
                            ISequence sequenceForCurrentItem;
                            sequenceForCurrentItem = SequenceCache.TryGetSequence(rangesInCurrentSequenceItem, selectionDialog.InputParamsAsKey) as ISequence; // get from cache
                            if (sequenceForCurrentItem == null)                                                                                                // if not in cache
                            {
                                sequenceForCurrentItem = ExcelSelectionParser.RangeToSequence(rangesInCurrentSequenceItem, selectionDialog.TreatBlankCellsAsGaps, selectionDialog.MoleculeType, currentSequenceItem.SequenceName);

                                SequenceCache.Add(rangesInCurrentSequenceItem, sequenceForCurrentItem, selectionDialog.InputParamsAsKey);
                            }
                            else
                            {
                                // Set the ID
                                sequenceForCurrentItem = SetSequenceID(sequenceForCurrentItem, currentSequenceItem.SequenceName);
                            }

                            parsedSequences.Add(sequenceForCurrentItem);
                        }
                        else
                        {
                            currentSequenceItem.SetErrorStatus(false);
                        }
                    }
                    catch
                    {
                        // Set error status on item and re-throw
                        currentSequenceItem.SetErrorStatus(true);
                        throw;
                    }
                }

                // On successful parsing...
                if (inputSequenceSelectionComplete != null)
                {
                    inputSequenceSelectionComplete(parsedSequences, this.argsForCallback);
                }
                selectionDialog.InputSelectionDialogSubmitting -= OnInputSequenceDialogSubmit;
                selectionDialog.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Resources.CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error);
                selectionDialog.ShowDialog();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Method called when the user clicks Ok button on InputSelectionDialog.
        /// Takes care of parsing the selections and returning the result to the user.
        /// In case there was an error parsing, it will show the input selection dialog again with the sequence highlighted.
        /// </summary>
        /// <param name="selectionDialog">InputSequenceDialog object which raised this event</param>
        private void OnExportSequenceDialogSubmit(ISelectionDialog dialog)
        {
            ExportSelectionDialog    selectionDialog = dialog as ExportSelectionDialog;
            List <ISequence>         parsedSequences = new List <ISequence>();
            List <Range>             rangesInCurrentSequenceItem;
            List <InputSequenceItem> sequenceItems = selectionDialog.GetSequences();
            ISequenceFormatter       formatterUsed = argsForCallback[0] as ISequenceFormatter;

            try
            {
                foreach (InputSequenceItem currentSequenceItem in sequenceItems)
                {
                    try
                    {
                        ISequence sequenceForCurrentItem = null;

                        // Parse sequence
                        if (formatterUsed is GffFormatter && string.IsNullOrWhiteSpace(currentSequenceItem.SequenceAddress))
                        {
                            sequenceForCurrentItem = new Sequence(Alphabets.DNA, "");
                        }
                        else
                        {
                            rangesInCurrentSequenceItem = GetRanges(currentSequenceItem.SequenceAddress);

                            if (rangesInCurrentSequenceItem.Count > 0)
                            {
                                // get from cache with default UI options.
                                sequenceForCurrentItem = SequenceCache.TryGetSequence(rangesInCurrentSequenceItem, selectionDialog.InputParamsAsKey) as ISequence;
                                if (sequenceForCurrentItem == null) // if not in cache
                                {
                                    sequenceForCurrentItem = ExcelSelectionParser.RangeToSequence(rangesInCurrentSequenceItem, selectionDialog.TreatBlankCellsAsGaps, selectionDialog.MoleculeType, currentSequenceItem.SequenceName);
                                    //added default from UI as auto detect and ignore space
                                    SequenceCache.Add(rangesInCurrentSequenceItem, sequenceForCurrentItem, selectionDialog.InputParamsAsKey);
                                }
                                else
                                {
                                    // Set the ID
                                    sequenceForCurrentItem = SetSequenceID(sequenceForCurrentItem, currentSequenceItem.SequenceName);
                                }
                            }
                            else
                            {
                                currentSequenceItem.SetErrorStatus(false);
                            }
                        }
                        //Parse metadata
                        if (formatterUsed is Bio.IO.FastQ.FastQFormatter)
                        {
                            rangesInCurrentSequenceItem = GetRanges(currentSequenceItem.MetadataAddress);
                            if (rangesInCurrentSequenceItem.Count > 0 && sequenceForCurrentItem != null)
                            {
                                sequenceForCurrentItem = ExcelSelectionParser.RangeToQualitativeSequence(rangesInCurrentSequenceItem, sequenceForCurrentItem);
                            }
                        }
                        else if (formatterUsed is GenBankFormatter)
                        {
                            rangesInCurrentSequenceItem = GetRanges(currentSequenceItem.MetadataAddress);
                            if (rangesInCurrentSequenceItem.Count > 0 && sequenceForCurrentItem != null)
                            {
                                try
                                {
                                    GenBankMetadata metadata = ExcelSelectionParser.RangeToGenBankMetadata(rangesInCurrentSequenceItem);
                                    sequenceForCurrentItem.Metadata[Helper.GenBankMetadataKey] = metadata;
                                    if (string.IsNullOrEmpty(sequenceForCurrentItem.ID))
                                    {
                                        // Set the ID
                                        sequenceForCurrentItem = SetSequenceID(sequenceForCurrentItem, metadata.Locus.Name);
                                    }
                                }
                                catch
                                {
                                    throw new Exception(Properties.Resources.GenbankMetadataParseError);
                                }
                            }
                        }
                        else if (formatterUsed is GffFormatter)
                        {
                            rangesInCurrentSequenceItem = GetRanges(currentSequenceItem.MetadataAddress);
                            if (rangesInCurrentSequenceItem.Count > 0 && sequenceForCurrentItem != null)
                            {
                                ExcelSelectionParser.RangeToGffMetadata(sequenceForCurrentItem, rangesInCurrentSequenceItem);
                            }
                        }

                        // Add the parsed sequence to the list of parsed sequences
                        parsedSequences.Add(sequenceForCurrentItem);
                    }
                    catch
                    {
                        // Set error status on item and re-throw
                        currentSequenceItem.SetErrorStatus(true);
                        throw;
                    }
                }

                // On successful parsing...
                if (inputSequenceSelectionComplete != null)
                {
                    inputSequenceSelectionComplete(parsedSequences, this.argsForCallback);
                }
                selectionDialog.InputSelectionDialogSubmitting -= OnInputSequenceDialogSubmit;
                selectionDialog.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Resources.CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error);
                selectionDialog.ShowDialog();
            }
        }