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.

Reply via email to