001package org.biopax.paxtools.pattern.miner;
002
003import org.biopax.paxtools.model.BioPAXElement;
004import org.biopax.paxtools.model.level3.*;
005import org.biopax.paxtools.pattern.util.HGNC;
006
007import java.util.Collections;
008import java.util.HashSet;
009import java.util.Set;
010
011/**
012 * Tries to get gene symbols or uniprot IDs for genes and display names for small molecules.
013 *
014 * @author Ozgun Babur
015 */
016public class CommonIDFetcher implements IDFetcher
017{
018        boolean useUniprotIDs = false;
019
020        @Override
021        public Set<String> fetchID(BioPAXElement ele)
022        {
023                Set<String> set = new HashSet<String>();
024
025                if (ele instanceof SmallMoleculeReference)
026                {
027                        SmallMoleculeReference smr = (SmallMoleculeReference) ele;
028                        if (smr.getDisplayName() != null) set.add(smr.getDisplayName());
029                        else if (!smr.getName().isEmpty()) set.add(smr.getName().iterator().next());
030
031                        return set;
032                }
033                else if (useUniprotIDs && ele.getRDFId().startsWith("http://identifiers.org/uniprot/"))
034                {
035                        set.add(ele.getRDFId().substring(ele.getRDFId().lastIndexOf("/") + 1));
036                }
037                else if (ele instanceof XReferrable)
038                {
039                        for (Xref xr : ((XReferrable) ele).getXref())
040                        {
041                                String db = xr.getDb();
042                                if (db != null)
043                                {
044                                        db = db.toLowerCase();
045                                        if (!useUniprotIDs && db.startsWith("hgnc"))
046                                        {
047                                                String id = xr.getId();
048                                                if (id != null)
049                                                {
050                                                        String symbol = HGNC.getSymbol(id);
051                                                        if (symbol != null && !symbol.isEmpty())
052                                                        {
053                                                                set.add(symbol);
054                                                        }
055                                                }
056                                        }
057                                        else if (useUniprotIDs && db.startsWith("uniprot"))
058                                        {
059                                                String id = xr.getId();
060                                                if (id != null)
061                                                {
062                                                        set.add(id);
063                                                }
064                                        }
065                                }
066                        }
067                }
068
069                if (set.isEmpty() && (ele instanceof DnaReference || ele instanceof RnaReference))
070                {
071                        for (Xref xr : ((XReferrable) ele).getXref())
072                        {
073                                String db = xr.getDb();
074                                if (db != null)
075                                {
076                                        db = db.toLowerCase();
077
078                                        if (db.equals("mirbase sequence"))
079                                        {
080                                                String id = xr.getId();
081                                                if (id != null && !id.isEmpty()) set.add(id);
082                                        }
083                                }
084                        }
085                }
086
087                return set;
088        }
089
090        public void setUseUniprotIDs(boolean useUniprotIDs)
091        {
092                this.useUniprotIDs = useUniprotIDs;
093        }
094}