Author: pwang
Date: 2012-10-19 16:54:31 -0700 (Fri, 19 Oct 2012)
New Revision: 30687

Modified:
   
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
   
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTask.java
   
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskFactoryImpl.java
   
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskTest.java
Log:
Fixed bug#1505

Modified: 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
  2012-10-19 20:02:40 UTC (rev 30686)
+++ 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
  2012-10-19 23:54:31 UTC (rev 30687)
@@ -260,7 +260,7 @@
                UnHideAllTaskFactoryImpl unHideAllTaskFactory = new 
UnHideAllTaskFactoryImpl(undoSupportServiceRef,cyEventHelperRef,visualMappingManagerServiceRef);
                UnHideAllNodesTaskFactoryImpl unHideAllNodesTaskFactory = new 
UnHideAllNodesTaskFactoryImpl(undoSupportServiceRef,cyEventHelperRef,visualMappingManagerServiceRef);
                UnHideAllEdgesTaskFactoryImpl unHideAllEdgesTaskFactory = new 
UnHideAllEdgesTaskFactoryImpl(undoSupportServiceRef,cyEventHelperRef,visualMappingManagerServiceRef);
-               NewEmptyNetworkTaskFactoryImpl newEmptyNetworkTaskFactory = new 
NewEmptyNetworkTaskFactoryImpl(cyNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyNetworkNamingServiceRef,synchronousTaskManagerServiceRef,visualMappingManagerServiceRef);
+               NewEmptyNetworkTaskFactoryImpl newEmptyNetworkTaskFactory = new 
NewEmptyNetworkTaskFactoryImpl(cyNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyNetworkNamingServiceRef,synchronousTaskManagerServiceRef,visualMappingManagerServiceRef,
 cyRootNetworkFactoryServiceRef, cyApplicationManagerServiceRef);
                CloneNetworkTaskFactoryImpl cloneNetworkTaskFactory = new 
CloneNetworkTaskFactoryImpl(cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,visualMappingManagerServiceRef,cyNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkNamingServiceRef,cyApplicationManagerServiceRef,cyNetworkTableManagerServiceRef,rootNetworkManagerServiceRef,cyGroupManager,cyGroupFactory);
                NewNetworkSelectedNodesEdgesTaskFactoryImpl 
newNetworkSelectedNodesEdgesTaskFactory = new 
NewNetworkSelectedNodesEdgesTaskFactoryImpl(undoSupportServiceRef,cyRootNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyNetworkNamingServiceRef,visualMappingManagerServiceRef,cyApplicationManagerServiceRef,cyEventHelperRef);
                NewNetworkSelectedNodesOnlyTaskFactoryImpl 
newNetworkSelectedNodesOnlyTaskFactory = new 
NewNetworkSelectedNodesOnlyTaskFactoryImpl(undoSupportServiceRef,cyRootNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyNetworkNamingServiceRef,visualMappingManagerServiceRef,cyApplicationManagerServiceRef,cyEventHelperRef);

Modified: 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTask.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTask.java
 2012-10-19 20:02:40 UTC (rev 30686)
+++ 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTask.java
 2012-10-19 23:54:31 UTC (rev 30687)
@@ -30,9 +30,22 @@
 package org.cytoscape.task.internal.creation;
 
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.cytoscape.application.CyApplicationManager;
+import org.cytoscape.model.CyColumn;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNetworkFactory;
 import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyTableUtil;
+import org.cytoscape.model.subnetwork.CyRootNetwork;
+import org.cytoscape.model.subnetwork.CyRootNetworkManager;
+import org.cytoscape.model.subnetwork.CySubNetwork;
 import org.cytoscape.session.CyNetworkNaming;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.CyNetworkViewFactory;
@@ -40,7 +53,10 @@
 import org.cytoscape.view.vizmap.VisualMappingManager;
 import org.cytoscape.view.vizmap.VisualStyle;
 import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.ProvidesTitle;
 import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.Tunable;
