/// <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(); } }
/// <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(); } }