Author: kono
Date: 2011-12-06 14:55:50 -0800 (Tue, 06 Dec 2011)
New Revision: 27719

Modified:
   
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/PSICQUICRestClient.java
   
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/mapper/CyNetworkBuilder.java
   
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/mapper/Mitab25Mapper.java
   
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/task/ImportNetworkFromPSICQUICTask.java
Log:
Progress bar problem fixed.

Modified: 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/PSICQUICRestClient.java
===================================================================
--- 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/PSICQUICRestClient.java
    2011-12-06 22:18:04 UTC (rev 27718)
+++ 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/PSICQUICRestClient.java
    2011-12-06 22:55:50 UTC (rev 27719)
@@ -6,13 +6,16 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CancellationException;
+import java.util.concurrent.CompletionService;
 import java.util.concurrent.ConcurrentHashMap;
 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;
@@ -57,7 +60,7 @@
 
        // Timeout for search
        private static final long SEARCH_TIMEOUT = 20000;
-       private static final long IMPORT_TIMEOUT = 1200000;
+       private static final long IMPORT_TIMEOUT = 1000;
 
        private final CyNetworkFactory factory;
        private final CyNetworkViewFactory viewFactory;
@@ -73,53 +76,51 @@
        public Map<String, CyNetwork> importNetwork(final String query, final 
Collection<String> targetServices,
                        final SearchMode mode, final TaskMonitor tm) throws 
