Example #1
0
        private void PopulateCVEnumData()
        {
            // WARNING: '-' must be at beginning or end, in middle it must be escaped, or it is interpreted as a range
            var invalidSymbols = @" @/[():^?*+<=!~`#$%&{}|;'.,>\";

            var invalidSymbolsEscaped = System.Text.RegularExpressions.Regex.Escape(invalidSymbols);

            // add all whitespace matching, manually escape the ']', since above call doesn't
            var invalidSymbolsRegex = @"[\]\s" + invalidSymbolsEscaped + "\\-\\\"]";

            // Add "CVID_Unknown" to the list first
            var unknown = new OBO_Term
            {
                Id         = "??:0000000",
                Name       = "CVID_Unknown",
                EnumName   = "CVID_Unknown",
                Def        = "CVID_Unknown [Unknown]",
                IsObsolete = false
            };

            _cvEnumData.Add("CVID_Unknown", unknown);
            _cvMapData.Add("??", new Dictionary <string, OBO_Term>()
            {
                { "CVID_Unknown", unknown }
            });

            const string obsolete = "_OBSOLETE";

            foreach (var obo in _allObo)
            {
                var id     = obo.Id;
                var parent = new Dictionary <string, OBO_Term>();
                _cvMapData.Add(id, parent);

                foreach (var term in obo.Terms.Values)
                {
                    var name = id + "_";
                    if (!string.IsNullOrWhiteSpace(term.Id_Namespace))
                    {
                        name = term.Id_Namespace + "_";
                    }
                    //name += term.Name.Replace(' ', '_');
                    name += System.Text.RegularExpressions.Regex.Replace(term.Name, invalidSymbolsRegex, "_");
                    //name += System.Text.RegularExpressions.Regex.Replace(term.Name.Replace(' ', '_'), invalidSymbolsRegex, "_");
                    if (term.IsObsolete)
                    {
                        name += obsolete;
                    }
                    var tName   = name;
                    var counter = 0;
                    while (_cvEnumData.ContainsKey(name))
                    {
                        counter++;
                        name = tName + counter;
                    }
                    _cvEnumData.Add(name, term);
                    parent.Add(name, term);
                    term.EnumName = name;
                }
            }
        }
Example #2
0
        public void Read(string url)
        {
            Console.WriteLine("Downloading data from " + url);

            var fileData = (new WebClient()).DownloadString(url);

            FileData = new OBO_File(url);
            using (var reader = new StringReader(fileData))
            {
                var line = reader.ReadLine();
                while (string.IsNullOrWhiteSpace(line) && line != null)
                {
                    line = reader.ReadLine();
                }

                var type = "header";
                var data = new List <KeyValuePair <string, string> >();
                while (reader.Peek() != -1 && !string.IsNullOrWhiteSpace(line))
                {
                    if (line.StartsWith("["))
                    {
                        type = line;

                        line = reader.ReadLine();
                        while (string.IsNullOrWhiteSpace(line) && line != null)
                        {
                            line = reader.ReadLine();
                        }
                    }
                    data.Clear();
                    while (!string.IsNullOrWhiteSpace(line) && !line.StartsWith("["))
                    {
                        var keyStop    = line.IndexOf(':');
                        var valueStart = line[keyStop + 1] == ' ' ? keyStop + 2 : keyStop + 1;
                        data.Add(new KeyValuePair <string, string>(line.Substring(0, keyStop), line.Substring(valueStart)));

                        line = reader.ReadLine();
                        while (string.IsNullOrWhiteSpace(line) && line != null)
                        {
                            line = reader.ReadLine();
                        }
                    }

                    switch (type.ToLower())
                    {
                    case "header":
                        FileData.Header = new OBO_Header(data);
                        break;

                    case "[term]":
                        var term = new OBO_Term(data);
                        if (FileData.Terms.ContainsKey(term.Id))
                        {
                            Console.WriteLine("Warning: Duplicate term id found");
                            Console.WriteLine("\tFirst term: \t\"" + FileData.Terms[term.Id].Id + "\": \"" +
                                              FileData.Terms[term.Id].Def + "\".");
                            Console.WriteLine("\tConflict term: \t\"" + term.Id + "\": \"" + term.Def + "\".");
                            Console.WriteLine("\tChanging conflict id to \"" + term.Id + "_\"");
                            term.Id += "_";
                        }
                        FileData.Terms.Add(term.Id, term);
                        break;

                    case "[typedef]":
                        var typeDef = new OBO_Typedef(data);
                        FileData.Typedefs.Add(typeDef.Id, typeDef);
                        break;

                    case "[instance]":
                        var instance = new OBO_Instance(data);
                        FileData.Instances.Add(instance.Id, instance);
                        break;
                    }
                }
            }

            if (FileData.Terms.Count > 0)
            {
                var namespaces = FileData.Terms.Values.Select(x => x.Id_Namespace).Distinct();
                foreach (var ns in namespaces)
                {
                    if (FileData.IsGeneratedId)
                    {
                        FileData.Id = ns;
                    }
                    else if (!FileData.Id.Equals(ns))
                    {
                        FileData.AdditionalNamespaces.Add(ns);
                    }
                }
            }

            foreach (var import in FileData.Header.Import)
            {
                var reader = new OBO_Reader();
                reader.Read(import);
                ImportedFileData.Add(reader.FileData);
                ImportedFileData.AddRange(reader.ImportedFileData);
            }
        }