package uk.ac.ebi.ep.centralservice.helper;
/**
* Databases included in the mega-map (or encountered in some way during the
* process of building it).
*
* @author rafa
*
*/
public enum MmDatabase {
Agricola("Agricola citation"),
ArrayExpressAtlas,
BRENDA,
Beilstein("Beilstein Registry Number"),
BioModels,
CAS("CAS Registry Number"),
COMe,
ChEBI,
ChEMBL("ChEMBL COMPOUND", "ChEMBL-Compound"),
ChEMBL_Activity("ChEMBL-Activity"),
ChEMBL_Target("ChEMBL.Target"),
Chinese_Abstracts("Chinese Abstracts citation"),
DrugBank,
EC,
EFO,
Gmelin("Gmelin Registry Number"),
Golm,
HMDB,
IEDB,
IntAct,
IntEnz,
KEGG_COMPOUND("KEGG COMPOUND"),
KEGG_DRUG("KEGG DRUG"),
KEGG_GLYCAN("KEGG GLYCAN"),
Linnean, // taxonomy
LIPID_MAPS_class("LIPID MAPS class"),
LIPID_MAPS_instance("LIPID MAPS instance"),
MeSH,
MetaCyc,
MolBase,
NMRShiftDB,
OMIM,
PDB("PDBe"),
PDBeChem("MSDCHEM"),
Patent,
PubChem,
PubMed("PubMed citation"),
RESID,
Reactome,
Reaxys("Reaxys Registry Number"),
Rhea,
SABIO_RK("SABIO-RK"),
SwissProt("Swiss-Prot"),
TrEMBL,
UM_BBD_compID("UM-BBD compID"),
UniProt,
WebElements,
Wikipedia;
/**
* Any synonyms for the database.
*/
private final String[] synonyms;
private MmDatabase(String... synonyms) {
this.synonyms = synonyms;
}
public String getIdField() {
return name() + "_ID";
}
public String getNameField() {
return name() + "_NAME";
}
public String getAccessionField() {
return name() + "_ACCESSION";
}
/**
* Parses a string into a MmDatabase value. This method is more flexible
* than <code>valueOf</code>, accepting database synonyms (ex. 'TrEMBL' will
* be parsed as {@link #UniProt}) and ignoring letter case.
*
* @param s
* @return a MmDatabase, or <code>null</code> if no match is found.
*/
public static MmDatabase parse(String s) {
MmDatabase result = null;
result = MmDatabase.valueOf(s);
dbLoop:
for (MmDatabase db : values()) {
// Try ignoring case:
if (db.name().equalsIgnoreCase(s)) {
result = db;
break;
}
// Try to guess from synonyms:
if (db.synonyms != null) {
for (String synonym : db.synonyms) {
if (synonym.equalsIgnoreCase(s)) {
result = db;
break dbLoop;
}
}
}
}
return result;
}
}