InterruptedException {
                final Map<String, CyNetwork> resultMap = new 
ConcurrentHashMap<String, CyNetwork>();
-               final ExecutorService exe = Executors.newCachedThreadPool();
+               final ExecutorService exe = Executors.newFixedThreadPool(20);
+               final CompletionService<Map<CyNetwork, String>> 
completionService = new ExecutorCompletionService<Map<CyNetwork, String>>(exe);
+               
                final long startTime = System.currentTimeMillis();
 
                // Submit the query for each active service
+               double completed = 0.0d;
+               final double increment = 1.0d / (double) targetServices.size();
                final List<ImportNetworkTask> tasks = new 
ArrayList<ImportNetworkTask>();
                for (final String serviceURL : targetServices)
-                       tasks.add(new ImportNetworkTask(serviceURL, query, 
mode));
+                       completionService.submit(new 
ImportNetworkTask(serviceURL, query, mode));
 
-               final List<Future<CyNetwork>> futures = exe.invokeAll(tasks, 
IMPORT_TIMEOUT, TimeUnit.MILLISECONDS);
-               logger.debug("Task submitted!");
-
-               double completed = 0.0d;
-               final double increment = 1.0d / (double) futures.size();
-               final Iterator<ImportNetworkTask> taskItr = tasks.iterator();
-               for (final Future<CyNetwork> future : futures) {
-                       final ImportNetworkTask task = taskItr.next();
-                       final String source = task.getURL();
+               
+               for (int i = 0; i < targetServices.size(); i++) {
                        try {
-                               final CyNetwork network = future.get();
-                               //createView(network);
+                               Future<Map<CyNetwork, String>> future = 
completionService.take();
+                               final Map<CyNetwork, String> ret = future.get();
+                               final CyNetwork network = 
ret.keySet().iterator().next();
+                               final String source = ret.get(network);
                                resultMap.put(source, network);
-                               logger.debug(source + " : Got response = " + 
resultMap.get(source));
+                               completed = completed + increment;
+                               tm.setProgress(completed);
+                       } catch (InterruptedException ie) {
+                               logger.warn("Interrupted: network import", ie);
+                               continue;
                        } catch (ExecutionException e) {
-                               logger.warn("Error occured in network import 
from: " + source, e);
+                               logger.warn("Error occured in network import", 
e);
                                continue;
-                       } catch (CancellationException ce) {
-                               logger.warn("Import operation timeout for " + 
source, ce);
-                               continue;
                        }
-                       completed += increment;
-                       tm.setProgress(completed);
                }
-               long endTime = System.currentTimeMillis();
-               double sec = (endTime - startTime) / (1000.0);
-               logger.info("PSICQUIC import finished in " + sec + " sec.");
+
+               try {
+                       exe.shutdown();
+                       exe.awaitTermination(IMPORT_TIMEOUT, TimeUnit.SECONDS);
+
+                       long endTime = System.currentTimeMillis();
+                       double sec = (endTime - startTime) / (1000.0);
+                       logger.info("PSICUQIC Import Finished in " + sec + " 
sec.");
+               } catch (Exception ex) {
+                       logger.warn("Import operation timeout", ex);
+               }
                
-               tm.setProgress(1.0d);
-
                return resultMap;
        }
 
-       private void createView(final CyNetwork network) {
-               final CyNetworkView view = 
viewFactory.createNetworkView(network);
-               viewManager.addNetworkView(view);
-               //view.fitContent();
-       }
-
        public Map<String, Long> search(final String query, final 
Collection<String> targetServices, final SearchMode mode,
                        final TaskMonitor tm) throws InterruptedException {
                final Map<String, Long> resultMap = new 
ConcurrentHashMap<String, Long>();
@@ -193,18 +194,21 @@
                }
        }
 
-       private final class ImportNetworkTask implements Callable<CyNetwork> {
+       private final class ImportNetworkTask implements 
Callable<Map<CyNetwork, String>> {
                private final String serviceURL;
                private final String query;
                private final SearchMode mode;
+               
+               private final Map<CyNetwork, String> returnThis;
 
                private ImportNetworkTask(final String serviceURL, final String 
query, final SearchMode mode) {
                        this.serviceURL = serviceURL;
                        this.query = query;
                        this.mode = mode;
+                       this.returnThis = new HashMap<CyNetwork, String>();
                }
 
-               public CyNetwork call() throws Exception {
+               public Map<CyNetwork, String> call() throws Exception {
                        final PSICQUICSimpleClient simpleClient = new 
PSICQUICSimpleClient(serviceURL);
                        InputStream is = null;
                        if (mode == SearchMode.INTERACTOR)
@@ -217,12 +221,9 @@
                        is.close();
                        is = null;
 
-                       return network;
+                       returnThis.put(network, serviceURL);
+                       return returnThis;
                }
-
-               String getURL() {
-                       return serviceURL;
-               }
        }
 
 }

Modified: 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/mapper/CyNetworkBuilder.java
===================================================================
--- 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/mapper/CyNetworkBuilder.java
       2011-12-06 22:18:04 UTC (rev 27718)
+++ 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/mapper/CyNetworkBuilder.java
       2011-12-06 22:55:50 UTC (rev 27719)
@@ -7,6 +7,7 @@
 
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNetworkFactory;
+import org.cytoscape.work.TaskMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -31,6 +32,7 @@
                        mapper.parse(line);
 
                br.close();
+               logger.info("Import Done: " + network.getSUID());
                return network;
        }
 }

Modified: 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/mapper/Mitab25Mapper.java
===================================================================
--- 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/mapper/Mitab25Mapper.java
  2011-12-06 22:18:04 UTC (rev 27718)
+++ 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/mapper/Mitab25Mapper.java
  2011-12-06 22:55:50 UTC (rev 27719)
@@ -29,6 +29,7 @@
        private static final String TAB = "\t";
 
        // Attr Names
+       private static final String DATABASE_UNIQUE_ID = ATTR_PREFIX + 
"database-unique ID";
        private static final String DETECTION_METHOD = ATTR_PREFIX + 
"interaction detection method";
        private static final String INTERACTION_TYPE = ATTR_PREFIX + 
"interaction type";
        private static final String SOURCE_DB = ATTR_PREFIX + "source database";
@@ -55,44 +56,13 @@
        public Mitab25Mapper(final CyNetwork network) {
                this.network = network;
                this.nodeMap = new HashMap<String, CyNode>();
+               
+               // Create Columns
+               network.getDefaultNodeTable().createColumn(INTERACTOR_TYPE, 
String.class, true);
+               network.getDefaultNodeTable().createColumn(DATABASE_UNIQUE_ID, 
String.class, true);
+               network.getDefaultEdgeTable().createColumn(INTERACTION_ID, 
String.class, true);
        }
 
-//     public CyNetwork map(String mitab, String networkName, CyNetwork 
parentNetwork) {
-//
-//             // Read the long string of MITAB
-//             String[] lines = mitab.split("\n");
-//
-//             parse(lines);
-//
-//             // Create top attribues for important keys
-//             List<String> currentAttr;
-//             for (CyNode node : nodes) {
-//                     currentAttr = 
nodeAttr.getListAttribute(node.getIdentifier(), ATTR_PREFIX + UNIPROT);
-//                     if (currentAttr != null && currentAttr.size() != 0) {
-//                             nodeAttr.setAttribute(node.getIdentifier(), 
ATTR_PREFIX + UNIPROT + ".top", currentAttr.get(0));
-//                     }
-//                     currentAttr = 
nodeAttr.getListAttribute(node.getIdentifier(), ATTR_PREFIX + ENTREZ_GENE);
-//                     if (currentAttr != null && currentAttr.size() != 0) {
-//                             nodeAttr.setAttribute(node.getIdentifier(), 
ATTR_PREFIX + ENTREZ_GENE + ".top", currentAttr.get(0));
-//                     }
-//
-//                     currentAttr = 
nodeAttr.getListAttribute(node.getIdentifier(), ATTR_PREFIX + ENTREZ_GENE_SYN);
-//                     if (currentAttr != null && currentAttr.size() != 0) {
-//                             nodeAttr.setAttribute(node.getIdentifier(), 
ATTR_PREFIX + ENTREZ_GENE + ".top", currentAttr.get(0));
-//                     }
-//             }
-//
-//             if (edges.size() != 0) {
-//                     final CyNetwork network = 
Cytoscape.createNetwork(nodes, edges, networkName, parentNetwork);
-//
-//                     nodes.clear();
-//                     edges.clear();
-//                     return network;
-//             } else {
-//                     return null;
-//             }
-//     }
-
        public void parse(final String line) {
                
                String[] sourceID;
@@ -117,29 +87,32 @@
                        return;
 
                sourceID = entry[0].split(SEPARATOR);
+               final String sourceIDHalf = sourceID[0].split(":")[1];
                targetID = entry[1].split(SEPARATOR);
+               final String targetIDHalf = targetID[0].split(":")[1];
 
+               // Create source and target node if necessary.
                source = nodeMap.get(sourceID[0]);
                if(source == null) {
                        source = network.addNode();
-                       source.getCyRow().set(CyTableEntry.NAME, sourceID[0]);
+                       source.getCyRow().set(CyTableEntry.NAME, sourceIDHalf);
+                       source.getCyRow().set(DATABASE_UNIQUE_ID, sourceID[0]);
                        nodeMap.put(sourceID[0], source);
                }
-               
                target = nodeMap.get(targetID[0]);
                if (target == null) {
                        target = network.addNode();
-                       target.getCyRow().set(CyTableEntry.NAME, targetID[0]);
+                       target.getCyRow().set(CyTableEntry.NAME, targetIDHalf);
+                       target.getCyRow().set(DATABASE_UNIQUE_ID, targetID[0]);
                        nodeMap.put(targetID[0], target);
                }
                
+               // Set type if not protein
+               if (sourceID[0].contains(CHEBI))
+                       source.getCyRow().set(INTERACTOR_TYPE, COMPOUND);
+               if (targetID[0].contains(CHEBI))
+                       target.getCyRow().set(INTERACTOR_TYPE, COMPOUND);
 
-//             // Set type if not protein
-//             if (source.getIdentifier().contains(CHEBI))
-//                     nodeAttr.setAttribute(source.getIdentifier(), 
INTERACTOR_TYPE, COMPOUND);
-//             if (target.getIdentifier().contains(CHEBI))
-//                     nodeAttr.setAttribute(target.getIdentifier(), 
INTERACTOR_TYPE, COMPOUND);
-//
 //             // Aliases
 //             setAliases(nodeAttr, source.getIdentifier(), 
