From 414fd7472415b6f233e4f8ee65bd959c12d7b7cb Mon Sep 17 00:00:00 2001 From: martijn Date: Tue, 22 Mar 2011 11:23:13 +0000 Subject: [PATCH] Add support for converting MIRIAM URN to Xref git-svn-id: http://svn.bigcat.unimaas.nl/bridgedb/trunk@510 e3f1d335-44b1-4163-9530-9b341189ae98 --- .../test/org/bridgedb/bio/Test.java | 18 +++++++++++++ org.bridgedb/src/org/bridgedb/DataSource.java | 11 ++++++++ org.bridgedb/src/org/bridgedb/Xref.java | 25 +++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/org.bridgedb.bio/test/org/bridgedb/bio/Test.java b/org.bridgedb.bio/test/org/bridgedb/bio/Test.java index d6ce9ec78..8a07a75cc 100644 --- a/org.bridgedb.bio/test/org/bridgedb/bio/Test.java +++ b/org.bridgedb.bio/test/org/bridgedb/bio/Test.java @@ -129,5 +129,23 @@ public void testAlias() DataSource ds = DataSource.getByAlias("ensembl_gene_id"); assertSame(ds, BioDataSource.ENSEMBL); } + + @org.junit.Test + public void testFromUrn() + { + Xref ref = Xref.fromUrn("urn:miriam:entrez.gene:3643"); + assertEquals (BioDataSource.ENTREZ_GENE, ref.getDataSource()); + assertEquals ("3643", ref.getId()); + + ref = Xref.fromUrn("urn:miriam:blahblahblah:abc"); + assertNull (ref); + + ref = Xref.fromUrn("blahblahblha"); + assertNull (ref); + + ref = Xref.fromUrn("urn:miriam:obo.go:GO%3A00001234"); + assertEquals (BioDataSource.GENE_ONTOLOGY, ref.getDataSource()); + assertEquals ("GO:00001234", ref.getId()); + } } diff --git a/org.bridgedb/src/org/bridgedb/DataSource.java b/org.bridgedb/src/org/bridgedb/DataSource.java index 1f3414a76..182d157a7 100644 --- a/org.bridgedb/src/org/bridgedb/DataSource.java +++ b/org.bridgedb/src/org/bridgedb/DataSource.java @@ -59,6 +59,7 @@ public final class DataSource private static Map byFullName = new HashMap(); private static Set registry = new HashSet(); private static Map byAlias = new HashMap(); + private static Map byMiriamBase = new HashMap(); private String sysCode = null; private String fullName = null; @@ -310,6 +311,11 @@ else if (bySysCode.containsKey(sysCode)) registry.add (current); } + if (current.urnBase != null) + { + byMiriamBase.put (current.urnBase, current); + } + current.sysCode = sysCode; current.fullName = fullName; @@ -465,4 +471,9 @@ public Object getOrganism() return organism; } + public static DataSource getByUrnBase(String base) + { + return byMiriamBase.get(base); + } + } diff --git a/org.bridgedb/src/org/bridgedb/Xref.java b/org.bridgedb/src/org/bridgedb/Xref.java index af8086c16..c3f6efc14 100644 --- a/org.bridgedb/src/org/bridgedb/Xref.java +++ b/org.bridgedb/src/org/bridgedb/Xref.java @@ -16,6 +16,9 @@ // package org.bridgedb; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; + /** * Stores an id + {@link DataSource} combination, which represents * an unique gene product. @@ -108,5 +111,27 @@ public String getURN() { return ds.getURN (id); } + + public static Xref fromUrn(String urn) + { + int pos = urn.lastIndexOf(":"); + if (pos < 0) return null; + + String base = urn.substring(0, pos); + String id; + try + { + id = URLDecoder.decode(urn.substring(pos + 1), "UTF-8"); + } + catch (UnsupportedEncodingException e) + { + return null; + } + + DataSource ds = DataSource.getByUrnBase(base); + if (ds == null) return null; + + return new Xref (id, ds); + } } \ No newline at end of file