Author: clopes
Date: 2012-09-07 15:44:46 -0700 (Fri, 07 Sep 2012)
New Revision: 30339
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/CloneNetworkTask.java
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTaskFactoryImpl.java
Log:
Fixes #1439 (Clone network does not copy node table data to the new network)
Fixes #1441 (Clone network does not copy the network pointers to the new
network)
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-09-07 22:28:56 UTC (rev 30338)
+++
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
2012-09-07 22:44:46 UTC (rev 30339)
@@ -43,6 +43,7 @@
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyNetworkTableManager;
import org.cytoscape.model.CyTableManager;
import org.cytoscape.model.events.NetworkAddedListener;
import org.cytoscape.model.subnetwork.CyRootNetworkManager;
@@ -222,6 +223,7 @@
SynchronousTaskManager<?> synchronousTaskManagerServiceRef =
getService(bc,SynchronousTaskManager.class);
TunableSetter tunableSetterServiceRef =
getService(bc,TunableSetter.class);
CyRootNetworkManager rootNetworkManagerServiceRef =
getService(bc, CyRootNetworkManager.class);
+ CyNetworkTableManager cyNetworkTableManagerServiceRef =
getService(bc, CyNetworkTableManager.class);
CyGroupManager cyGroupManager = getService(bc,
CyGroupManager.class);
CyGroupFactory cyGroupFactory = getService(bc,
CyGroupFactory.class);
@@ -259,7 +261,7 @@
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);
- CloneNetworkTaskFactoryImpl cloneNetworkTaskFactory = new
CloneNetworkTaskFactoryImpl(cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,visualMappingManagerServiceRef,cyNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkNamingServiceRef,cyApplicationManagerServiceRef);
+ CloneNetworkTaskFactoryImpl cloneNetworkTaskFactory = new
CloneNetworkTaskFactoryImpl(cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,visualMappingManagerServiceRef,cyNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkNamingServiceRef,cyApplicationManagerServiceRef,cyNetworkTableManagerServiceRef,rootNetworkManagerServiceRef);
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);
DestroyNetworkTaskFactoryImpl destroyNetworkTaskFactory = new
DestroyNetworkTaskFactoryImpl(cyNetworkManagerServiceRef);
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-09-07 22:28:56 UTC (rev 30338)
+++
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTask.java
2012-09-07 22:44:46 UTC (rev 30339)
@@ -30,7 +30,6 @@
package org.cytoscape.task.internal.creation;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.WeakHashMap;
@@ -38,20 +37,21 @@
import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.model.CyColumn;
import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyNetworkTableManager;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
-import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.VirtualColumnInfo;
+import org.cytoscape.model.subnetwork.CyRootNetwork;
+import org.cytoscape.model.subnetwork.CyRootNetworkManager;
import org.cytoscape.session.CyNetworkNaming;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.view.model.CyNetworkViewManager;
-import org.cytoscape.view.model.View;
-import org.cytoscape.view.presentation.property.BasicVisualLexicon;
import org.cytoscape.view.vizmap.VisualMappingManager;
import org.cytoscape.work.TaskMonitor;
import org.slf4j.Logger;
@@ -69,11 +69,19 @@
private final CyNetworkViewFactory netViewFactory;
private final CyNetworkNaming naming;
private final CyApplicationManager appMgr;
+ private final CyNetworkTableManager netTableMgr;
+ private final CyRootNetworkManager rootNetMgr;
- public CloneNetworkTask(final CyNetwork net, final CyNetworkManager
netmgr,
- final CyNetworkViewManager networkViewManager, final
VisualMappingManager vmm,
- final CyNetworkFactory netFactory, final
CyNetworkViewFactory netViewFactory, final CyNetworkNaming naming,
- final CyApplicationManager appMgr) {
+ public CloneNetworkTask(final CyNetwork net,
+ final CyNetworkManager
netmgr,
+ final
CyNetworkViewManager networkViewManager,
+ final
VisualMappingManager vmm,
+ final CyNetworkFactory
netFactory,
+ final
CyNetworkViewFactory netViewFactory,
+ final CyNetworkNaming
naming,
+ final
CyApplicationManager appMgr,
+ final
CyNetworkTableManager netTableMgr,
+ final
CyRootNetworkManager rootNetMgr) {
super(net, netmgr, networkViewManager);
this.vmm = vmm;
@@ -81,6 +89,8 @@
this.netViewFactory = netViewFactory;
this.naming = naming;
this.appMgr = appMgr;
+ this.netTableMgr = netTableMgr;
+ this.rootNetMgr = rootNetMgr;
}
public void run(TaskMonitor tm) {
@@ -107,69 +117,98 @@
tm.setProgress(1.0);
}
- private CyNetwork cloneNetwork(CyNetwork origNet) {
+ private CyNetwork cloneNetwork(final CyNetwork origNet) {
final CyNetwork newNet =
netFactory.createNetwork(origNet.getSavePolicy());
-
- final CyTable nodeTable = newNet.getDefaultNodeTable();
- final CyTable edgeTable = newNet.getDefaultEdgeTable();
- final CyTable networkTable = newNet.getDefaultNetworkTable();
+
// copy default columns
- addColumns(origNet.getDefaultNodeTable(), nodeTable);
- addColumns(origNet.getDefaultEdgeTable(), edgeTable);
- addColumns(origNet.getDefaultNetworkTable(), networkTable);
+ addColumns(origNet, newNet, CyNetwork.class,
CyNetwork.LOCAL_ATTRS);
+ addColumns(origNet, newNet, CyNode.class,
CyNetwork.LOCAL_ATTRS);
+ addColumns(origNet, newNet, CyEdge.class,
CyNetwork.LOCAL_ATTRS);
- cloneNodes(origNet, newNet);
- cloneEdges(origNet, newNet);
+ cloneNodes(origNet, newNet);
+ cloneEdges(origNet, newNet);
- newNet.getRow(newNet).set(CyNetwork.NAME,
-
naming.getSuggestedNetworkTitle(origNet.getRow(origNet).get(CyNetwork.NAME,
String.class)));
+ newNet.getRow(newNet).set(CyNetwork.NAME,
+
naming.getSuggestedNetworkTitle(origNet.getRow(origNet).get(CyNetwork.NAME,
String.class)));
+
return newNet;
}
- private void cloneNodes(CyNetwork origNet, CyNetwork newNet) {
+ private void cloneNodes(final CyNetwork origNet, final CyNetwork
newNet) {
orig2NewNodeMap = new WeakHashMap<CyNode, CyNode>();
new2OrigNodeMap = new WeakHashMap<CyNode, CyNode>();
+
for (final CyNode origNode : origNet.getNodeList()) {
final CyNode newNode = newNet.addNode();
orig2NewNodeMap.put(origNode, newNode);
new2OrigNodeMap.put(newNode, origNode);
- cloneRow(origNet.getRow(origNode),
newNet.getRow(newNode));
+ cloneRow(newNet, CyNode.class, origNet.getRow(origNode,
CyNetwork.LOCAL_ATTRS), newNet.getRow(newNode, CyNetwork.LOCAL_ATTRS));
+ newNode.setNetworkPointer(origNode.getNetworkPointer());
}
}
- private void cloneEdges(CyNetwork origNet, CyNetwork newNet) {
+ private void cloneEdges(final CyNetwork origNet, final CyNetwork
newNet) {
for (final CyEdge origEdge : origNet.getEdgeList()) {
final CyNode newSource =
orig2NewNodeMap.get(origEdge.getSource());
final CyNode newTarget =
orig2NewNodeMap.get(origEdge.getTarget());
final boolean newDirected = origEdge.isDirected();
final CyEdge newEdge = newNet.addEdge(newSource,
newTarget, newDirected);
- cloneRow(origNet.getRow(origEdge),
newNet.getRow(newEdge));
+ cloneRow(newNet, CyEdge.class, origNet.getRow(origEdge,
CyNetwork.LOCAL_ATTRS), newNet.getRow(newEdge, CyNetwork.LOCAL_ATTRS));
}
}
- 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
- copyColumn(col, subTable);
+ private void addColumns(final CyNetwork origNet,
+ final CyNetwork newNet,
+ final Class<? extends
CyIdentifiable> tableType,
+ final String namespace)
{
+ final CyTable from = origNet.getTable(tableType, namespace);
+ final CyTable to = newNet.getTable(tableType, namespace);
+ final CyRootNetwork origRoot =
rootNetMgr.getRootNetwork(origNet);
+ final CyRootNetwork newRoot = rootNetMgr.getRootNetwork(newNet);
+ final Map<String, CyTable> origRootTables =
netTableMgr.getTables(origRoot, tableType);
+
+ for (final CyColumn col : from.getColumns()){
+ final String name = col.getName();
+
+ if (to.getColumn(name) == null){
+ final VirtualColumnInfo info =
col.getVirtualColumnInfo();
+
+ if (info.isVirtual()) {
+ if
(origRootTables.containsValue(info.getSourceTable())) {
+ // If the virtual column is
from a root-network table, do NOT set this virtual column directly to
+ // the new table:
+ // Get the original column (not
the virtual one!)
+ final CyColumn origCol =
info.getSourceTable().getColumn(info.getSourceColumn());
+ // Copy the original column to
the root-network's table first
+ final CyTable newRootTable =
newRoot.getTable(tableType, namespace);
+
+ if
(newRootTable.getColumn(origCol.getName()) == null)
+ copyColumn(origCol,
newRootTable);
+
+ // Now we can add the new
"root" column as a virtual one to the new network's table
+ to.addVirtualColumn(name,
origCol.getName(), newRootTable, CyIdentifiable.SUID, col.isImmutable());
+ } else {
+ // Otherwise (e.g. virtual
column from a global table) just add the virtual column directly
+ addVirtualColumn(col, to);
+ }
+ } else {
+ // Not a virtual column, so just copy
it to the new network's table
+ copyColumn(col, to);
+ }
}
}
}
- private void addVirtualColumn (CyColumn col, CyTable subTable){
+ private void addVirtualColumn(CyColumn col, CyTable subTable){
VirtualColumnInfo colInfo = col.getVirtualColumnInfo();
CyColumn checkCol= subTable.getColumn(col.getName());
- if(checkCol == null)
+
+ if (checkCol == null)
subTable.addVirtualColumn(col.getName(),
colInfo.getSourceColumn(), colInfo.getSourceTable(),
colInfo.getTargetJoinKey(), true);
-
- else
- if(!checkCol.getVirtualColumnInfo().isVirtual() ||
+ 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);
+ subTable.addVirtualColumn(col.getName(),
colInfo.getSourceColumn(), colInfo.getSourceTable(),
colInfo.getTargetJoinKey(), true);
}
private void copyColumn(CyColumn col, CyTable subTable) {
@@ -179,11 +218,23 @@
subTable.createColumn(col.getName(), col.getType(),
false);
}
- private void cloneRow(final CyRow from, final CyRow to) {
- for (final CyColumn column : from.getTable().getColumns()){
- if (!column.getVirtualColumnInfo().isVirtual())
- to.set(column.getName(),
from.getRaw(column.getName()));
+ private void cloneRow(final CyNetwork newNet, final Class<? extends
CyIdentifiable> tableType, final CyRow from,
+ final CyRow to) {
+ final CyRootNetwork newRoot = rootNetMgr.getRootNetwork(newNet);
+ Map<String, CyTable> rootTables =
netTableMgr.getTables(newRoot, tableType);
+
+ for (final CyColumn col : to.getTable().getColumns()){
+ final String name = col.getName();
+
+ if (name.equals(CyIdentifiable.SUID))
+ continue;
+
+ final VirtualColumnInfo info =
col.getVirtualColumnInfo();
+
+ // If it's a virtual column whose source table is
assigned to the new root-network,
+ // then we have to set the value, because the rows of
the new root table may not have been copied yet
+ if (!info.isVirtual() ||
rootTables.containsValue(info.getSourceTable()))
+ to.set(name, from.getRaw(name));
}
}
-
}
Modified:
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTaskFactoryImpl.java
===================================================================
---
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTaskFactoryImpl.java
2012-09-07 22:28:56 UTC (rev 30338)
+++
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/CloneNetworkTaskFactoryImpl.java
2012-09-07 22:44:46 UTC (rev 30339)
@@ -33,6 +33,8 @@
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyNetworkTableManager;
+import org.cytoscape.model.subnetwork.CyRootNetworkManager;
import org.cytoscape.session.CyNetworkNaming;
import org.cytoscape.task.AbstractNetworkTaskFactory;
import org.cytoscape.task.create.CloneNetworkTaskFactory;
@@ -49,11 +51,18 @@
private final CyNetworkViewFactory netViewFactory;
private final CyNetworkNaming naming;
private final CyApplicationManager appMgr;
+ private final CyNetworkTableManager netTableMgr;
+ private final CyRootNetworkManager rootNetMgr;
- public CloneNetworkTaskFactoryImpl(final CyNetworkManager networkMgr,
final CyNetworkViewManager networkViewMgr,
- final VisualMappingManager vmm, final CyNetworkFactory
netFactory,
- final CyNetworkViewFactory netViewFactory, final
CyNetworkNaming naming,
- final CyApplicationManager appMgr) {
+ public CloneNetworkTaskFactoryImpl(final CyNetworkManager networkMgr,
+ final
CyNetworkViewManager networkViewMgr,
+ final
VisualMappingManager vmm,
+ final
CyNetworkFactory netFactory,
+ final
CyNetworkViewFactory netViewFactory,
+ final
CyNetworkNaming naming,
+ final
CyApplicationManager appMgr,
+ final
CyNetworkTableManager netTableMgr,
+ final
CyRootNetworkManager rootNetMgr) {
this.networkMgr = networkMgr;
this.networkViewMgr = networkViewMgr;
this.vmm = vmm;
@@ -61,10 +70,12 @@
this.netViewFactory = netViewFactory;
this.naming = naming;
this.appMgr = appMgr;
+ this.netTableMgr = netTableMgr;
+ this.rootNetMgr = rootNetMgr;
}
public TaskIterator createTaskIterator(CyNetwork network) {
return new TaskIterator(2,new CloneNetworkTask(network, networkMgr,
networkViewMgr, vmm, netFactory,
- netViewFactory, naming, appMgr));
+ netViewFactory, naming, appMgr, netTableMgr,
rootNetMgr));
}
}
--
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.