/// <summary> /// returns an array of exons given a list of ObjectValues (AbstractData) /// </summary> public static MutableExon[] ParseList(IImportNode importNode, IChromosome chromosome) { var listMembers = importNode.GetListMembers(); if (listMembers == null) { throw new InvalidDataException("Encountered an exon node that could not be converted to a member list."); } var exons = new MutableExon[listMembers.Count]; for (var exonIndex = 0; exonIndex < listMembers.Count; exonIndex++) { if (listMembers[exonIndex] is ObjectValueNode objectValue) { exons[exonIndex] = Parse(objectValue, chromosome); } else { throw new InvalidDataException($"Could not transform the AbstractData object into an ObjectValue: [{listMembers[exonIndex].GetType()}]"); } } return(exons); }
/// <summary> /// returns an array of miRNAs given a list of ObjectValues (AbstractData) /// </summary> public static (IInterval[] MicroRnas, IRnaEdit[] RnaEdits, bool CdsStartNotFound, bool CdsEndNotFound) ParseList( IImportNode importNode) { var listMembers = importNode.GetListMembers(); if (listMembers == null) { throw new InvalidDataException("Encountered an attribute node that could not be converted to a member list."); } var microRnaList = new List <IInterval>(); var rnaEditList = new List <IRnaEdit>(); var cdsStartNotFound = false; var cdsEndNotFound = false; foreach (var node in listMembers) { if (!(node is ObjectValueNode objectValue)) { throw new InvalidDataException($"Could not transform the AbstractData object into an ObjectValue: [{node.GetType()}]"); } (var key, var value) = ParseKeyValue(objectValue); if (key == null) { continue; } // ReSharper disable once SwitchStatementMissingSomeCases switch (key) { case "miRNA": microRnaList.Add(GetInterval(value)); break; case "_rna_edit": rnaEditList.Add(GetRnaEdit(value)); break; case "cds_start_NF": cdsStartNotFound = true; break; case "cds_end_NF": cdsEndNotFound = true; break; } } var microRnas = microRnaList.Count == 0 ? null : microRnaList.ToArray(); var rnaEdits = rnaEditList.Count == 0 ? null : rnaEditList.ToArray(); return(microRnas, rnaEdits, cdsStartNotFound, cdsEndNotFound); }