diff --git a/model/src/main/java/lcsb/mapviewer/model/map/MiriamType.java b/model/src/main/java/lcsb/mapviewer/model/map/MiriamType.java index 7868c90745dee3732ee7dd8a534d7c27741c6855..b39394717cbdf75620149e3e31987a4cae61824f 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/MiriamType.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/MiriamType.java @@ -22,692 +22,707 @@ import lcsb.mapviewer.model.map.species.Rna; */ @SuppressWarnings("unchecked") public enum MiriamType { - /** - * Brenda enzyme database: http://www.brenda-enzymes.org. - */ - BRENDA("BRENDA", // - "http://www.brenda-enzymes.org", // - new String[] { "urn:miriam:brenda" }, // - new Class<?>[] {}, "MIR:00100101"), // - - /** - * Chemical Abstracts Service database: http://commonchemistry.org. - */ - CAS("Chemical Abstracts Service", // - "http://commonchemistry.org", // - new String[] { "urn:miriam:cas" }, // - new Class<?>[] {}, "MIR:00000237"), // - - /** - * The Carbohydrate-Active Enzyme (CAZy) database: http://www.cazy.org/. - */ - CAZY("CAZy", // - "http://commonchemistry.org", // - new String[] { "urn:miriam:cazy" }, // - new Class<?>[] {}, "MIR:00000195"), // - - /** - * Consensus CDS: http://identifiers.org/ccds/. - */ - CCDS("Consensus CDS", // - "http://www.ncbi.nlm.nih.gov/CCDS/", // - new String[] { "urn:miriam:ccds" }, // - new Class<?>[] {}, "MIR:00000375"), // - - /** - * Chebi database: - * <a href = "http://www.ebi.ac.uk/chebi/">http://www.ebi.ac.uk/chebi/</a>. - */ - CHEBI("Chebi", // - "http://www.ebi.ac.uk/chebi/", // - new String[] { "urn:miriam:obo.chebi", "urn:miriam:chebi" }, // - new Class<?>[] { Chemical.class, Drug.class, }, "MIR:00000002", // - new Class<?>[] { Chemical.class }), // - - /** - * ChemSpider database: - * <a href = "http://www.chemspider.com/">http://www.chemspider.com/</a>. - */ - CHEMSPIDER("ChemSpider", // - "http://www.chemspider.com//", // - new String[] { "urn:miriam:chemspider" }, // - new Class<?>[] {}, "MIR:00000138"), // - - /** - * Chembl database: https://www.ebi.ac.uk/chembldb/. - */ - CHEMBL_COMPOUND("ChEMBL", // - "https://www.ebi.ac.uk/chembldb/", // - new String[] { "urn:miriam:chembl.compound" }, // - new Class<?>[] { Drug.class }, "MIR:00000084"), // - - /** - * Target in chembl database: https://www.ebi.ac.uk/chembldb/. - */ - CHEMBL_TARGET("ChEMBL target", // - "https://www.ebi.ac.uk/chembldb/", // - new String[] { "urn:miriam:chembl.target" }, // - new Class<?>[] { Protein.class, Complex.class }, "MIR:00000085"), // - - /** - * Clusters of Orthologous Groups: https://www.ncbi.nlm.nih.gov/COG/. - */ - COG("Clusters of Orthologous Groups", // - "https://www.ncbi.nlm.nih.gov/COG/", // - new String[] { "urn:miriam:cogs" }, // - new Class<?>[] { Reaction.class }, "MIR:00000296"), // - - /** - * Digital Object Identifier: http://www.doi.org/. - */ - DOI("Digital Object Identifier", // - "http://www.doi.org/", // - new String[] { "urn:miriam:doi" }, // - new Class<?>[] { Reaction.class }, "MIR:00000019"), // - - /** - * Drugbank database: http://www.drugbank.ca/. - */ - DRUGBANK("DrugBank", // - "http://www.drugbank.ca/", // - new String[] { "urn:miriam:drugbank" }, // - new Class<?>[] { Drug.class }, "MIR:00000102"), // - /** - * Drugbank targets: http://www.drugbank.ca/targets. - */ - DRUGBANK_TARGET_V4("DrugBank Target v4", // - "http://www.drugbank.ca/targets", // - new String[] { "urn:miriam:drugbankv4.target" }, // - new Class<?>[] {}, "MIR:00000528"), // - - /** - * Enzyme Nomenclature: http://www.enzyme-database.org/. - */ - EC("Enzyme Nomenclature", // - "http://www.enzyme-database.org/", // - new String[] { "urn:miriam:ec-code" }, // - new Class<?>[] { Protein.class, Complex.class }, "MIR:00000004"), // - - /** - * Ensembl: www.ensembl.org. - */ - ENSEMBL("Ensembl", // - "www.ensembl.org", // - new String[] { "urn:miriam:ensembl" }, // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000003"), // - - /** - * Ensembl Plants: http://plants.ensembl.org/. - */ - ENSEMBL_PLANTS("Ensembl Plants", // - "http://plants.ensembl.org/", // - new String[] { "urn:miriam:ensembl.plant" }, // - new Class<?>[] {}, "MIR:00000205"), // - - /** - * Entrez Gene: http://www.ncbi.nlm.nih.gov/gene. - */ - ENTREZ("Entrez Gene", // - "http://www.ncbi.nlm.nih.gov/gene", // - new String[] { "urn:miriam:ncbigene", "urn:miriam:entrez.gene" }, // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000069"), // - - /** - * Gene Ontology: http://amigo.geneontology.org/amigo. - */ - GO("Gene Ontology", // - "http://amigo.geneontology.org/amigo", // - new String[] { "urn:miriam:obo.go", "urn:miriam:go" }, // - new Class<?>[] { Phenotype.class, Compartment.class, Complex.class }, "MIR:00000022"), // - - /** - * HGNC: http://www.genenames.org. - */ - HGNC("HGNC", // - "http://www.genenames.org", // - new String[] { "urn:miriam:hgnc" }, // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000080", // - new Class<?>[] { Protein.class, Gene.class, Rna.class }), // - - /** - * HGNC symbol: http://www.genenames.org. - */ - HGNC_SYMBOL("HGNC Symbol", // - "http://www.genenames.org", // - new String[] { "urn:miriam:hgnc.symbol" }, // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000362", // - new Class<?>[] { Protein.class, Gene.class, Rna.class }), // - - /** - * HMDB: http://www.hmdb.ca/. - */ - HMDB("HMDB", // - "http://www.hmdb.ca/", // - "urn:miriam:hmdb", // - new Class<?>[] { Chemical.class, Drug.class, }, "MIR:00000051"), // - - /** - * InterPro: http://www.ebi.ac.uk/interpro/. - */ - INTERPRO("InterPro", // - "http://www.ebi.ac.uk/interpro/", // - new String[] { "urn:miriam:interpro" }, // - new Class<?>[] { Protein.class, Complex.class }, "MIR:00000011"), // - - /** - * KEGG Compound: http://www.genome.jp/kegg/ligand.html. - */ - KEGG_COMPOUND("Kegg Compound", // - "http://www.genome.jp/kegg/ligand.html", // - "urn:miriam:kegg.compound", // - new Class<?>[] { Chemical.class }, "MIR:00000013"), // - - /** - * KEGG Genes: http://www.genome.jp/kegg/genes.html. - */ - KEGG_GENES("Kegg Genes", // - "http://www.genome.jp/kegg/genes.html", // - new String[] { "urn:miriam:kegg.genes", "urn:miriam:kegg.genes:hsa" }, // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000070"), // - - /** - * KEGG Orthology: http://www.genome.jp/kegg/ko.html. - */ - KEGG_ORTHOLOGY("KEGG Orthology", // - "http://www.genome.jp/kegg/ko.html", // - new String[] { "urn:miriam:kegg.orthology" }, // - new Class<?>[] {}, "MIR:00000116"), // - - /** - * KEGG Pathway: http://www.genome.jp/kegg/pathway.html. - */ - KEGG_PATHWAY("Kegg Pathway", // - "http://www.genome.jp/kegg/pathway.html", // - "urn:miriam:kegg.pathway", // - new Class<?>[] { Reaction.class }, "MIR:00000012"), // - - /** - * KEGG Reaction: http://www.genome.jp/kegg/reaction/. - */ - KEGG_REACTION("Kegg Reaction", // - "http://www.genome.jp/kegg/reaction/", // - "urn:miriam:kegg.reaction", // - new Class<?>[] { Reaction.class }, "MIR:00000014"), // - - /** - * MeSH 2012: http://www.nlm.nih.gov/mesh/. - */ - MESH_2012("MeSH 2012", // - "http://www.nlm.nih.gov/mesh/", // - new String[] { "urn:miriam:mesh.2012", "urn:miriam:mesh" }, // - new Class<?>[] { Phenotype.class, Compartment.class, Complex.class }, "MIR:00000270"), // - - /** - * miRBase Sequence: http://www.mirbase.org/. - */ - MI_R_BASE_SEQUENCE("miRBase Sequence Database", // - "http://www.mirbase.org/", // - new String[] { "urn:miriam:mirbase" }, // - new Class<?>[] {}, "MIR:00000078"), // - - /** - * miRBase Mature Sequence: http://www.mirbase.org/. - */ - MI_R_BASE_MATURE_SEQUENCE("miRBase Mature Sequence Database", // - "http://www.mirbase.org/", // - new String[] { "urn:miriam:mirbase.mature" }, // - new Class<?>[] {}, "MIR:00000235"), // - - /** - * miRTaRBase Mature Sequence: http://mirtarbase.mbc.nctu.edu.tw/. - */ - MIR_TAR_BASE_MATURE_SEQUENCE("miRTarBase Mature Sequence Database", // - "http://mirtarbase.mbc.nctu.edu.tw/", // - new String[] { "urn:miriam:mirtarbase" }, // - new Class<?>[] {}, "MIR:00100739"), // - - /** - * Mouse Genome Database: http://www.informatics.jax.org/. - */ - MGD("Mouse Genome Database", // - "http://www.informatics.jax.org/", // - new String[] { "urn:miriam:mgd" }, // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000037"), // - - /** - * Online Mendelian Inheritance in Man: http://omim.org/. - */ - OMIM("Online Mendelian Inheritance in Man", // - "http://omim.org/", // - new String[] { "urn:miriam:omim" }, // - new Class<?>[] { Phenotype.class }, "MIR:00000016"), // - - /** - * PANTHER Family: http://www.pantherdb.org/. - */ - PANTHER("PANTHER Family", // - "http://www.pantherdb.org/", // - new String[] { "urn:miriam:panther.family", "urn:miriam:panther" }, // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000060"), // - - /** - * PDB: http://www.pdbe.org/. - */ - PDB("Protein Data Bank", // - "http://www.pdbe.org/", // - "urn:miriam:pdb", // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000020"), - - /** - * Protein Family Database: http://pfam.xfam.org/. - */ - PFAM("Protein Family Database", // - "http://pfam.xfam.org//", // - "urn:miriam:pfam", // - new Class<?>[] {}, "MIR:00000028"), // - - /** - * PharmGKB Pathways: http://www.pharmgkb.org/. - */ - PHARM("PharmGKB Pathways", // - "http://www.pharmgkb.org/", // - "urn:miriam:pharmgkb.pathways", // - new Class<?>[] {}, "MIR:00000089"), // - - /** - * PubChem-compound: http://pubchem.ncbi.nlm.nih.gov/. - */ - PUBCHEM("PubChem-compound", // - "http://pubchem.ncbi.nlm.nih.gov/", // - new String[] { "urn:miriam:pubchem.compound" }, // - new Class<?>[] { Chemical.class }, "MIR:00000034", // - new Class<?>[] { Chemical.class }), // - - /** - * PubChem-substance: http://pubchem.ncbi.nlm.nih.gov/. - */ - PUBCHEM_SUBSTANCE("PubChem-substance", // - "http://pubchem.ncbi.nlm.nih.gov/", // - new String[] { "urn:miriam:pubchem.substance" }, // - new Class<?>[] { Chemical.class }, "MIR:00000033", // - new Class<?>[] { Chemical.class }), // - - /** - * PubMed: http://www.ncbi.nlm.nih.gov/PubMed/. - */ - PUBMED("PubMed", // - "http://www.ncbi.nlm.nih.gov/PubMed/", // - new String[] { "urn:miriam:pubmed" }, // - new Class<?>[] { BioEntity.class }, "MIR:00000015", // - new Class<?>[] { Reaction.class }), // - - /** - * Reactome: http://www.reactome.org/. - */ - REACTOME("Reactome", // - "http://www.reactome.org/", // - "urn:miriam:reactome", // - new Class<?>[] { Reaction.class }, "MIR:00000018"), // - - /** - * RefSeq: http://www.ncbi.nlm.nih.gov/projects/RefSeq/. - */ - REFSEQ("RefSeq", // - "http://www.ncbi.nlm.nih.gov/projects/RefSeq/", // - "urn:miriam:refseq", // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000039"), - - /** - * SGD: http://www.yeastgenome.org/. - */ - SGD("Saccharomyces Genome Database", // - "http://www.yeastgenome.org/", // - "urn:miriam:sgd", // - new Class<?>[] {}, "MIR:00000023"), - - /** - * STITCH: http://stitch.embl.de/. - */ - STITCH("STITCH", // - "http://stitch.embl.de/", // - "urn:miriam:stitch", // - new Class<?>[] {}, "MIR:00100343"), - - /** - * STRING: http://string-db.org/. - */ - STRING("STRING", // - "http://string-db.org/", // - "urn:miriam:string", // - new Class<?>[] {}, "MIR:00000265"), - - /** - * The Arabidopsis Information Resource (TAIR) maintains a database of genetic - * and molecular biology data for the model higher plant Arabidopsis thaliana. - * The name of a Locus is unique and used by TAIR, TIGR, and MIPS: - * http://arabidopsis.org/index.jsp. - */ - TAIR_LOCUS("TAIR Locus", // - "http://arabidopsis.org/index.jsp", // - "urn:miriam:tair.locus", // - new Class<?>[] {}, "MIR:00000050"), - - /** - * Taxonomy: http://www.ncbi.nlm.nih.gov/taxonomy/. - */ - TAXONOMY("Taxonomy", // - "http://www.ncbi.nlm.nih.gov/taxonomy/", // - "urn:miriam:taxonomy", // - new Class<?>[] {}, "MIR:00000006"), - /** - * Toxicogenomic: Chemical: http://ctdbase.org/detail.go. - * http://ctdbase.org/detail.go - */ - TOXICOGENOMIC_CHEMICAL("Toxicogenomic Chemical", // - "http://ctdbase.org/", // - "urn:miriam:ctd.chemical", // - new Class<?>[] {}, "MIR:00000098"), // - - /** - * UniGene: http://www.ncbi.nlm.nih.gov/unigene. - */ - UNIGENE("UniGene", // - "http://www.ncbi.nlm.nih.gov/unigene", // - "urn:miriam:unigene", // - new Class<?>[] {}, "MIR:00000346"), - - /** - * Uniprot: http://www.uniprot.org/. - */ - UNIPROT("Uniprot", // - "http://www.uniprot.org/", // - "urn:miriam:uniprot", // - new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000005"), - - /** - * UniProt Isoform: http://www.uniprot.org/. - */ - UNIPROT_ISOFORM("UniProt Isoform", // - "http://www.uniprot.org/", // - "urn:miriam:uniprot.isoform", // - new Class<?>[] { Protein.class }, "MIR:00000388"), - - /** - * Unknown reference type... - */ - UNKNOWN("Unknown", // - null, // - new String[] {}, // - new Class<?>[] {}, null), - - /** - * Wikidata: https://www.wikidata.org/. - */ - WIKIDATA("Wikidata", // - "https://www.wikidata.org/", // - new String[] { "urn:miriam:wikidata" }, // - new Class<?>[] {}, "MIR:00000549"), // - - /** - * WikiPathways: http://www.wikipathways.org/. - */ - WIKIPATHWAYS("WikiPathways", // - "http://www.wikipathways.org/", // - new String[] { "urn:miriam:wikipathways" }, // - new Class<?>[] {}, "MIR:00000076"), // - - /** - * Wikipedia: http://en.wikipedia.org/wiki/Main_Page. - */ - WIKIPEDIA("Wikipedia (English)", // - "http://en.wikipedia.org/wiki/Main_Page", // / - new String[] { "urn:miriam:wikipedia.en" }, // - new Class<?>[] {}, "MIR:00000384"), - - /** - * WormBase: http://wormbase.bio2rdf.org/fct. - */ - WORM_BASE("WormBase", // - "http://wormbase.bio2rdf.org/fct", // / - new String[] { "urn:miriam:wormbase" }, // - new Class<?>[] {}, "MIR:00000027"); - - /** - * User friendly name. - */ - private String commonName; - - /** - * url to homepage of given resource type. - */ - private String dbHomepage; - - /** - * Identifier of the database in miriam registry. - */ - private String registryIdentifier; - - /** - * Valid uris to this resource. - */ - private List<String> uris = new ArrayList<String>(); - - /** - * Classes that can be annotated by this resource. - */ - private List<Class<? extends BioEntity>> validClass = new ArrayList<>(); - - /** - * When class from this list is marked as "require at least one annotation" then - * annotation of this type is valid. - */ - private List<Class<? extends BioEntity>> requiredClass = new ArrayList<>(); - - - /** - * Constructor that initialize enum object. - * - * @param dbHomePage - * homepage of the resource {@link #dbHomepage} - * @param commonName - * {@link #commonName} - * @param uris - * {@link #uris} - * @param classes - * {@link #validClass} - * @param registryIdentifier - * {@link #registryIdentifier} - */ - MiriamType(String commonName, String dbHomePage, String[] uris, Class<?>[] classes, String registryIdentifier) { - this(commonName, dbHomePage, uris, classes, registryIdentifier, new Class<?>[] {}); - } - - /** - * Constructor that initialize enum object. - * - * @param dbHomePage - * homepage of the resource {@link #dbHomepage} - * @param commonName - * {@link #commonName} - * @param uris - * {@link #uris} - * @param classes - * {@link #validClass} - * @param registryIdentifier - * {@link #registryIdentifier} - * @param requiredClasses - * {@link #requiredClasses} - */ - MiriamType(String commonName, String dbHomePage, String[] uris, Class<?>[] classes, String registryIdentifier, - Class<?>[] requiredClasses) { - this.commonName = commonName; - this.dbHomepage = dbHomePage; - for (String string : uris) { - this.uris.add(string); - } - for (Class<?> clazz : classes) { - this.validClass.add((Class<? extends BioEntity>) clazz); - } - for (Class<?> clazz : requiredClasses) { - this.requiredClass.add((Class<? extends BioEntity>) clazz); - } - this.registryIdentifier = registryIdentifier; - } - - /** - * Constructor that initialize enum object. - * - * @param dbHomePage - * homepage of the resource {@link #dbHomepage} - * @param commonName - * {@link #commonName} - * @param uri - * one of {@link #uris} - * @param registryIdentifier - * {@link #registryIdentifier} - * @param classes - * {@link #validClass} - */ - MiriamType(String commonName, String dbHomePage, String uri, Class<?>[] classes, String registryIdentifier) { - this(commonName, dbHomePage, new String[] { uri }, classes, registryIdentifier); - } - - /** - * - * @return {@link #commonName} - */ - public String getCommonName() { - return commonName; - } - - /** - * - * @return {@link #uris} - */ - public List<String> getUris() { - return uris; - } - - /** - * - * @return {@link #validClass} - */ - public List<Class<? extends BioEntity>> getValidClass() { - return validClass; - } - - /** - * Returns {@link MiriamType} associated with parameter uri address. - * - * @param uri - * uri to check - * @return {@link MiriamType} for given uri - */ - public static MiriamType getTypeByUri(String uri) { - for (MiriamType mt : MiriamType.values()) { - for (String string : mt.getUris()) { - if (string.equalsIgnoreCase(uri)) { - return mt; - } - } - } - return null; - } - - /** - * @return the dbHomepage - * @see #dbHomepage - */ - public String getDbHomepage() { - return dbHomepage; - } - - /** - * @return the registryIdentifier - * @see #registryIdentifier - */ - public String getRegistryIdentifier() { - return registryIdentifier; - } - - /** - * @return the requiredClass - * @see #requiredClass - */ - public List<Class<? extends BioEntity>> getRequiredClass() { - return requiredClass; - } - - /** - * Returns {@link MiriamType} associated with {@link #commonName}. - * - * @param string - * {@link #commonName} - * @return {@link MiriamType} for given name - */ - public static MiriamType getTypeByCommonName(String string) { - for (MiriamType mt : MiriamType.values()) { - if (string.equalsIgnoreCase(mt.getCommonName())) { - return mt; - } - } - return null; - } - - /** - * Transforms identifier into {@link MiriamData}. - * - * @param generalIdentifier - * identifier in the format NAME:IDENTIFIER. Where NAME is the name - * from {@link MiriamType#commonName} and IDENTIFIER is reasource - * identifier. - * @return {@link MiriamData} representing generalIdentifier, when identifier is - * invalid InvalidArgumentException is thrown - */ - public static MiriamData getMiriamDataFromIdentifier(String generalIdentifier) { - int index = generalIdentifier.indexOf(":"); - if (index < 0) { - throw new InvalidArgumentException("Identifier doesn't contain type"); - } - String type = generalIdentifier.substring(0, index); - String id = generalIdentifier.substring(index + 1); - for (MiriamType mt : MiriamType.values()) { - if (mt.getCommonName().equalsIgnoreCase(type)) { - return new MiriamData(MiriamRelationType.BQ_BIOL_IS_DESCRIBED_BY, mt, id); - } - } - throw new InvalidArgumentException("Unknown miriam type: " + type + " (id: " + id + ")"); - } - - /** - * Creates {@link MiriamData} from miriam uri. - * - * @param miriamUri - * miriam uri defining {@link MiriamData} - * @return {@link MiriamData} from miriam uri - */ - public static MiriamData getMiriamByUri(String miriamUri) { - // this hack is due to CellDesigner issue (CellDesigner incorectly handle - // with identifiers that have ":" inside resource ":" inside resource with - // "%3A" and also the last ":" - miriamUri = miriamUri.replace("%3A", ":"); - - String foundUri = ""; - MiriamType foundType = null; - - for (MiriamType type : MiriamType.values()) { - for (String uri : type.getUris()) { - if (miriamUri.startsWith(uri + ":")) { - if (uri.length() > foundUri.length()) { - foundType = type; - foundUri = uri; - } - } - } - } - if (foundType != null) { - return new MiriamData(foundType, miriamUri.substring(foundUri.length() + 1)); - } - throw new InvalidArgumentException("Invalid miriam uri: " + miriamUri); - } + + BiGG_COMPARTMENT("BiGG Compartment", // + "http://bigg.ucsd.edu/compartments/", // + new String[] { "urn:miriam:bigg.compartment" }, // + new Class<?>[] {}, "MIR:00000555"), // + + BiGG_METABOLITE("BiGG Metabolite", // + "http://bigg.ucsd.edu/universal/metabolites", // + new String[] { "urn:miriam:bigg.metabolite" }, // + new Class<?>[] {}, "MIR:00000556"), // + + BiGG_REACTIONS("BiGG Reaction", // + "http://bigg.ucsd.edu/universal/reactions", // + new String[] { "urn:miriam:bigg.reaction" }, // + new Class<?>[] {}, "MIR:00000557"), // + + /** + * Brenda enzyme database: http://www.brenda-enzymes.org. + */ + BRENDA("BRENDA", // + "http://www.brenda-enzymes.org", // + new String[] { "urn:miriam:brenda" }, // + new Class<?>[] {}, "MIR:00100101"), // + + /** + * Chemical Abstracts Service database: http://commonchemistry.org. + */ + CAS("Chemical Abstracts Service", // + "http://commonchemistry.org", // + new String[] { "urn:miriam:cas" }, // + new Class<?>[] {}, "MIR:00000237"), // + + /** + * The Carbohydrate-Active Enzyme (CAZy) database: http://www.cazy.org/. + */ + CAZY("CAZy", // + "http://commonchemistry.org", // + new String[] { "urn:miriam:cazy" }, // + new Class<?>[] {}, "MIR:00000195"), // + + /** + * Consensus CDS: http://identifiers.org/ccds/. + */ + CCDS("Consensus CDS", // + "http://www.ncbi.nlm.nih.gov/CCDS/", // + new String[] { "urn:miriam:ccds" }, // + new Class<?>[] {}, "MIR:00000375"), // + + /** + * Chebi database: + * <a href = "http://www.ebi.ac.uk/chebi/">http://www.ebi.ac.uk/chebi/</a>. + */ + CHEBI("Chebi", // + "http://www.ebi.ac.uk/chebi/", // + new String[] { "urn:miriam:obo.chebi", "urn:miriam:chebi" }, // + new Class<?>[] { Chemical.class, Drug.class, }, "MIR:00000002", // + new Class<?>[] { Chemical.class }), // + + /** + * ChemSpider database: + * <a href = "http://www.chemspider.com/">http://www.chemspider.com/</a>. + */ + CHEMSPIDER("ChemSpider", // + "http://www.chemspider.com//", // + new String[] { "urn:miriam:chemspider" }, // + new Class<?>[] {}, "MIR:00000138"), // + + /** + * Chembl database: https://www.ebi.ac.uk/chembldb/. + */ + CHEMBL_COMPOUND("ChEMBL", // + "https://www.ebi.ac.uk/chembldb/", // + new String[] { "urn:miriam:chembl.compound" }, // + new Class<?>[] { Drug.class }, "MIR:00000084"), // + + /** + * Target in chembl database: https://www.ebi.ac.uk/chembldb/. + */ + CHEMBL_TARGET("ChEMBL target", // + "https://www.ebi.ac.uk/chembldb/", // + new String[] { "urn:miriam:chembl.target" }, // + new Class<?>[] { Protein.class, Complex.class }, "MIR:00000085"), // + + /** + * Clusters of Orthologous Groups: https://www.ncbi.nlm.nih.gov/COG/. + */ + COG("Clusters of Orthologous Groups", // + "https://www.ncbi.nlm.nih.gov/COG/", // + new String[] { "urn:miriam:cogs" }, // + new Class<?>[] { Reaction.class }, "MIR:00000296"), // + + /** + * Digital Object Identifier: http://www.doi.org/. + */ + DOI("Digital Object Identifier", // + "http://www.doi.org/", // + new String[] { "urn:miriam:doi" }, // + new Class<?>[] { Reaction.class }, "MIR:00000019"), // + + /** + * Drugbank database: http://www.drugbank.ca/. + */ + DRUGBANK("DrugBank", // + "http://www.drugbank.ca/", // + new String[] { "urn:miriam:drugbank" }, // + new Class<?>[] { Drug.class }, "MIR:00000102"), // + /** + * Drugbank targets: http://www.drugbank.ca/targets. + */ + DRUGBANK_TARGET_V4("DrugBank Target v4", // + "http://www.drugbank.ca/targets", // + new String[] { "urn:miriam:drugbankv4.target" }, // + new Class<?>[] {}, "MIR:00000528"), // + + /** + * Enzyme Nomenclature: http://www.enzyme-database.org/. + */ + EC("Enzyme Nomenclature", // + "http://www.enzyme-database.org/", // + new String[] { "urn:miriam:ec-code" }, // + new Class<?>[] { Protein.class, Complex.class }, "MIR:00000004"), // + + /** + * Ensembl: www.ensembl.org. + */ + ENSEMBL("Ensembl", // + "www.ensembl.org", // + new String[] { "urn:miriam:ensembl" }, // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000003"), // + + /** + * Ensembl Plants: http://plants.ensembl.org/. + */ + ENSEMBL_PLANTS("Ensembl Plants", // + "http://plants.ensembl.org/", // + new String[] { "urn:miriam:ensembl.plant" }, // + new Class<?>[] {}, "MIR:00000205"), // + + /** + * Entrez Gene: http://www.ncbi.nlm.nih.gov/gene. + */ + ENTREZ("Entrez Gene", // + "http://www.ncbi.nlm.nih.gov/gene", // + new String[] { "urn:miriam:ncbigene", "urn:miriam:entrez.gene" }, // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000069"), // + + /** + * Gene Ontology: http://amigo.geneontology.org/amigo. + */ + GO("Gene Ontology", // + "http://amigo.geneontology.org/amigo", // + new String[] { "urn:miriam:obo.go", "urn:miriam:go" }, // + new Class<?>[] { Phenotype.class, Compartment.class, Complex.class }, "MIR:00000022"), // + + /** + * HGNC: http://www.genenames.org. + */ + HGNC("HGNC", // + "http://www.genenames.org", // + new String[] { "urn:miriam:hgnc" }, // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000080", // + new Class<?>[] { Protein.class, Gene.class, Rna.class }), // + + /** + * HGNC symbol: http://www.genenames.org. + */ + HGNC_SYMBOL("HGNC Symbol", // + "http://www.genenames.org", // + new String[] { "urn:miriam:hgnc.symbol" }, // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000362", // + new Class<?>[] { Protein.class, Gene.class, Rna.class }), // + + /** + * HMDB: http://www.hmdb.ca/. + */ + HMDB("HMDB", // + "http://www.hmdb.ca/", // + "urn:miriam:hmdb", // + new Class<?>[] { Chemical.class, Drug.class, }, "MIR:00000051"), // + + /** + * InterPro: http://www.ebi.ac.uk/interpro/. + */ + INTERPRO("InterPro", // + "http://www.ebi.ac.uk/interpro/", // + new String[] { "urn:miriam:interpro" }, // + new Class<?>[] { Protein.class, Complex.class }, "MIR:00000011"), // + + /** + * KEGG Compound: http://www.genome.jp/kegg/ligand.html. + */ + KEGG_COMPOUND("Kegg Compound", // + "http://www.genome.jp/kegg/ligand.html", // + "urn:miriam:kegg.compound", // + new Class<?>[] { Chemical.class }, "MIR:00000013"), // + + /** + * KEGG Genes: http://www.genome.jp/kegg/genes.html. + */ + KEGG_GENES("Kegg Genes", // + "http://www.genome.jp/kegg/genes.html", // + new String[] { "urn:miriam:kegg.genes", "urn:miriam:kegg.genes:hsa" }, // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000070"), // + + /** + * KEGG Orthology: http://www.genome.jp/kegg/ko.html. + */ + KEGG_ORTHOLOGY("KEGG Orthology", // + "http://www.genome.jp/kegg/ko.html", // + new String[] { "urn:miriam:kegg.orthology" }, // + new Class<?>[] {}, "MIR:00000116"), // + + /** + * KEGG Pathway: http://www.genome.jp/kegg/pathway.html. + */ + KEGG_PATHWAY("Kegg Pathway", // + "http://www.genome.jp/kegg/pathway.html", // + "urn:miriam:kegg.pathway", // + new Class<?>[] { Reaction.class }, "MIR:00000012"), // + + /** + * KEGG Reaction: http://www.genome.jp/kegg/reaction/. + */ + KEGG_REACTION("Kegg Reaction", // + "http://www.genome.jp/kegg/reaction/", // + "urn:miriam:kegg.reaction", // + new Class<?>[] { Reaction.class }, "MIR:00000014"), // + + /** + * MeSH 2012: http://www.nlm.nih.gov/mesh/. + */ + MESH_2012("MeSH 2012", // + "http://www.nlm.nih.gov/mesh/", // + new String[] { "urn:miriam:mesh.2012", "urn:miriam:mesh" }, // + new Class<?>[] { Phenotype.class, Compartment.class, Complex.class }, "MIR:00000270"), // + + /** + * miRBase Sequence: http://www.mirbase.org/. + */ + MI_R_BASE_SEQUENCE("miRBase Sequence Database", // + "http://www.mirbase.org/", // + new String[] { "urn:miriam:mirbase" }, // + new Class<?>[] {}, "MIR:00000078"), // + + /** + * miRBase Mature Sequence: http://www.mirbase.org/. + */ + MI_R_BASE_MATURE_SEQUENCE("miRBase Mature Sequence Database", // + "http://www.mirbase.org/", // + new String[] { "urn:miriam:mirbase.mature" }, // + new Class<?>[] {}, "MIR:00000235"), // + + /** + * miRTaRBase Mature Sequence: http://mirtarbase.mbc.nctu.edu.tw/. + */ + MIR_TAR_BASE_MATURE_SEQUENCE("miRTarBase Mature Sequence Database", // + "http://mirtarbase.mbc.nctu.edu.tw/", // + new String[] { "urn:miriam:mirtarbase" }, // + new Class<?>[] {}, "MIR:00100739"), // + + /** + * Mouse Genome Database: http://www.informatics.jax.org/. + */ + MGD("Mouse Genome Database", // + "http://www.informatics.jax.org/", // + new String[] { "urn:miriam:mgd" }, // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000037"), // + + /** + * Online Mendelian Inheritance in Man: http://omim.org/. + */ + OMIM("Online Mendelian Inheritance in Man", // + "http://omim.org/", // + new String[] { "urn:miriam:omim" }, // + new Class<?>[] { Phenotype.class }, "MIR:00000016"), // + + /** + * PANTHER Family: http://www.pantherdb.org/. + */ + PANTHER("PANTHER Family", // + "http://www.pantherdb.org/", // + new String[] { "urn:miriam:panther.family", "urn:miriam:panther" }, // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000060"), // + + /** + * PDB: http://www.pdbe.org/. + */ + PDB("Protein Data Bank", // + "http://www.pdbe.org/", // + "urn:miriam:pdb", // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000020"), + + /** + * Protein Family Database: http://pfam.xfam.org/. + */ + PFAM("Protein Family Database", // + "http://pfam.xfam.org//", // + "urn:miriam:pfam", // + new Class<?>[] {}, "MIR:00000028"), // + + /** + * PharmGKB Pathways: http://www.pharmgkb.org/. + */ + PHARM("PharmGKB Pathways", // + "http://www.pharmgkb.org/", // + "urn:miriam:pharmgkb.pathways", // + new Class<?>[] {}, "MIR:00000089"), // + + /** + * PubChem-compound: http://pubchem.ncbi.nlm.nih.gov/. + */ + PUBCHEM("PubChem-compound", // + "http://pubchem.ncbi.nlm.nih.gov/", // + new String[] { "urn:miriam:pubchem.compound" }, // + new Class<?>[] { Chemical.class }, "MIR:00000034", // + new Class<?>[] { Chemical.class }), // + + /** + * PubChem-substance: http://pubchem.ncbi.nlm.nih.gov/. + */ + PUBCHEM_SUBSTANCE("PubChem-substance", // + "http://pubchem.ncbi.nlm.nih.gov/", // + new String[] { "urn:miriam:pubchem.substance" }, // + new Class<?>[] { Chemical.class }, "MIR:00000033", // + new Class<?>[] { Chemical.class }), // + + /** + * PubMed: http://www.ncbi.nlm.nih.gov/PubMed/. + */ + PUBMED("PubMed", // + "http://www.ncbi.nlm.nih.gov/PubMed/", // + new String[] { "urn:miriam:pubmed" }, // + new Class<?>[] { BioEntity.class }, "MIR:00000015", // + new Class<?>[] { Reaction.class }), // + + /** + * Reactome: http://www.reactome.org/. + */ + REACTOME("Reactome", // + "http://www.reactome.org/", // + "urn:miriam:reactome", // + new Class<?>[] { Reaction.class }, "MIR:00000018"), // + + /** + * RefSeq: http://www.ncbi.nlm.nih.gov/projects/RefSeq/. + */ + REFSEQ("RefSeq", // + "http://www.ncbi.nlm.nih.gov/projects/RefSeq/", // + "urn:miriam:refseq", // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000039"), + + /** + * SGD: http://www.yeastgenome.org/. + */ + SGD("Saccharomyces Genome Database", // + "http://www.yeastgenome.org/", // + "urn:miriam:sgd", // + new Class<?>[] {}, "MIR:00000023"), + + /** + * STITCH: http://stitch.embl.de/. + */ + STITCH("STITCH", // + "http://stitch.embl.de/", // + "urn:miriam:stitch", // + new Class<?>[] {}, "MIR:00100343"), + + /** + * STRING: http://string-db.org/. + */ + STRING("STRING", // + "http://string-db.org/", // + "urn:miriam:string", // + new Class<?>[] {}, "MIR:00000265"), + + /** + * The Arabidopsis Information Resource (TAIR) maintains a database of genetic + * and molecular biology data for the model higher plant Arabidopsis thaliana. + * The name of a Locus is unique and used by TAIR, TIGR, and MIPS: + * http://arabidopsis.org/index.jsp. + */ + TAIR_LOCUS("TAIR Locus", // + "http://arabidopsis.org/index.jsp", // + "urn:miriam:tair.locus", // + new Class<?>[] {}, "MIR:00000050"), + + /** + * Taxonomy: http://www.ncbi.nlm.nih.gov/taxonomy/. + */ + TAXONOMY("Taxonomy", // + "http://www.ncbi.nlm.nih.gov/taxonomy/", // + "urn:miriam:taxonomy", // + new Class<?>[] {}, "MIR:00000006"), + /** + * Toxicogenomic: Chemical: http://ctdbase.org/detail.go. + * http://ctdbase.org/detail.go + */ + TOXICOGENOMIC_CHEMICAL("Toxicogenomic Chemical", // + "http://ctdbase.org/", // + "urn:miriam:ctd.chemical", // + new Class<?>[] {}, "MIR:00000098"), // + + /** + * UniGene: http://www.ncbi.nlm.nih.gov/unigene. + */ + UNIGENE("UniGene", // + "http://www.ncbi.nlm.nih.gov/unigene", // + "urn:miriam:unigene", // + new Class<?>[] {}, "MIR:00000346"), + + /** + * Uniprot: http://www.uniprot.org/. + */ + UNIPROT("Uniprot", // + "http://www.uniprot.org/", // + "urn:miriam:uniprot", // + new Class<?>[] { Protein.class, Gene.class, Rna.class }, "MIR:00000005"), + + /** + * UniProt Isoform: http://www.uniprot.org/. + */ + UNIPROT_ISOFORM("UniProt Isoform", // + "http://www.uniprot.org/", // + "urn:miriam:uniprot.isoform", // + new Class<?>[] { Protein.class }, "MIR:00000388"), + + /** + * Unknown reference type... + */ + UNKNOWN("Unknown", // + null, // + new String[] {}, // + new Class<?>[] {}, null), + + /** + * Wikidata: https://www.wikidata.org/. + */ + WIKIDATA("Wikidata", // + "https://www.wikidata.org/", // + new String[] { "urn:miriam:wikidata" }, // + new Class<?>[] {}, "MIR:00000549"), // + + /** + * WikiPathways: http://www.wikipathways.org/. + */ + WIKIPATHWAYS("WikiPathways", // + "http://www.wikipathways.org/", // + new String[] { "urn:miriam:wikipathways" }, // + new Class<?>[] {}, "MIR:00000076"), // + + /** + * Wikipedia: http://en.wikipedia.org/wiki/Main_Page. + */ + WIKIPEDIA("Wikipedia (English)", // + "http://en.wikipedia.org/wiki/Main_Page", // / + new String[] { "urn:miriam:wikipedia.en" }, // + new Class<?>[] {}, "MIR:00000384"), + + /** + * WormBase: http://wormbase.bio2rdf.org/fct. + */ + WORM_BASE("WormBase", // + "http://wormbase.bio2rdf.org/fct", // / + new String[] { "urn:miriam:wormbase" }, // + new Class<?>[] {}, "MIR:00000027"); + + /** + * User friendly name. + */ + private String commonName; + + /** + * url to homepage of given resource type. + */ + private String dbHomepage; + + /** + * Identifier of the database in miriam registry. + */ + private String registryIdentifier; + + /** + * Valid uris to this resource. + */ + private List<String> uris = new ArrayList<String>(); + + /** + * Classes that can be annotated by this resource. + */ + private List<Class<? extends BioEntity>> validClass = new ArrayList<>(); + + /** + * When class from this list is marked as "require at least one annotation" then + * annotation of this type is valid. + */ + private List<Class<? extends BioEntity>> requiredClass = new ArrayList<>(); + + /** + * Constructor that initialize enum object. + * + * @param dbHomePage + * homepage of the resource {@link #dbHomepage} + * @param commonName + * {@link #commonName} + * @param uris + * {@link #uris} + * @param classes + * {@link #validClass} + * @param registryIdentifier + * {@link #registryIdentifier} + */ + MiriamType(String commonName, String dbHomePage, String[] uris, Class<?>[] classes, String registryIdentifier) { + this(commonName, dbHomePage, uris, classes, registryIdentifier, new Class<?>[] {}); + } + + /** + * Constructor that initialize enum object. + * + * @param dbHomePage + * homepage of the resource {@link #dbHomepage} + * @param commonName + * {@link #commonName} + * @param uris + * {@link #uris} + * @param classes + * {@link #validClass} + * @param registryIdentifier + * {@link #registryIdentifier} + * @param requiredClasses + * {@link #requiredClasses} + */ + MiriamType(String commonName, String dbHomePage, String[] uris, Class<?>[] classes, String registryIdentifier, + Class<?>[] requiredClasses) { + this.commonName = commonName; + this.dbHomepage = dbHomePage; + for (String string : uris) { + this.uris.add(string); + } + for (Class<?> clazz : classes) { + this.validClass.add((Class<? extends BioEntity>) clazz); + } + for (Class<?> clazz : requiredClasses) { + this.requiredClass.add((Class<? extends BioEntity>) clazz); + } + this.registryIdentifier = registryIdentifier; + } + + /** + * Constructor that initialize enum object. + * + * @param dbHomePage + * homepage of the resource {@link #dbHomepage} + * @param commonName + * {@link #commonName} + * @param uri + * one of {@link #uris} + * @param registryIdentifier + * {@link #registryIdentifier} + * @param classes + * {@link #validClass} + */ + MiriamType(String commonName, String dbHomePage, String uri, Class<?>[] classes, String registryIdentifier) { + this(commonName, dbHomePage, new String[] { uri }, classes, registryIdentifier); + } + + /** + * + * @return {@link #commonName} + */ + public String getCommonName() { + return commonName; + } + + /** + * + * @return {@link #uris} + */ + public List<String> getUris() { + return uris; + } + + /** + * + * @return {@link #validClass} + */ + public List<Class<? extends BioEntity>> getValidClass() { + return validClass; + } + + /** + * Returns {@link MiriamType} associated with parameter uri address. + * + * @param uri + * uri to check + * @return {@link MiriamType} for given uri + */ + public static MiriamType getTypeByUri(String uri) { + for (MiriamType mt : MiriamType.values()) { + for (String string : mt.getUris()) { + if (string.equalsIgnoreCase(uri)) { + return mt; + } + } + } + return null; + } + + /** + * @return the dbHomepage + * @see #dbHomepage + */ + public String getDbHomepage() { + return dbHomepage; + } + + /** + * @return the registryIdentifier + * @see #registryIdentifier + */ + public String getRegistryIdentifier() { + return registryIdentifier; + } + + /** + * @return the requiredClass + * @see #requiredClass + */ + public List<Class<? extends BioEntity>> getRequiredClass() { + return requiredClass; + } + + /** + * Returns {@link MiriamType} associated with {@link #commonName}. + * + * @param string + * {@link #commonName} + * @return {@link MiriamType} for given name + */ + public static MiriamType getTypeByCommonName(String string) { + for (MiriamType mt : MiriamType.values()) { + if (string.equalsIgnoreCase(mt.getCommonName())) { + return mt; + } + } + return null; + } + + /** + * Transforms identifier into {@link MiriamData}. + * + * @param generalIdentifier + * identifier in the format NAME:IDENTIFIER. Where NAME is the name + * from {@link MiriamType#commonName} and IDENTIFIER is reasource + * identifier. + * @return {@link MiriamData} representing generalIdentifier, when identifier is + * invalid InvalidArgumentException is thrown + */ + public static MiriamData getMiriamDataFromIdentifier(String generalIdentifier) { + int index = generalIdentifier.indexOf(":"); + if (index < 0) { + throw new InvalidArgumentException("Identifier doesn't contain type"); + } + String type = generalIdentifier.substring(0, index); + String id = generalIdentifier.substring(index + 1); + for (MiriamType mt : MiriamType.values()) { + if (mt.getCommonName().equalsIgnoreCase(type)) { + return new MiriamData(MiriamRelationType.BQ_BIOL_IS_DESCRIBED_BY, mt, id); + } + } + throw new InvalidArgumentException("Unknown miriam type: " + type + " (id: " + id + ")"); + } + + /** + * Creates {@link MiriamData} from miriam uri. + * + * @param miriamUri + * miriam uri defining {@link MiriamData} + * @return {@link MiriamData} from miriam uri + */ + public static MiriamData getMiriamByUri(String miriamUri) { + // this hack is due to CellDesigner issue (CellDesigner incorectly handle + // with identifiers that have ":" inside resource ":" inside resource with + // "%3A" and also the last ":" + miriamUri = miriamUri.replace("%3A", ":"); + + String foundUri = ""; + MiriamType foundType = null; + + for (MiriamType type : MiriamType.values()) { + for (String uri : type.getUris()) { + if (miriamUri.startsWith(uri + ":")) { + if (uri.length() > foundUri.length()) { + foundType = type; + foundUri = uri; + } + } + } + } + if (foundType != null) { + return new MiriamData(foundType, miriamUri.substring(foundUri.length() + 1)); + } + throw new InvalidArgumentException("Invalid miriam uri: " + miriamUri); + } }