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.