Author: rozagh
Date: 2012-06-13 16:12:27 -0700 (Wed, 13 Jun 2012)
New Revision: 29558

Modified:
   
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/AbstractNetworkFromSelectionTask.java
   
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTask.java
Log:
fixes #1109 the exception was thrown because of the changes made for bug #965 . 
The data for virtual column does not needed to be cloned. Also, we need to copy 
over the virtual columns as well in the cloned network.

Modified: 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/AbstractNetworkFromSelectionTask.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/AbstractNetworkFromSelectionTask.java
    2012-06-13 23:09:13 UTC (rev 29557)
+++ 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/AbstractNetworkFromSelectionTask.java
    2012-06-13 23:12:27 UTC (rev 29558)
@@ -152,12 +152,13 @@
        private void addColumns(CyTable parentTable, CyTable subTable) {
 
                for (CyColumn col:  parentTable.getColumns()){
-                       VirtualColumnInfo colInfo = col.getVirtualColumnInfo();
-                       if (colInfo.isVirtual())
-                               addVirtualColumn(col, subTable);
-                       else
-                               if (subTable.getColumn(col.getName()) == null)  
        
+                       if (subTable.getColumn(col.getName()) == null){
+                               VirtualColumnInfo colInfo = 
col.getVirtualColumnInfo();
+                               if (colInfo.isVirtual())
+                                       addVirtualColumn(col, subTable);
+                               else
                                        copyColumn(col, subTable);
+                       }
                }
        }
 

Modified: 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTask.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTask.java
    2012-06-13 23:09:13 UTC (rev 29557)
+++ 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTask.java
    2012-06-13 23:12:27 UTC (rev 29558)
@@ -45,6 +45,7 @@
 import org.cytoscape.model.CyRow;
 import org.cytoscape.model.CyTable;
 import org.cytoscape.model.CyIdentifiable;
+import org.cytoscape.model.VirtualColumnInfo;
 import org.cytoscape.session.CyNetworkNaming;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.CyNetworkViewFactory;
@@ -112,10 +113,10 @@
                final CyTable nodeTable = newNet.getDefaultNodeTable();
                final CyTable edgeTable = newNet.getDefaultEdgeTable();
                final CyTable networkTable = newNet.getDefaultNetworkTable();
-                       // copy default columns
-                       cloneColumns(origNet.getDefaultNodeTable(), nodeTable);
-                       cloneColumns(origNet.getDefaultEdgeTable(), edgeTable);
-                       cloneColumns(origNet.getDefaultNetworkTable(), 
networkTable);
+               // copy default columns
+               addColumns(origNet.getDefaultNodeTable(), nodeTable);
+               addColumns(origNet.getDefaultEdgeTable(), edgeTable);
+               addColumns(origNet.getDefaultNetworkTable(), networkTable);
 
                        cloneNodes(origNet, newNet);
                        cloneEdges(origNet, newNet);
@@ -124,7 +125,7 @@
                                        
naming.getSuggestedNetworkTitle(origNet.getRow(origNet).get(CyNetwork.NAME, 
String.class)));
                return newNet;
        }
-
+       
        private void cloneNodes(CyNetwork origNet, CyNetwork newNet) {
                orig2NewNodeMap = new WeakHashMap<CyNode, CyNode>();
                new2OrigNodeMap = new WeakHashMap<CyNode, CyNode>();
@@ -146,28 +147,43 @@
                }
        }
 
-       private void cloneColumns(final CyTable from, final CyTable to) {
-               for (final CyColumn fromColumn : from.getColumns()) {
-                       final CyColumn toColumn = 
to.getColumn(fromColumn.getName());
-                       
-                       if (toColumn == null) {
-                               if 
(List.class.isAssignableFrom(fromColumn.getType()))
-                                       
to.createListColumn(fromColumn.getName(), fromColumn.getListElementType(), 
false);
+       private void addColumns(CyTable parentTable, CyTable subTable) {
+               for (CyColumn col:  parentTable.getColumns()){
+                       if (subTable.getColumn(col.getName()) == null){
+                               VirtualColumnInfo colInfo = 
col.getVirtualColumnInfo();
+                               if (colInfo.isVirtual())
+                                       addVirtualColumn(col, subTable);
                                else
-                                       to.createColumn(fromColumn.getName(), 
fromColumn.getType(), false);
-                       } else if (toColumn.getType() == fromColumn.getType()) {
-                               continue;
-                       } else {
-                               throw new IllegalArgumentException("column of 
same name: " + fromColumn.getName()
-                                               + "but types don't match 
(orig): " + fromColumn.getType().getName() + " (new): "
-                                               + toColumn.getType().getName());
+                                       copyColumn(col, subTable);
                        }
                }
        }
 
+       private void addVirtualColumn (CyColumn col, CyTable subTable){
+               VirtualColumnInfo colInfo = col.getVirtualColumnInfo();
+               CyColumn checkCol= subTable.getColumn(col.getName());
+               if(checkCol == null)
+                       subTable.addVirtualColumn(col.getName(), 
colInfo.getSourceColumn(), colInfo.getSourceTable(), 
colInfo.getTargetJoinKey(), true);
+
+               else
+                       if(!checkCol.getVirtualColumnInfo().isVirtual() ||
+                                       
!checkCol.getVirtualColumnInfo().getSourceTable().equals(colInfo.getSourceTable())
 ||
+                                       
!checkCol.getVirtualColumnInfo().getSourceColumn().equals(colInfo.getSourceColumn()))
+                               subTable.addVirtualColumn(col.getName(), 
colInfo.getSourceColumn(), colInfo.getSourceTable(), 
colInfo.getTargetJoinKey(), true);
+       }
+
+       private void copyColumn(CyColumn col, CyTable subTable) {
+               if (List.class.isAssignableFrom(col.getType()))
+                       subTable.createListColumn(col.getName(), 
col.getListElementType(), false);
+               else
+                       subTable.createColumn(col.getName(), col.getType(), 
false);     
+       }
+       
        private void cloneRow(final CyRow from, final CyRow to) {
-               for (final CyColumn column : from.getTable().getColumns())
-                       to.set(column.getName(), from.getRaw(column.getName()));
+               for (final CyColumn column : from.getTable().getColumns()){
+                       if (!column.getVirtualColumnInfo().isVirtual())
+                               to.set(column.getName(), 
from.getRaw(column.getName()));
+               }
        }
 
 }

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