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}