/// <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);
        }
Пример #3
0
        /// <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");
        }