Author: kono Date: 2011-06-14 11:23:03 -0700 (Tue, 14 Jun 2011) New Revision: 25749
Added: core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/EntrezRestClient.java core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/EntryProcessor.java core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/ImportNetworkTask.java core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/InteractionDocNodeProcessor.java core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/ImportNetworkFromGeneTask.java core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/SearchGeneTask.java core3/webservice-ncbi-client-impl/trunk/src/test/java/org/ core3/webservice-ncbi-client-impl/trunk/src/test/java/org/cytoscape/ core3/webservice-ncbi-client-impl/trunk/src/test/java/org/cytoscape/webservice/ core3/webservice-ncbi-client-impl/trunk/src/test/java/org/cytoscape/webservice/ncbi/ core3/webservice-ncbi-client-impl/trunk/src/test/java/org/cytoscape/webservice/ncbi/EntrezRestClientTest.java Modified: core3/webservice-ncbi-client-impl/trunk/pom.xml core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/NCBIWebServiceClient.java core3/webservice-ncbi-client-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml core3/webservice-ncbi-client-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml Log: Network import function is mostly working. Modified: core3/webservice-ncbi-client-impl/trunk/pom.xml =================================================================== --- core3/webservice-ncbi-client-impl/trunk/pom.xml 2011-06-14 18:17:26 UTC (rev 25748) +++ core3/webservice-ncbi-client-impl/trunk/pom.xml 2011-06-14 18:23:03 UTC (rev 25749) @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> @@ -22,38 +23,38 @@ <packaging>bundle</packaging> - <scm> - <connection>scm:svn:http://chianti.ucsd.edu/svn/core3/webservice-ncbi-client-impl/trunk</connection> - <developerConnection>scm:svn:svn+ssh://grenache.ucsd.edu/cellar/common/svn/core3/webservice-ncbi-client-impl/trunk</developerConnection> - <url>http://chianti.ucsd.edu/svn/core3/webservice-ncbi-client-impl/trunk</url> - </scm> + <scm> + <connection>scm:svn:http://chianti.ucsd.edu/svn/core3/webservice-ncbi-client-impl/trunk</connection> + <developerConnection>scm:svn:svn+ssh://grenache.ucsd.edu/cellar/common/svn/core3/webservice-ncbi-client-impl/trunk</developerConnection> + <url>http://chianti.ucsd.edu/svn/core3/webservice-ncbi-client-impl/trunk</url> + </scm> - <repositories> - <!-- bootstrap for cytoscape dependencies, namely the parent POM snapshots --> - <repository> - <id>cytoscape_snapshots</id> - <snapshots> - <enabled>true</enabled> - </snapshots> - <releases> - <enabled>false</enabled> - </releases> - <name>Cytoscape Snapshots</name> - <url>http://cytoscape.wodaklab.org/nexus/content/repositories/snapshots/</url> - </repository> - <!-- bootstrap for cytoscape dependencies, namely the parent POM releases --> - <repository> - <id>cytoscape_releases</id> - <snapshots> - <enabled>false</enabled> - </snapshots> - <releases> - <enabled>true</enabled> - </releases> - <name>Cytoscape Releases</name> - <url>http://cytoscape.wodaklab.org/nexus/content/repositories/releases/</url> - </repository> - </repositories> + <repositories> + <!-- bootstrap for cytoscape dependencies, namely the parent POM snapshots --> + <repository> + <id>cytoscape_snapshots</id> + <snapshots> + <enabled>true</enabled> + </snapshots> + <releases> + <enabled>false</enabled> + </releases> + <name>Cytoscape Snapshots</name> + <url>http://cytoscape.wodaklab.org/nexus/content/repositories/snapshots/</url> + </repository> + <!-- bootstrap for cytoscape dependencies, namely the parent POM releases --> + <repository> + <id>cytoscape_releases</id> + <snapshots> + <enabled>false</enabled> + </snapshots> + <releases> + <enabled>true</enabled> + </releases> + <name>Cytoscape Releases</name> + <url>http://cytoscape.wodaklab.org/nexus/content/repositories/releases/</url> + </repository> + </repositories> <build> <resources> @@ -111,10 +112,9 @@ <dependency> <groupId>org.cytoscape</groupId> <artifactId>webservice-api</artifactId> - <version>3.0.0-alpha2</version> + <version>3.0.0-alpha3-SNAPSHOT</version> </dependency> - <!-- Testing --> <dependency> <groupId>junit</groupId> @@ -128,6 +128,12 @@ <version>1.8.1</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.cytoscape</groupId> + <artifactId>test-support</artifactId> + <version>3.0.0-alpha2</version> + <scope>test</scope> + </dependency> </dependencies> Modified: core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/NCBIWebServiceClient.java =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/NCBIWebServiceClient.java 2011-06-14 18:17:26 UTC (rev 25748) +++ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/NCBIWebServiceClient.java 2011-06-14 18:23:03 UTC (rev 25749) @@ -1,5 +1,6 @@ package org.cytoscape.webservice.ncbi; +import java.util.HashSet; import java.util.Set; import org.cytoscape.io.webservice.NetworkImportWebServiceClient; @@ -7,28 +8,46 @@ import org.cytoscape.io.webservice.TableImportWebServiceClient; import org.cytoscape.io.webservice.client.AbstractWebServiceClient; import org.cytoscape.model.CyNetwork; +import org.cytoscape.model.CyNetworkFactory; +import org.cytoscape.model.CyNetworkManager; import org.cytoscape.model.CyTable; +import org.cytoscape.webservice.ncbi.task.ImportNetworkFromGeneTask; import org.cytoscape.work.TaskIterator; public class NCBIWebServiceClient extends AbstractWebServiceClient implements TableImportWebServiceClient, NetworkImportWebServiceClient, SearchWebServiceClient<Object> { - - public NCBIWebServiceClient(String uri, String displayName, - String description) { + + private final CyNetworkFactory networkFactory; + private final CyNetworkManager manager; + + private ImportNetworkFromGeneTask networkTask; + + public NCBIWebServiceClient(final String uri, String displayName, String description, final CyNetworkFactory networkFactory, final CyNetworkManager manager) { super(uri, displayName, description); + this.networkFactory = networkFactory; + this.manager = manager; } @Override public TaskIterator getTaskIterator() { - - return null; + if(currentQuery == null) + throw new NullPointerException("Query object is null."); + else { + networkTask = new ImportNetworkFromGeneTask(this.currentQuery.toString(), networkFactory, manager); + return new TaskIterator(networkTask); + } } @Override public Set<CyNetwork> getNetworks() { - // TODO Auto-generated method stub - return null; + final Set<CyNetwork> result = new HashSet<CyNetwork>(); + if(networkTask != null) { + final CyNetwork network = networkTask.getNetwork(); + if(network != null) + result.add(network); + } + return result; } @Override Added: core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/EntrezRestClient.java =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/EntrezRestClient.java (rev 0) +++ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/EntrezRestClient.java 2011-06-14 18:23:03 UTC (rev 25749) @@ -0,0 +1,157 @@ +package org.cytoscape.webservice.ncbi.rest; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.cytoscape.model.CyNetwork; +import org.cytoscape.model.CyNetworkFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +public class EntrezRestClient { + + private static final Logger logger = LoggerFactory.getLogger(EntrezRestClient.class); + + private static final String BASE_URL = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/"; + static final String FETCH_URL = BASE_URL + "efetch.fcgi?db=gene&retmode=xml&id="; + private static final String SEARCH_URL = BASE_URL + "esearch.fcgi?db=gene&retmax=100000&term="; + + + + + private final String regex = "\\s+"; + + private static final String ID = "Id"; + + private final CyNetworkFactory networkFactory; + + + + public EntrezRestClient(final CyNetworkFactory networkFactory) { + this.networkFactory = networkFactory; + } + + + public Set<String> search(final String queryString) throws IOException, ParserConfigurationException, SAXException { + final URL url = createURL(SEARCH_URL, queryString); + + final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + final DocumentBuilder builder = factory.newDocumentBuilder(); + InputStream is = url.openStream(); + + final Document result = builder.parse(is); + + final Set<String> idSet = new HashSet<String>(); + final NodeList ids = result.getElementsByTagName(ID); + final int dataSize = ids.getLength(); + + for (int i = 0; i < dataSize; i++) { + Node id = ids.item(i); + idSet.add(id.getTextContent()); + } + + is.close(); + is = null; + + return idSet; + } + + public CyNetwork importNetwork(final Set<String> idList) { + + long startTime = System.currentTimeMillis(); + + final ExecutorService executer = Executors.newFixedThreadPool(4); + + System.out.println("Thread Pool Initialized."); + final CyNetwork newNetwork = networkFactory.getInstance(); + + int group = 0; + int buketNum = 10; + String[] box = new String[buketNum]; + + + for (String entrezID : idList) { + box[group] = entrezID; + group++; + + if (group == buketNum) { + executer.submit(new EntryProcessor<String>(new ImportNetworkTask<String>(box, newNetwork))); + group = 0; + box = new String[buketNum]; + } + } + + String[] newbox = new String[group]; + + for (int i = 0; i < group; i++) + newbox[i] = box[i]; + + executer.submit(new EntryProcessor<String>(new ImportNetworkTask<String>(box, newNetwork))); + + try { + executer.shutdown(); + executer.awaitTermination(1000, TimeUnit.SECONDS); + + long endTime = System.currentTimeMillis(); + double sec = (endTime - startTime) / (1000.0); + System.out.println("Finished in " + sec + " sec."); + +// if ((canceled != null) && canceled) { +// canceled = null; +// +// return null; +// } + } catch( Exception ex) { + ex.printStackTrace(); + } + + return newNetwork; + } + + private void walk(Node node, final String targetTag, final String targetVal) { + for(Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) { + if(child.getNodeType() == Node.ELEMENT_NODE) { + if(child.getNodeName().equals(targetTag)) { + logger.debug(targetTag + " Tag = " + child.getTextContent()); + //this.resultMap.put(targetVal, child.getTextContent()); + break; + } else + walk(child, targetTag, targetVal); + } + } + } + + + private URL createURL(final String base, final String queryString) throws IOException { + + final String[] parts = queryString.split(regex); + final StringBuilder builder = new StringBuilder(); + + if (parts.length != 0) { + for (String dTerm : parts) { + final String trimed = dTerm.trim(); + builder.append(trimed + "+"); + } + } + + String urlString = builder.toString(); + urlString = urlString.substring(0, urlString.length() - 1); + final URL url = new URL(base + urlString); + logger.debug("Query URL = " + url.toString()); + return url; + } +} Added: core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/EntryProcessor.java =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/EntryProcessor.java (rev 0) +++ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/EntryProcessor.java 2011-06-14 18:23:03 UTC (rev 25749) @@ -0,0 +1,15 @@ +package org.cytoscape.webservice.ncbi.rest; + +import java.util.concurrent.Callable; +import java.util.concurrent.FutureTask; + +public class EntryProcessor<V> extends FutureTask<V> { + + public EntryProcessor(Callable<V> callable) { + super(callable); + } + + + + +} Added: core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/ImportNetworkTask.java =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/ImportNetworkTask.java (rev 0) +++ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/ImportNetworkTask.java 2011-06-14 18:23:03 UTC (rev 25749) @@ -0,0 +1,169 @@ +package org.cytoscape.webservice.ncbi.rest; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.Callable; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.cytoscape.model.CyEdge; +import org.cytoscape.model.CyNetwork; +import org.cytoscape.model.CyNode; +import org.cytoscape.model.CyTableEntry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class ImportNetworkTask<V> implements Callable<V> { + + private static final Logger logger = LoggerFactory.getLogger(ImportNetworkTask.class); + + private static final String TARGET_ID = ""; + private static final String TARGET_DB = ""; + private static final String TARGET_NAMES = ""; + + private static final String GENE_ID_TAG = "Gene-track_geneid"; + + private final InteractionDocNodeProcessor processor; + + final String[] ids; + + private final CyNetwork network; + + public ImportNetworkTask(final String[] ids, final CyNetwork network) { + this.ids = ids; + this.network = network; + this.processor = new InteractionDocNodeProcessor(); + } + + @Override + public V call() throws Exception { + final URL url = createURL(); + + final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + final DocumentBuilder builder = factory.newDocumentBuilder(); + InputStream is = url.openStream(); + + final Document result = builder.parse(is); + + logger.debug("######## 1 Got Result for = " + url.toString()); + logger.debug("######## 2 Got Result for = " + result.getChildNodes().getLength()); + + NodeList geneID = result.getElementsByTagName(GENE_ID_TAG); + final String geneIDString = geneID.item(0).getTextContent(); + logger.debug("Gene ID ======== " + geneIDString); + if(geneIDString == null) + throw new NullPointerException("Could not find NCBI Gene ID for the entry."); + + final CyNode centerNode = network.addNode(); + centerNode.getCyRow().set(CyTableEntry.NAME, geneIDString); + + final Set<String> idSet = new HashSet<String>(); + final NodeList ids = result.getElementsByTagName("Gene-commentary"); + final int dataSize = ids.getLength(); + + boolean interactionFound = false; + Node interactionNode = null; + for (int i = 0; i < dataSize; i++) { + // logger.debug(" GC = " + + // ids.item(i).getChildNodes().getLength()); + NodeList children = ids.item(i).getChildNodes(); + for (int j = 0; j < children.getLength(); j++) { + // logger.debug(" Node name = " + + // children.item(j).getNodeName() + " ====> " + + // children.item(j).getTextContent()); + if (children.item(j).getNodeName().equals("Gene-commentary_heading")) { + + //logger.debug("HEADING = " + children.item(j).getTextContent()); + if (children.item(j).getTextContent().equals("Interactions")) { + logger.debug("FOUND interactions"); + interactionFound = true; + break; + } + } + } + if (interactionFound) { + interactionNode = ids.item(i); + break; + } + } + + is.close(); + is = null; + + if (interactionNode == null) + logger.warn("Interacrtion Not found"); + else + processInteraction(interactionNode, centerNode); + return null; + } + + private void processInteraction(Node node, CyNode centerNode) { + NodeList children = node.getChildNodes(); + int dataSize = children.getLength(); + NodeList interactionList = null; + for (int i = 0; i < dataSize; i++) { + Node item = children.item(i); + if (item.getNodeName().equals("Gene-commentary_comment")) { + interactionList = item.getChildNodes(); + break; + } + } + + logger.debug("Num interactions: " + interactionList.getLength()); + processNode(interactionList, centerNode); + } + + private void processNode(NodeList interactionList, CyNode centerNode) { + int dataSize = interactionList.getLength(); + for (int i = 0; i < dataSize; i++) { + final Node item = interactionList.item(i); + if (item.getNodeType() == Node.ELEMENT_NODE) { + logger.debug(item.getNodeName() + " Number = " + i); + // logger.debug(" contents = " + item.getTextContent()); + + processor.process(item); + final String id = processor.getTargetID(); + if (id != null) { + final CyNode targetNode = network.addNode(); + targetNode.getCyRow().set(CyTableEntry.NAME, id); + logger.debug("New Node Name = " + id); + final CyEdge newEdge = network.addEdge(centerNode, targetNode, false); + newEdge.getCyRow().set(CyTableEntry.NAME, + centerNode.getCyRow().get(CyTableEntry.NAME, String.class) + " (" + "pp" + ") " + + targetNode.getCyRow().get(CyTableEntry.NAME, String.class)); + } + } + } + + } + + private void processOneInteractionEntry() { + + } + + private URL createURL() throws IOException { + + final StringBuilder builder = new StringBuilder(); + + for (final String id : ids) { + System.out.println("ID = " + id); + if (id != null) + builder.append(id + ","); + } + + String urlString = builder.toString(); + urlString = urlString.substring(0, urlString.length() - 1); + final URL url = new URL(EntrezRestClient.FETCH_URL + urlString); + logger.debug("Import Query URL = " + url.toString()); + return url; + } + +} \ No newline at end of file Added: core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/InteractionDocNodeProcessor.java =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/InteractionDocNodeProcessor.java (rev 0) +++ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/rest/InteractionDocNodeProcessor.java 2011-06-14 18:23:03 UTC (rev 25749) @@ -0,0 +1,265 @@ +package org.cytoscape.webservice.ncbi.rest; + +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class InteractionDocNodeProcessor { + + private static final Logger logger = LoggerFactory.getLogger(InteractionDocNodeProcessor.class); + + private static final String GC_TEXT = "Gene-commentary_text"; + private static final String GC_REFS = "Gene-commentary_refs"; + private static final String GC_SOURCE = "Gene-commentary_source"; + private static final String GC_COMMENT = "Gene-commentary_comment"; + + private static final String PUB_TAG = "PubMedId"; + private static final String DB_TAG = "Dbtag_db"; + private static final String ID_TAG = "Object-id_id"; + private static final String ANCHOR_TAG = "Other-source_anchor"; + + static final String targetSource = "DB Name"; + static final String targetSourceID = "Target ID"; + static final String targetOtherName = "Other Name"; + + + private static final String NCBI_GENE_ID_TAG = "GeneID"; + + private Map<String, String> idMap; + private Map<String, String> resultMap; + + protected String getTargetID() { + String geneID = idMap.get(NCBI_GENE_ID_TAG); + if(geneID == null) + geneID = idMap.values().iterator().next(); + return geneID; + } + + protected String getTargetAltName() { + return null; + } + + public void process(final Node interactionNode) { + + idMap = new HashMap<String, String>(); + resultMap = new HashMap<String, String>(); + + final NodeList children = interactionNode.getChildNodes(); + final int length = children.getLength(); + + for (int i = 0; i < length; i++) { + final Node node = children.item(i); + final String nodeName = node.getNodeName(); + if (nodeName.equals(GC_TEXT)) { + final String interactionTypeText = node.getTextContent(); + logger.debug("Interaction type = " + interactionTypeText); + } else if (nodeName.equals(GC_REFS)) + processReference(node); + else if (nodeName.equals(GC_SOURCE)) + processSource(node); + else if (nodeName.equals(GC_COMMENT)) + processComment(node); + } + } + + + private void processComment(final Node commentNode) { + final NodeList comments = commentNode.getChildNodes(); + final int length = comments.getLength(); + + for (int i = 0; i < length; i++) { + final Node comment = comments.item(i); + for(Node child = comment.getFirstChild(); child != null; child = child.getNextSibling()) { + if(child.getNodeType() == Node.ELEMENT_NODE) { + if(child.getNodeName().equals("Gene-commentary_source")) { + getOtherElements(child); + } + } + } + } + } + + private void getOtherElements(Node gcSource) { + for(Node child = gcSource.getFirstChild(); child != null; child = child.getNextSibling()) { + if(child.getNodeType() == Node.ELEMENT_NODE) { + if(child.getNodeName().equals("Other-source")) { + final Map<String, String> idBlock = new HashMap<String, String>(); + walkNames(child, DB_TAG, idBlock); + walkNames(child, ID_TAG, idBlock); + walkNames(child, ANCHOR_TAG, idBlock); + + for(String key: idBlock.keySet()) { + logger.debug(key + " ======= " + idBlock.get(key)); + + } + + idMap.put(idBlock.get(DB_TAG), idBlock.get(ID_TAG)); + } + } + } + } + + private void walkNames(Node node, final String targetTag, Map<String, String> idBlock) { + for(Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) { + if(child.getNodeType() == Node.ELEMENT_NODE) { + if(child.getNodeName().equals(targetTag)) { + idBlock.put(targetTag, child.getTextContent()); + break; + } else + walkNames(child, targetTag, idBlock); + } + } + } + + + private void processSource(Node sourceNode) { + final NodeList publications = sourceNode.getChildNodes(); + final int length = publications.getLength(); + + for (int i = 0; i < length; i++) { + final Node pubNode = publications.item(i); + walk(pubNode, DB_TAG, targetSource); + walk(pubNode, ID_TAG, targetSourceID); + } + + logger.debug("DB = " + resultMap.get(targetSource)); + logger.debug("DB ID = " + resultMap.get(targetSourceID)); + } + + + private void walk(Node node, final String targetTag, final String targetVal) { + for(Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) { + if(child.getNodeType() == Node.ELEMENT_NODE) { + if(child.getNodeName().equals(targetTag)) { + //logger.debug(targetTag + " Tag = " + child.getTextContent()); + this.resultMap.put(targetVal, child.getTextContent()); + break; + } else + walk(child, targetTag, targetVal); + } + } + } + + + /** + * Process reference (publication) section. + * + * @param node + */ + private void processReference(Node refNode) { + final NodeList publications = refNode.getChildNodes(); + final int length = publications.getLength(); + + for (int i = 0; i < length; i++) { + final Node pubNode = publications.item(i); + String test = null; + walk(pubNode, PUB_TAG, test); + } + } + + // private void processInteraction() { + // interactionType = itr.getGeneCommentaryText(); + // + // if (interactionType == null) { + // interactionType = DEF_ITR_TYPE; + // } + // + // if (itr.getGeneCommentaryComment().getGeneCommentary().size() > 1) { + // // Find node ID. If available, use Entrez Gene + // // ID. + // // If not, use the database-specific ID instead. + // try { + // nodeid = + // itr.getGeneCommentaryComment().getGeneCommentary().get(1).getGeneCommentarySource() + // .getOtherSource().get(0).getOtherSourceSrc().getDbtag().getDbtagTag().getObjectId() + // .getObjectIdId().toString(); + // } catch (NullPointerException npe) { + // // This gene is not in NCBI DB. + // // Use original database ID + // continue; + // } + // + // // Check source Type + // + // nodeType = + // itr.getGeneCommentaryComment().getGeneCommentary().get(1).getGeneCommentarySource() + // .getOtherSource().get(0).getOtherSourceSrc().getDbtag().getDbtagDb(); + // + // // System.out.println("DB Tag for nodeID: " + // // + nodeid + " = " + nodeType); + // + // // In case ID is not GeneID, put tag + // if (nodeType.equals(GENE_ID_TAG) == false) { + // nodeid = nodeType + ":" + nodeid; + // } + // + // n1 = Cytoscape.getCyNode(nodeid, true); + // nodeList.add(n1); + // + // // Add node attributes + // nodeTypes.put(nodeid, nodeType); + // + // altName = + // itr.getGeneCommentaryComment().getGeneCommentary().get(1).getGeneCommentarySource() + // .getOtherSource().get(0).getOtherSourceAnchor(); + // if (altName != null && altName.length() != 0) + // nodeAltName.put(nodeid, altName); + // + // final String dataSource = + // itr.getGeneCommentarySource().getOtherSource().get(0).getOtherSourceSrc() + // .getDbtag().getDbtagDb(); + // + // List<Edge> eList2 = new ArrayList<Edge>(); + // + // if (dataSource.equals("BioGRID")) { + // final String[] expTypes = interactionType.split(";"); + // + // String etString = null; + // Edge newEdge = null; + // + // for (String eType : expTypes) { + // etString = eType.trim(); + // + // eList2.add(newEdge = Cytoscape.getCyEdge(centerNode, n1, "interaction", + // etString, true)); + // + // if (dataSource.equals("BioGRID")) { + // attrMap.put(new String[] { newEdge.getIdentifier(), "interaction type" }, + // BioGRIDUtil.getInteractionType(etString)); + // } + // } + // } else { + // eList2.add(Cytoscape.getCyEdge(centerNode, n1, "interaction", + // interactionType, true)); + // } + // + // // e1 = Cytoscape.getCyEdge(centerNode, n1, + // // "interaction", interactionType, true); + // for (Edge e1 : eList2) { + // edgeList.add(e1); + // edgeID = e1.getIdentifier(); + // + // // Add edge attributes + // attrMap.put(new String[] { edgeID, "datasource" }, dataSource); + // + // List<Pub> pubmed = itr.getGeneCommentaryRefs().getPub(); + // + // if ((pubmed != null) && (pubmed.size() > 0)) { + // String[] pmid = new String[] { edgeID, "PubMed ID" }; + // List<String> pmids = new ArrayList<String>(); + // + // for (Pub pub : pubmed) { + // pmids.add(pub.getPubPmid().getPubMedId().toString()); + // } + // + // attrMap.put(pmid, pmids); + // } // / + // } + // } + // } + +} Added: core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/ImportNetworkFromGeneTask.java =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/ImportNetworkFromGeneTask.java (rev 0) +++ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/ImportNetworkFromGeneTask.java 2011-06-14 18:23:03 UTC (rev 25749) @@ -0,0 +1,55 @@ +package org.cytoscape.webservice.ncbi.task; + +import java.util.Set; + +import org.cytoscape.model.CyNetwork; +import org.cytoscape.model.CyNetworkFactory; +import org.cytoscape.model.CyNetworkManager; +import org.cytoscape.model.CyTableEntry; +import org.cytoscape.webservice.ncbi.rest.EntrezRestClient; +import org.cytoscape.work.AbstractTask; +import org.cytoscape.work.TaskMonitor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ImportNetworkFromGeneTask extends AbstractTask { + + private static final Logger logger = LoggerFactory.getLogger(ImportNetworkFromGeneTask.class); + + private final String queryString; + private final CyNetworkFactory networkFactory; + private final CyNetworkManager manager; + + private CyNetwork newNetwork; + + public ImportNetworkFromGeneTask(final String queryString, final CyNetworkFactory networkFactory, final CyNetworkManager manager) { + this.queryString = queryString; + this.networkFactory = networkFactory; + this.manager = manager; + } + + @Override + public void run(TaskMonitor taskMonitor) throws Exception { + logger.debug("Import Start: Query = " + queryString); + + final EntrezRestClient restClient = new EntrezRestClient(networkFactory); + + taskMonitor.setTitle("Accessing NCBI Entrez Gene"); + taskMonitor.setStatusMessage("Searching matching genes..."); + final Set<String> searchResult = restClient.search(queryString); + + if(searchResult.size() == 0) + return; + + taskMonitor.setStatusMessage("Creating network from matching genes..."); + newNetwork = restClient.importNetwork(searchResult); + + // Register it + newNetwork.getCyRow().set(CyTableEntry.NAME, "NCBI"); + manager.addNetwork(newNetwork); + } + + public CyNetwork getNetwork() { + return newNetwork; + } +} Added: core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/SearchGeneTask.java =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/SearchGeneTask.java (rev 0) +++ core3/webservice-ncbi-client-impl/trunk/src/main/java/org/cytoscape/webservice/ncbi/task/SearchGeneTask.java 2011-06-14 18:23:03 UTC (rev 25749) @@ -0,0 +1,25 @@ +package org.cytoscape.webservice.ncbi.task; + +import org.cytoscape.work.AbstractTask; +import org.cytoscape.work.TaskMonitor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SearchGeneTask extends AbstractTask { + + private static final Logger logger = LoggerFactory.getLogger(SearchGeneTask.class); + + @Override + public void run(TaskMonitor taskMonitor) throws Exception { + // TODO Auto-generated method stub + + } + + + @Override + public void cancel() { + System.out.println("entering AbstractTask cancel"); + cancelled = true; + System.out.println("exiting AbstractTask cancel"); + } +} Modified: core3/webservice-ncbi-client-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml 2011-06-14 18:17:26 UTC (rev 25748) +++ core3/webservice-ncbi-client-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml 2011-06-14 18:23:03 UTC (rev 25749) @@ -6,6 +6,12 @@ default-lazy-init="false"> - <osgi:service id="ncbiClientService" ref="ncbiClient" auto-export="interfaces" /> + <osgi:service id="ncbiClientService" ref="ncbiClient" + auto-export="interfaces" /> + <osgi:reference id="cyNetworkFactoryServiceRef" + interface="org.cytoscape.model.CyNetworkFactory" /> + <osgi:reference id="cyNetworkManagerServiceRef" + interface="org.cytoscape.model.CyNetworkManager" /> + </beans> Modified: core3/webservice-ncbi-client-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml 2011-06-14 18:17:26 UTC (rev 25748) +++ core3/webservice-ncbi-client-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml 2011-06-14 18:23:03 UTC (rev 25749) @@ -24,5 +24,7 @@ <constructor-arg index="0" value="http://www.ncbi.nlm.nih.gov/entrez/eutils/soap/v2.0/eutils.wsdl" /> <constructor-arg index="1" value="NCBI Client" /> <constructor-arg index="2" value="SOAP version of NCBI Web Service Client." /> + <constructor-arg index="3" ref="cyNetworkFactoryServiceRef"/> + <constructor-arg index="4" ref="cyNetworkManagerServiceRef" /> </bean> </beans> Added: core3/webservice-ncbi-client-impl/trunk/src/test/java/org/cytoscape/webservice/ncbi/EntrezRestClientTest.java =================================================================== --- core3/webservice-ncbi-client-impl/trunk/src/test/java/org/cytoscape/webservice/ncbi/EntrezRestClientTest.java (rev 0) +++ core3/webservice-ncbi-client-impl/trunk/src/test/java/org/cytoscape/webservice/ncbi/EntrezRestClientTest.java 2011-06-14 18:23:03 UTC (rev 25749) @@ -0,0 +1,47 @@ +package org.cytoscape.webservice.ncbi; + + +import static org.junit.Assert.*; + +import java.util.HashSet; +import java.util.Set; + +import org.cytoscape.model.CyNetwork; +import org.cytoscape.test.support.NetworkTestSupport; +import org.cytoscape.webservice.ncbi.rest.EntrezRestClient; +import org.junit.Before; +import org.junit.Test; + +public class EntrezRestClientTest { + + + private EntrezRestClient client; + + @Before + public void setUp() throws Exception { + NetworkTestSupport support = new NetworkTestSupport(); + client = new EntrezRestClient(support.getNetworkFactory()); + } + + @Test + public void testEntrezRestClientSearch() throws Exception { + Set<String> result = client.search("human muscular dystrophy"); + + assertNotNull(result); + assertEquals(214, result.size()); + } + + @Test + public void testEntrezRestClientImportNetwork() throws Exception { + Set<String> result = new HashSet<String>(); + + // TP53 + result.add("7157"); + final CyNetwork net = client.importNetwork(result); + + assertNotNull(net); + assertFalse(net.getNodeCount() == 0); + assertFalse(net.getEdgeCount() == 0); + } + +} -- You received this message because you are subscribed to the Google Groups "cytoscape-cvs" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/cytoscape-cvs?hl=en.