entry[0].split(SEPARATOR));
 //             setAliases(nodeAttr, target.getIdentifier(), 
entry[1].split(SEPARATOR));
@@ -151,7 +124,7 @@
 //             // Tax ID (pick first one only)
 //             setTaxID(nodeAttr, source.getIdentifier(), 
entry[9].split(SEPARATOR)[0]);
 //             setTaxID(nodeAttr, target.getIdentifier(), 
entry[10].split(SEPARATOR)[0]);
-//
+
 //             sourceDB = entry[12].split(SEPARATOR);
                interactionID = entry[13].split(SEPARATOR);
                edgeScore = entry[14].split(SEPARATOR);
@@ -172,14 +145,14 @@
 //             // Map scores
 //             setEdgeScoreListAttribute(edgeAttr, e.getIdentifier(), 
edgeScore, EDGE_SCORE);
 //
-//             edgeAttr.setAttribute(e.getIdentifier(), INTERACTION_ID, 
interactionID[0]);
+               e.getCyRow().set(INTERACTION_ID, interactionID[0]);
 //
 //             setPublication(edgeAttr, e.getIdentifier(), 
entry[8].split(SEPARATOR), entry[7].split(SEPARATOR));
 
        }
 
 
-//     private void setTaxID(CyAttributes attr, String id, String value) {
+//     private void setTaxID(String id, String value) {
 //             String[] buf = value.split(":", 2);
 //             String attrName;
 //             String taxonName;
@@ -216,7 +189,7 @@
 //             }
 //     }
 //
-//     private void setAliases(CyAttributes attr, String id, String[] entry) {
+//     private void setAliases(final String id, final String[] entry) {
 //             String key = null;
 //             String[] temp;
 //             String value;
@@ -272,20 +245,8 @@
 //             }
 //     }
 //
-//     private void listAttrMapper(CyAttributes attr, String attrName, String 
id, String value) {
-//             List currentAttr;
+
 //
-//             currentAttr = attr.getListAttribute(id, attrName);
-//             if (currentAttr == null) {
-//                     currentAttr = new ArrayList<String>();
-//                     currentAttr.add(value);
-//                     attr.setListAttribute(id, attrName, currentAttr);
-//             } else if (currentAttr.contains(value) == false) {
-//                     currentAttr.add(value);
-//                     attr.setListAttribute(id, attrName, currentAttr);
-//             }
-//     }
-//
 //     private String trimPSITerm(String original) {
 //             String miID = null;
 //

Modified: 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/task/ImportNetworkFromPSICQUICTask.java
===================================================================
--- 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/task/ImportNetworkFromPSICQUICTask.java
    2011-12-06 22:18:04 UTC (rev 27718)
+++ 
core3/impl/trunk/webservice-psicquic-client-impl/src/main/java/org/cytoscape/webservice/psicquic/task/ImportNetworkFromPSICQUICTask.java
    2011-12-06 22:55:50 UTC (rev 27719)
@@ -103,7 +103,6 @@
                        manager.addNetwork(network);
                        networks.add(network);
                }
-               taskMonitor.setProgress(1.0d);
                
 
                int retValue = JOptionPane.showConfirmDialog(null, "Do you want 
to create view?");

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