+import org.cytoscape.work.util.ListSingleSelection;
 
 
 /**
@@ -48,37 +64,184 @@
  */
 public class NewEmptyNetworkTask extends AbstractTask {
 
-       private final CyNetworkFactory cnf;
-       private final CyNetworkViewFactory cnvf;
        private final CyNetworkNaming namingUtil; 
-       private final CyNetworkManager networkManager;
        private final CyNetworkViewManager networkViewManager;
        private final VisualMappingManager vmm;
+       private final CyApplicationManager cyApplicationManager;
        
        private boolean cancel;
        private CyNetworkView view;
+
+       //
+       public static final String CRERATE_NEW_COLLECTION_STRING ="Create new 
network collection";
+
+       protected final CyNetworkViewFactory cyNetworkViewFactory;
+       protected final CyNetworkFactory cyNetworkFactory;
+
+       protected final CyNetworkManager cyNetworkManager;
+       protected final CyRootNetworkManager cyRootNetworkManager;
+
+       //******** tunables ********************
+
+       public ListSingleSelection<String> rootNetworkList;
+       @Tunable(description = "Network Collection" ,groups=" ")
+       public ListSingleSelection<String> getRootNetworkList(){
+               return rootNetworkList;
+       }
+       public void setRootNetworkList (ListSingleSelection<String> roots){
+               if 
(rootNetworkList.getSelectedValue().equalsIgnoreCase(CRERATE_NEW_COLLECTION_STRING)){
+                       // set default
+                       List<String> colNames = new ArrayList<String>();
+                       colNames.add("shared name");
+                       targetColumnList = new 
ListSingleSelection<String>(colNames);
+                       return;
+               }
+               targetColumnList = 
getTargetColumns(name2RootMap.get(rootNetworkList.getSelectedValue()));
+       }
+
+       public ListSingleSelection<String> sourceColumnList;
+       @Tunable(description = "Mapping Column for New Network:", groups=" ")
+       public ListSingleSelection<String> getSourceColumnList(){
+               return sourceColumnList;
+       }
+       public void setSourceColumnList(ListSingleSelection<String> colList){
+               this.sourceColumnList = colList;
+       }
        
+       public ListSingleSelection<String> targetColumnList;
+       @Tunable(description = "Mapping Column for Existing Network:",groups=" 
", listenForChange={"RootNetworkList"})
+       public ListSingleSelection<String> getTargetColumnList(){
+               return targetColumnList;
+       }
+       public void setTargetColumnList(ListSingleSelection<String> colList){
+               this.targetColumnList = colList;
 
+               // looks like this does not have any effect, is this a bug?
+               this.targetColumnList.setSelectedValue("shared name");
+       }
+       
+       
+       @ProvidesTitle
+       public String getTitle() {
+               return "Create New Network ";
+       }
+
+       
+       public ListSingleSelection<String> getTargetColumns (CyNetwork network) 
{
+               CyTable selectedTable = network.getTable(CyNode.class, 
CyRootNetwork.SHARED_ATTRS);
+
+               List<String> colNames = new ArrayList<String>();
+               
+               // Work-around to make the "shared name" the first in the list
+               boolean containSharedName = false;
+               // check if "shared name" column exist
+               if (CyTableUtil.getColumnNames(selectedTable).contains("shared 
name")){
+                       containSharedName = true;
+                       colNames.add("shared name");
+               }
+               
+               for(CyColumn col: selectedTable.getColumns()) {
+                       // Exclude SUID from the mapping key list
+                       if (col.getName().equalsIgnoreCase("SUID")){
+                               continue;
+                       }
+                       
+                       if (col.getName().equalsIgnoreCase("shared name") && 
containSharedName){
+                               // "shared name" is already added in the first
+                               continue;
+                       }
+                       colNames.add(col.getName());
+               }
+               
+               ListSingleSelection<String> columns = new 
ListSingleSelection<String>(colNames);
+               
+               return columns;
+       }
+
+       
+       protected HashMap<String, CyRootNetwork> name2RootMap;
+       protected Map<Object, CyNode> nMap = new HashMap<Object, CyNode>(10000);
+
        public NewEmptyNetworkTask(CyNetworkFactory cnf, CyNetworkViewFactory 
cnvf, CyNetworkManager netmgr,
                                   final CyNetworkViewManager 
networkViewManager, final CyNetworkNaming namingUtil,
-                                  final VisualMappingManager vmm) {
-               this.networkManager = netmgr;
+                                  final VisualMappingManager vmm, final 
CyRootNetworkManager cyRootNetworkManager, final CyApplicationManager 
cyApplicationManager) {
+               this.cyNetworkManager = netmgr;
                this.networkViewManager = networkViewManager;
-               this.cnf = cnf;
-               this.cnvf = cnvf;
+               this.cyNetworkFactory = cnf;
+               this.cyNetworkViewFactory = cnvf;
                this.namingUtil = namingUtil;
                this.vmm = vmm;
+               this.cyRootNetworkManager = cyRootNetworkManager;
+               this.cyApplicationManager = cyApplicationManager;
+               
+               // initialize the network Collection
+               this.name2RootMap = getRootNetworkMap(this.cyNetworkManager, 
this.cyRootNetworkManager);
+               
+               List<String> rootNames = new ArrayList<String>();
+               rootNames.add(CRERATE_NEW_COLLECTION_STRING);
+               rootNames.addAll(name2RootMap.keySet());
+               rootNetworkList = new ListSingleSelection<String>(rootNames);
+               rootNetworkList.setSelectedValue(rootNames.get(0));
+               
+               final List<CyNetwork> selectedNetworks = 
cyApplicationManager.getSelectedNetworks();
+
+               if (selectedNetworks != null && selectedNetworks.size() > 0){
+                       CyNetwork selectedNetwork = 
this.cyApplicationManager.getSelectedNetworks().get(0);
+                       String rootName = "";
+                       if (selectedNetwork instanceof CySubNetwork){
+                               CySubNetwork subnet = (CySubNetwork) 
selectedNetwork;
+                               CyRootNetwork rootNet = subnet.getRootNetwork();
+                               rootName = 
rootNet.getRow(rootNet).get(CyNetwork.NAME, String.class);
+                       } else {
+                               // it is a root network
+                               rootName = 
selectedNetwork.getRow(selectedNetwork).get(CyNetwork.NAME, String.class);
+                       }
+
+                       rootNetworkList.setSelectedValue(rootName);
+               }
+
+               // initialize target attribute list
+               List<String> colNames_target = new ArrayList<String>();
+               colNames_target.add("shared name");
+               this.targetColumnList = new 
ListSingleSelection<String>(colNames_target);
+       
+               // initialize source attribute list
+               List<String> colNames_source = new ArrayList<String>();
+               colNames_source.add("shared name");
+               this.sourceColumnList = new 
ListSingleSelection<String>(colNames_source);
        }
 
        public void run(TaskMonitor tm) {
                tm.setProgress(0.0);
-               final CyNetwork newNet = cnf.createNetwork();
+               
+               String networkCollectionName =  
this.rootNetworkList.getSelectedValue().toString();
+
+               CySubNetwork subNetwork;
+               if 
(networkCollectionName.equalsIgnoreCase(CRERATE_NEW_COLLECTION_STRING)){
+                       // This is a new network collection, create a root 
network and a subnetwork, which is a base subnetwork
+                       CyNetwork rootNetwork = 
cyNetworkFactory.createNetwork();
+                       subNetwork = 
this.cyRootNetworkManager.getRootNetwork(rootNetwork).addSubNetwork();
+               }
+               else {
+                       // Add a new subNetwork to the given collection
+                       subNetwork = 
this.name2RootMap.get(networkCollectionName).addSubNetwork();
+               }
+
                tm.setProgress(0.2);
-               newNet.getRow(newNet).set(CyNetwork.NAME, 
namingUtil.getSuggestedNetworkTitle("Network"));
+               
+               String networkName = 
namingUtil.getSuggestedNetworkTitle("Network");
+               subNetwork.getRow(subNetwork).set(CyNetwork.NAME, networkName);
+
+               if 
(networkCollectionName.equalsIgnoreCase(CRERATE_NEW_COLLECTION_STRING)){
+                       // Set the name of new root network
+                       CyNetwork rootNetwork = subNetwork.getRootNetwork();
+                       rootNetwork.getRow(rootNetwork).set(CyNetwork.NAME, 
networkName);
+               }
+               
                tm.setProgress(0.4);
-               view = cnvf.createNetworkView(newNet);          
+               view = cyNetworkViewFactory.createNetworkView(subNetwork);      
        
                tm.setProgress(0.6);
-               networkManager.addNetwork(newNet);
+               cyNetworkManager.addNetwork(subNetwork);
                tm.setProgress(0.8);
                final VisualStyle style = vmm.getCurrentVisualStyle(); // get 
the current style before registering the view!
                networkViewManager.addNetworkView(view);
@@ -103,4 +266,18 @@
                        view.updateView();
                }
        }
+       
+       public static HashMap<String, CyRootNetwork> 
getRootNetworkMap(CyNetworkManager cyNetworkManager, CyRootNetworkManager 
cyRootNetworkManager) {
+
+               HashMap<String, CyRootNetwork> name2RootMap = new 
HashMap<String, CyRootNetwork>();
+
+               for (CyNetwork net : cyNetworkManager.getNetworkSet()){
+                       final CyRootNetwork rootNet = 
cyRootNetworkManager.getRootNetwork(net);
+                       if (!name2RootMap.containsValue(rootNet ) )
+                               
name2RootMap.put(rootNet.getRow(rootNet).get(CyRootNetwork.NAME, String.class), 
rootNet);
+               }
+
+               return name2RootMap;
+       }
+
 }

Modified: 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskFactoryImpl.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskFactoryImpl.java
      2012-10-19 20:02:40 UTC (rev 30686)
+++ 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskFactoryImpl.java
      2012-10-19 23:54:31 UTC (rev 30687)
@@ -29,8 +29,10 @@
  */
 package org.cytoscape.task.internal.creation;  
 
+import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.model.CyNetworkFactory;
 import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.subnetwork.CyRootNetworkManager;
 import org.cytoscape.session.CyNetworkNaming;
 import org.cytoscape.task.create.NewEmptyNetworkViewFactory;
 import org.cytoscape.view.model.CyNetworkView;
@@ -49,11 +51,13 @@
        private final CyNetworkNaming namingUtil;
        private final SynchronousTaskManager<?> syncTaskMgr;
        private final VisualMappingManager vmm;
-
+       private final CyRootNetworkManager cyRootNetworkManager;
+       private final CyApplicationManager cyApplicationManager;
+       
        public NewEmptyNetworkTaskFactoryImpl(final CyNetworkFactory cnf, final 
CyNetworkViewFactory cnvf, 
                        final CyNetworkManager netMgr, final 
CyNetworkViewManager networkViewManager, 
                        final CyNetworkNaming namingUtil, final 
SynchronousTaskManager<?> syncTaskMgr,
-                       final VisualMappingManager vmm) {
+                       final VisualMappingManager vmm, final 
CyRootNetworkManager cyRootNetworkManager, final CyApplicationManager 
cyApplicationManager) {
                this.cnf = cnf;
                this.cnvf = cnvf;
                this.netMgr = netMgr;
@@ -61,6 +65,8 @@
                this.namingUtil = namingUtil;
                this.syncTaskMgr = syncTaskMgr;
                this.vmm = vmm;
+               this.cyRootNetworkManager = cyRootNetworkManager;
+               this.cyApplicationManager = cyApplicationManager;
        }
 
        public TaskIterator createTaskIterator() {
@@ -68,7 +74,7 @@
        } 
 
        private NewEmptyNetworkTask createTask() {
-               return new NewEmptyNetworkTask(cnf, cnvf, netMgr, 
networkViewMgr, namingUtil, vmm);
+               return new NewEmptyNetworkTask(cnf, cnvf, netMgr, 
networkViewMgr, namingUtil, vmm, cyRootNetworkManager, cyApplicationManager);
        }
        
        public CyNetworkView createNewEmptyNetworkView() {

Modified: 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskTest.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskTest.java
     2012-10-19 20:02:40 UTC (rev 30686)
+++ 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskTest.java
     2012-10-19 23:54:31 UTC (rev 30687)
@@ -3,11 +3,13 @@
 import static org.mockito.Matchers.*;
 import static org.mockito.Mockito.*;
 
+import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.ding.NetworkViewTestSupport;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNetworkFactory;
 import org.cytoscape.model.CyNetworkManager;
 import org.cytoscape.model.NetworkTestSupport;
+import org.cytoscape.model.subnetwork.CyRootNetworkManager;
 import org.cytoscape.session.CyNetworkNaming;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.CyNetworkViewFactory;
@@ -27,7 +29,10 @@
 
        private CyNetworkFactory cnf = support.getNetworkFactory();
        private CyNetworkViewFactory cnvf = viewSupport.getNetworkViewFactory();
-
+       private CyRootNetworkManager cyroot = support.getRootNetworkFactory();
+       
+       private CyApplicationManager appManager = 
mock(CyApplicationManager.class);
+       
        @Mock
        private CyNetworkManager netMgr;
        @Mock
@@ -47,7 +52,7 @@
 
        @Test
        public void testNewEmptyNetworkTask() throws Exception {
-               final NewEmptyNetworkTask task = new NewEmptyNetworkTask(cnf, 
cnvf, netMgr, netViewMgr, namingUtil, vmm);
+               final NewEmptyNetworkTask task = new NewEmptyNetworkTask(cnf, 
cnvf, netMgr, netViewMgr, namingUtil, vmm, cyroot, appManager);
                final TaskMonitor taskMonitor = mock(TaskMonitor.class);
                task.run(taskMonitor);
 

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