Author: kono
Date: 2011-11-09 17:05:09 -0800 (Wed, 09 Nov 2011)
New Revision: 27442

Removed:
   
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/EntryProcessor.java
Modified:
   
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/ImportTableTask.java
   
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/EntrezRestClient.java
   
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/ImportNetworkTask.java
   
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/task/ImportNetworkFromGeneTask.java
   
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/task/ImportTableFromNCBITask.java
Log:
Fixed progress bar problem and number of threads had been increased.

Modified: 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/ImportTableTask.java
===================================================================
--- 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/ImportTableTask.java
       2011-11-09 23:30:46 UTC (rev 27441)
+++ 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/ImportTableTask.java
       2011-11-10 01:05:09 UTC (rev 27442)
@@ -24,7 +24,7 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
-public class ImportTableTask implements Callable<String> {
+public class ImportTableTask implements Callable<Double> {
 
        private static final Logger logger = 
LoggerFactory.getLogger(ImportTableTask.class);
 
@@ -82,14 +82,18 @@
 
        private Set<String> pathways;
 
-       public ImportTableTask(final String[] ids, final 
Set<AnnotationCategory> category, final CyTable table) {
+       private final double portion;
+
+       public ImportTableTask(final String[] ids, final 
Set<AnnotationCategory> category, final CyTable table, double totalSize) {
                this.ids = ids;
                this.table = table;
                this.category = category;
+               
+               portion = (double)ids.length/(double)totalSize;
        }
 
        @Override
-       public String call() throws Exception {
+       public Double call() throws Exception {
 
                final URL url = createURL();
 
@@ -115,7 +119,7 @@
                is.close();
                is = null;
 
-               return null;
+               return portion;
        }
 
        private void processEntry(Node entry) {

Modified: 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/EntrezRestClient.java
===================================================================
--- 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/EntrezRestClient.java
 2011-11-09 23:30:46 UTC (rev 27441)
+++ 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/EntrezRestClient.java
 2011-11-10 01:05:09 UTC (rev 27442)
@@ -1,17 +1,19 @@
 package org.cytoscape.webservice.ncbi.rest;
 
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Date;
 import java.util.HashSet;
-import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CompletionService;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorCompletionService;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -27,20 +29,19 @@
 import org.cytoscape.model.CyTableManager;
 import org.cytoscape.webservice.ncbi.ImportTableTask;
 import org.cytoscape.webservice.ncbi.ui.AnnotationCategory;
-
+import org.cytoscape.work.TaskMonitor;
 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 int NUM_THREADS = 10;
+
        private static final String BASE_URL = 
"http://eutils.ncbi.nlm.nih.gov/entrez/eutils/";;
        public 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=";
@@ -51,12 +52,11 @@
        private final CyNetworkFactory networkFactory;
        private final CyTableManager tableManager;
 
-       public EntrezRestClient(final CyNetworkFactory networkFactory,
-                               final CyTableFactory tableFactory, final 
CyTableManager tableManager)
-       {
+       public EntrezRestClient(final CyNetworkFactory networkFactory, final 
CyTableFactory tableFactory,
+                       final CyTableManager tableManager) {
                this.networkFactory = networkFactory;
-               this.tableFactory   = tableFactory;
-               this.tableManager   = tableManager;
+               this.tableFactory = tableFactory;
+               this.tableManager = tableManager;
        }
 
        public Set<String> search(final String queryString) throws IOException, 
ParserConfigurationException, SAXException {
@@ -83,29 +83,31 @@
                return idSet;
        }
 
-       public CyNetwork importNetwork(final Set<String> idList) {
+       public CyNetwork importNetwork(final Set<String> idList, final 
TaskMonitor tm) {
 
                long startTime = System.currentTimeMillis();
 
-               final ExecutorService executer = 
Executors.newFixedThreadPool(4);
-
+               final ExecutorService executer = 
Executors.newFixedThreadPool(NUM_THREADS);
+               final CompletionService<Double> completionService = new 
ExecutorCompletionService<Double>(executer);
+               
                logger.debug("Executor initialized.");
                final CyNetwork newNetwork = networkFactory.getInstance();
 
-
                final ConcurrentMap<String, CyNode> nodeName2CyNodeMap = new 
ConcurrentHashMap<String, CyNode>();
 
                int group = 0;
                int buketNum = 10;
                String[] box = new String[buketNum];
+               final int dataSize = idList.size();
+               tm.setStatusMessage("Importing interactions from " + dataSize + 
" Entrez Gene records...");
+               Double progress = 0.0d;
 
-
                for (String entrezID : idList) {
                        box[group] = entrezID;
                        group++;
 
                        if (group == buketNum) {
-                               executer.submit(new EntryProcessor<String>(new 
ImportNetworkTask<String>(box, newNetwork, nodeName2CyNodeMap)));
+                               completionService.submit(new 
ImportNetworkTask(box, newNetwork, nodeName2CyNodeMap, dataSize));
                                group = 0;
                                box = new String[buketNum];
                        }
@@ -116,52 +118,69 @@
                for (int i = 0; i < group; i++)
                        newbox[i] = box[i];
 
-               executer.submit(new EntryProcessor<String>(new 
ImportNetworkTask<String>(box, newNetwork, nodeName2CyNodeMap)));
+               completionService.submit(new ImportNetworkTask(box, newNetwork, 
nodeName2CyNodeMap, dataSize));
 
                try {
+                       for (int i = 0; i < (dataSize / buketNum); i++) {
+                               Future<Double> future = 
completionService.take();
+                               Double val = future.get();
+                               progress = progress + val;
+                               tm.setProgress(progress);
+                       }
+               } catch (InterruptedException ie) {
+
+               } catch (ExecutionException e) {
+                       e.printStackTrace();
+               }
+
+               try {
                        executer.shutdown();
                        executer.awaitTermination(1000, TimeUnit.SECONDS);
 
                        long endTime = System.currentTimeMillis();
                        double sec = (endTime - startTime) / (1000.0);
-                       logger.info("EntrezGene import finished in " + sec + " 
sec.");
+                       logger.info("Entrez Gene network import finished in " + 
sec + " sec.");
 
-//                     if ((canceled != null) && canceled) {
-//                             canceled = null;
-//
-//                             return null;
-//                     }
-               } catch( Exception ex) {
+                       // if ((canceled != null) && canceled) {
+                       // canceled = null;
+                       //
+                       // return null;
+                       // }
+               } catch (Exception ex) {
                        ex.printStackTrace();
                }
 
+               tm.setProgress(1.0d);
+               
                return newNetwork;
        }
 
-
-
-       public CyTable importDataTable(final Set<String> idList, final 
Set<AnnotationCategory> category) {
-               if(idList == null || idList.size() == 0)
+       public CyTable importDataTable(final Set<String> idList, final 
Set<AnnotationCategory> category, final TaskMonitor tm) {
+               if (idList == null || idList.size() == 0)
                        throw new IllegalArgumentException("ID list is null.");
 
                long startTime = System.currentTimeMillis();
-               final ExecutorService executer = 
Executors.newFixedThreadPool(4);
+               final ExecutorService executer = 
Executors.newFixedThreadPool(NUM_THREADS);
+               final CompletionService<Double> completionService = new 
ExecutorCompletionService<Double>(executer);
 
                logger.debug("Table Import Executor initialized.");
                final Date currentDate = new Date();
-               final CyTable table = tableFactory.createTable("NCBI Global 
Table: " + currentDate.toString(), CyTableEntry.NAME, String.class, true, true);
+               final CyTable table = tableFactory.createTable("NCBI Global 
Table: " + currentDate.toString(),
+                               CyTableEntry.NAME, String.class, true, true);
 
                int group = 0;
                int buketNum = 10;
                String[] box = new String[buketNum];
+               final int dataSize = idList.size();
+               tm.setStatusMessage("Importing annotations from " + dataSize + 
" Entrez Gene records...");
+               Double progress = 0.0d;
 
-
                for (String entrezID : idList) {
                        box[group] = entrezID;
                        group++;
 
                        if (group == buketNum) {
-                               executer.submit(new ImportTableTask(box, 
category, table));
+                               completionService.submit(new 
ImportTableTask(box, category, table, dataSize));
                                group = 0;
                                box = new String[buketNum];
                        }
@@ -172,8 +191,21 @@
                for (int i = 0; i < group; i++)
                        newbox[i] = box[i];
 
-               executer.submit(new ImportTableTask(box, category, table));
+               completionService.submit(new ImportTableTask(box, category, 
table, dataSize));
+               
+               try {
+                       for (int i = 0; i < (dataSize / buketNum); i++) {
+                               Future<Double> future = 
completionService.take();
+                               Double val = future.get();
+                               progress = progress + val;
+                               tm.setProgress(progress);
+                       }
+               } catch (InterruptedException ie) {
 
+               } catch (ExecutionException e) {
+                       e.printStackTrace();
+               }
+
                try {
                        executer.shutdown();
                        executer.awaitTermination(1000, TimeUnit.SECONDS);
@@ -182,17 +214,19 @@
                        double sec = (endTime - startTime) / (1000.0);
                        logger.info("Table Import Finished in " + sec + " 
sec.");
 
-//                     if ((canceled != null) && canceled) {
-//                             canceled = null;
-//
-//                             return null;
-//                     }
-               } catch( Exception ex) {
+                       // if ((canceled != null) && canceled) {
+                       // canceled = null;
+                       //
+                       // return null;
+                       // }
+               } catch (Exception ex) {
                        ex.printStackTrace();
                }
 
                tableManager.addTable(table);
 
+               tm.setProgress(1.0d);
+               
                return table;
        }
 

Deleted: 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/EntryProcessor.java
===================================================================
--- 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/EntryProcessor.java
   2011-11-09 23:30:46 UTC (rev 27441)
+++ 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/EntryProcessor.java
   2011-11-10 01:05:09 UTC (rev 27442)
@@ -1,11 +0,0 @@
-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);
-       }
-}

Modified: 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/ImportNetworkTask.java
===================================================================
--- 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/ImportNetworkTask.java
        2011-11-09 23:30:46 UTC (rev 27441)
+++ 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/rest/ImportNetworkTask.java
        2011-11-10 01:05:09 UTC (rev 27442)
@@ -18,20 +18,21 @@
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyTableEntry;
+import org.cytoscape.work.TaskMonitor;
 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> {
+public class ImportNetworkTask implements Callable<Double> {
 
        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;
@@ -39,22 +40,25 @@
        final String[] ids;
 
        private final CyNetwork network;
-       
-       
+
        private final ConcurrentMap<String, CyNode> nodeName2CyNodeMap;
        private final Map<String, CyEdge> nodeName2CyEdgeMap;
 
-       public ImportNetworkTask(final String[] ids, final CyNetwork network, 
final ConcurrentMap<String, CyNode> nodeName2CyNodeMap) {
+       private final Double portion;
+
+       public ImportNetworkTask(final String[] ids, final CyNetwork network,
+                       final ConcurrentMap<String, CyNode> nodeName2CyNodeMap, 
int totalSize) {
                this.ids = ids;
                this.network = network;
                this.processor = new InteractionDocNodeProcessor();
                this.nodeName2CyNodeMap = nodeName2CyNodeMap;
                this.nodeName2CyEdgeMap = new HashMap<String, CyEdge>();
+               
+               portion = (double)ids.length/(double)totalSize;
        }
 
-
        @Override
-       public V call() throws Exception {
+       public Double call() throws Exception {
                final URL url = createURL();
 
                final DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
@@ -69,15 +73,14 @@
                NodeList geneID = result.getElementsByTagName(GENE_ID_TAG);
                final String geneIDString = geneID.item(0).getTextContent();
                logger.debug("Gene ID ======== " + geneIDString);
-               if(geneIDString == null)
+               if (geneIDString == null)
                        throw new NullPointerException("Could not find NCBI 
Gene ID for the entry.");
-               
+
                // This is the center of spokes
                final CyNode centerNode = network.addNode();
                centerNode.getCyRow().set(CyTableEntry.NAME, geneIDString);
                this.nodeName2CyNodeMap.put(geneIDString, centerNode);
-               
-               final Set<String> idSet = new HashSet<String>();
+
                final NodeList ids = 
result.getElementsByTagName("Gene-commentary");
                final int dataSize = ids.getLength();
 
@@ -90,7 +93,8 @@
                        for (int j = 0; j < children.getLength(); j++) {
                                if 
(children.item(j).getNodeName().equals("Gene-commentary_heading")) {
 
-                                       //logger.debug("HEADING = " + 
children.item(j).getTextContent());
+                                       // logger.debug("HEADING = " +
+                                       // children.item(j).getTextContent());
                                        if 
(children.item(j).getTextContent().equals("Interactions")) {
                                                logger.debug("FOUND 
interactions");
                                                interactionFound = true;
@@ -111,7 +115,8 @@
                        logger.warn("Interacrtion Not found");
                else
                        processInteraction(interactionNode, centerNode);
-               return null;
+               
+               return portion;
        }
 
        private void processInteraction(Node node, CyNode centerNode) {
@@ -142,25 +147,27 @@
                                final String id = processor.getTargetID();
                                if (id != null) {
                                        // Create actual nodes and edges here.
-                                       CyNode targetNode = 
this.nodeName2CyNodeMap.get(id);;
-                                       if(targetNode == null) {
+                                       CyNode targetNode = 
this.nodeName2CyNodeMap.get(id);
+                                       ;
+                                       if (targetNode == null) {
                                                targetNode = network.addNode();
                                                nodeName2CyNodeMap.put(id, 
targetNode);
                                        }
-                                       
+
                                        
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) + " (" + 
processor.getInteractionType() + ") " 
-                                                       + 
targetNode.getCyRow().get(CyTableEntry.NAME, String.class));
+                                       newEdge.getCyRow().set(
+                                                       CyTableEntry.NAME,
+                                                       
centerNode.getCyRow().get(CyTableEntry.NAME, String.class) + " ("
+                                                                       + 
processor.getInteractionType() + ") "
+                                                                       + 
targetNode.getCyRow().get(CyTableEntry.NAME, String.class));
                                }
                        }
                }
 
        }
 
-
        private URL createURL() throws IOException {
 
                final StringBuilder builder = new StringBuilder();

Modified: 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/task/ImportNetworkFromGeneTask.java
===================================================================
--- 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/task/ImportNetworkFromGeneTask.java
        2011-11-09 23:30:46 UTC (rev 27441)
+++ 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/task/ImportNetworkFromGeneTask.java
        2011-11-10 01:05:09 UTC (rev 27442)
@@ -45,6 +45,8 @@
        public void run(TaskMonitor taskMonitor) throws Exception {
                logger.debug("Import Start: Query = " + queryString);
 
+               taskMonitor.setProgress(0.01d);
+               
                final EntrezRestClient restClient =
                        new EntrezRestClient(networkFactory, tableFactory, 
tableManager);
 
@@ -56,7 +58,7 @@
                        return;
 
                taskMonitor.setStatusMessage("Creating network from matching 
genes...");
-               newNetwork = restClient.importNetwork(searchResult);
+               newNetwork = restClient.importNetwork(searchResult, 
taskMonitor);
 
                // Register it
                newNetwork.getCyRow().set(CyTableEntry.NAME, "NCBI");

Modified: 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/task/ImportTableFromNCBITask.java
===================================================================
--- 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/task/ImportTableFromNCBITask.java
  2011-11-09 23:30:46 UTC (rev 27441)
+++ 
core3/impl/trunk/webservice-ncbi-client-impl/src/main/java/org/cytoscape/webservice/ncbi/task/ImportTableFromNCBITask.java
  2011-11-10 01:05:09 UTC (rev 27442)
@@ -47,7 +47,7 @@
        public void run(TaskMonitor taskMonitor) throws Exception {
                logger.debug("Table Import Task Start.");
                EntrezRestClient client = new EntrezRestClient(null, 
tableFactory, tableManager);
-               final CyTable globalTable = client.importDataTable(idList, 
category);
+               final CyTable globalTable = client.importDataTable(idList, 
category, taskMonitor);
 
                final MapNetworkAttrTask localMappingTask =
                        new MapNetworkAttrTask(CyNode.class, globalTable, 
networkManager,

-- 
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