/// <summary> /// Parse a set of ISequenceRange objects into a SequenceRange /// grouping from a stream. /// </summary> public static SequenceRangeGrouping ParseRangeGrouping(this ISequenceRangeParser parser, string filename) { if (string.IsNullOrEmpty(filename)) { throw new ArgumentNullException("filename"); } using (FileStream fs = new FileStream(filename, FileMode.Open)) { return(parser.ParseRangeGrouping(fs)); } }
/// <summary> /// Gets all the registered ISequenceRangeParser types. /// </summary> /// <returns></returns> private static IEnumerable <ISequenceRangeParser> GetSequenceRangeParsers() { var registeredParsers = new List <ISequenceRangeParser>(); var implementations = BioRegistrationService.LocateRegisteredParts <ISequenceRangeParser>(); foreach (var impl in implementations) { try { ISequenceRangeParser parser = Activator.CreateInstance(impl) as ISequenceRangeParser; if (parser != null) { registeredParsers.Add(parser); } } catch { // Cannot create - no default ctor? } } return(registeredParsers); }
/// <summary> /// This method is called when the user wants to import a Range-Sequence file /// into excel. The user chooses a particular Sequence file which will /// be parsed by parsers available in our framework and is then imported /// into a excel file. /// </summary> /// <param name="parser">SequenceRangeParser instance.</param> /// <param name="fileName">Name of the file</param> private void ReadRangeSequence(ISequenceRangeParser parser, string fileName) { SequenceRangeGrouping rangeGroup = parser.ParseRangeGrouping(fileName); List<ISequenceRange> sequences = rangeGroup.Flatten(); if (sequences == null || sequences.Count == 0) { string strMessage = string.Format(Resources.PARSE_ERROR, Path.GetFileName(fileName), string.Empty); strMessage = strMessage.TrimEnd(" :".ToCharArray()); MessageBox.Show(strMessage, Resources.CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Workbook workBook = Globals.ThisAddIn.Application.ActiveWorkbook; var workSheet = workBook.Worksheets.Add( Type.Missing, workBook.Worksheets.get_Item(workBook.Worksheets.Count), Type.Missing, Type.Missing) as Worksheet; ((_Worksheet)workSheet).Activate(); Globals.ThisAddIn.Application.ActiveWindow.Zoom = ZoomLevel; string validName = this.GetValidFileNames(Path.GetFileNameWithoutExtension(fileName)); workSheet.Name = validName; int rowNumber = 2; int initialRowNumber = rowNumber; int columnNumber = 2; int maxColumnNumber = 13; foreach (string header in rangeHeaders) { Range range = workSheet.get_Range(GetColumnString(columnNumber) + rowNumber, Type.Missing); WriteRangeValue(range, header); columnNumber++; } rowNumber++; columnNumber = 2; Range activeSelectedRange = workSheet.get_Range(GetColumnString(columnNumber) + rowNumber, Missing.Value); activeSelectedRange = activeSelectedRange.get_Resize(sequences.Count, 12); var values = new object[sequences.Count, 12]; for (int i = 0; i < sequences.Count; i++) { ISequenceRange range = sequences[i]; values[i, 0] = range.ID; values[i, 1] = range.Start; values[i, 2] = range.End; values[i, 3] = ExtractRangeMetadata(range, Resources.BED_NAME); values[i, 4] = ExtractRangeMetadata(range, Resources.BED_SCORE); object value = ExtractRangeMetadata(range, Resources.BED_STRAND); if (value != null) { values[i, 5] = value.ToString(); } values[i, 6] = ExtractRangeMetadata(range, Resources.BED_THICK_START); values[i, 7] = ExtractRangeMetadata(range, Resources.BED_THICK_END); values[i, 8] = ExtractRangeMetadata(range, Resources.BED_ITEM_RGB); values[i, 9] = ExtractRangeMetadata(range, Resources.BED_BLOCK_COUNT); var strValue = ExtractRangeMetadata(range, Resources.BED_BLOCK_SIZES) as string; // As excel is not handling more than 4000 chars in a single cell. if (strValue != null && strValue.Length > 4000) { strValue = strValue.Substring(0, 4000); } values[i, 10] = strValue; strValue = ExtractRangeMetadata(range, Resources.BED_BLOCK_STARTS) as string; // As excel is not handling more than 4000 chars in a single cell. if (strValue != null && strValue.Length > 4000) { strValue = strValue.Substring(0, 4000); } values[i, 11] = strValue; rowNumber++; } activeSelectedRange.set_Value(Missing.Value, values); workSheet.Columns.AutoFit(); this.NormalizeColumWidths(workSheet.UsedRange); this.EnableAllControls(); var sb = new StringBuilder(); sb.Append("='"); sb.Append(workSheet.Name); sb.Append("'!"); sb.Append("$"); sb.Append(GetColumnString(columnNumber) + "$" + initialRowNumber); sb.Append(":$"); sb.Append(GetColumnString(maxColumnNumber) + "$" + (rowNumber - 1).ToString(CultureInfo.CurrentCulture)); string formula = sb.ToString(); Name dataWithHeader = workSheet.Names.Add( Resources.SEQUENCERANGEDATA_PRESELECTION + workSheet.Name, formula, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); dataWithHeader.RefersToRange.Select(); //added default from UI as auto detect and ignore space SequenceCache.Add(activeSelectedRange, rangeGroup, "_Auto Detect_NB"); }