Beispiel #1
0
        private StringBuilder GenerateRelationOtherTypesEnum(string indent)
        {
            var enumData = new StringBuilder();

            AppendLine(enumData, indent + "/// <summary>Enum listing all relationships between CV terms used in the included CVs</summary>");
            AppendLine(enumData, indent + "public enum " + RelationsOtherTypesEnumName + " : int");
            AppendLine(enumData, indent + "{");

            var dict       = new Dictionary <string, OBO_Typedef>();
            var unknownDef = new OBO_Typedef {
                Def = "Unknown term relationship"
            };

            dict.Add("Unknown", unknownDef);
            foreach (var obo in _allObo)
            {
                foreach (var typedef in obo.Typedefs.Values)
                {
                    // Remove all duplicates, and automatically create new items....
                    dict[typedef.Id] = typedef;
                }
            }
            // part_of sets are separate.
            if (dict.ContainsKey("part_of"))
            {
                dict.Remove("part_of");
            }
            foreach (var item in dict)
            {
                if (!string.IsNullOrWhiteSpace(item.Value.Def))
                {
                    AppendLine(enumData, indent + "    /// " + EscapeXmlEntities("summary", item.Value.DefShort));
                }
                else
                {
                    AppendLine(enumData, indent + "    /// <summary>Description not provided</summary>");
                }
                if (!string.IsNullOrWhiteSpace(item.Value.Comment))
                {
                    AppendLine(enumData, indent + "    /// " + EscapeXmlEntities("remarks", item.Value.Comment));
                }
                AppendLine(enumData, indent + "    " + item.Key + ",");
                AppendLine(enumData);
            }

            enumData.AppendFormat("{0}}}", indent);
            return(enumData);
        }
Beispiel #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);
            }
        }