Author: jm
Date: 2012-09-20 12:31:10 -0700 (Thu, 20 Sep 2012)
New Revision: 30443
Added:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/NonVirtualColumnInfo.java
Removed:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumnInfoImpl.java
Modified:
core3/api/trunk/model-api/src/test/java/org/cytoscape/model/AbstractCyTableTest.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumn.java
Log:
Fixes #1465: Renaming virtual column bits now properly updates the associated
VirtualColumnInfo objects.
Modified:
core3/api/trunk/model-api/src/test/java/org/cytoscape/model/AbstractCyTableTest.java
===================================================================
---
core3/api/trunk/model-api/src/test/java/org/cytoscape/model/AbstractCyTableTest.java
2012-09-20 17:59:18 UTC (rev 30442)
+++
core3/api/trunk/model-api/src/test/java/org/cytoscape/model/AbstractCyTableTest.java
2012-09-20 19:31:10 UTC (rev 30443)
@@ -1199,5 +1199,55 @@
row2.set("s", "test2");
assertEquals(2, payloads.size());
}
+
+ @Test
+ public void testVirtualColumnSourceRename() {
+ table2.createColumn("s", String.class, false);
+ table.addVirtualColumn("s1", "s", table2,
table.getPrimaryKey().getName(), true);
+ CyRow row1 = table.getRow(1L);
+ CyRow row2 = table2.getRow(1L);
+
+ String value = "hello";
+ row2.set("s", value);
+ assertEquals(value, row1.get("s1", String.class));
+
+ // Rename the source column
+ table2.getColumn("s").setName("t");
+
+ // Ensure the link didn't break
+ assertEquals(value, row1.get("s1", String.class));
+
+ // Ensure the metadata is updated
+ VirtualColumnInfo info =
table.getColumn("s1").getVirtualColumnInfo();
+ assertEquals("t", info.getSourceColumn());
+ }
+
+ @Test
+ public void testVirtualColumnTargetJoinKeyRename() {
+ String otherkey = "otherkey";
+
+ table2.createColumn("s", String.class, false);
+ table.createColumn(otherkey, Long.class, false);
+ table.addVirtualColumn("s1", "s", table2, otherkey, true);
+ CyRow row1 = table.getRow(1L);
+ CyRow row2 = table2.getRow(2L);
+
+ row1.set(otherkey, 2L);
+
+ String value = "hello";
+ row2.set("s", value);
+ assertEquals(value, row1.get("s1", String.class));
+
+ // Rename the source column
+ table.getColumn(otherkey).setName("newname");
+
+ // Ensure the link didn't break
+ assertEquals(value, row1.get("s1", String.class));
+
+ // Ensure the metadata is updated
+ VirtualColumnInfo info =
table.getColumn("s1").getVirtualColumnInfo();
+ assertEquals("newname", info.getTargetJoinKey());
+
+ }
}
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
2012-09-20 17:59:18 UTC (rev 30442)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
2012-09-20 19:31:10 UTC (rev 30443)
@@ -132,7 +132,7 @@
dependents = new HashMap<String, Set<CyColumn>>();
normalizedColumnNames = new HashMap<String, String>();
- VirtualColumnInfo virtualInfo = new
VirtualColumnInfoImpl(false, null, null, null, null, true);
+ VirtualColumnInfo virtualInfo =
NonVirtualColumnInfo.create(true);
final String normalizedPKName = normalizeColumnName(primaryKey);
// Create the primary key column. Do this explicitly so that
we don't fire an event.
@@ -416,7 +416,7 @@
checkClass(type);
- VirtualColumnInfo virtualInfo = new
VirtualColumnInfoImpl(false, null, null, null, null, isImmutable);
+ VirtualColumnInfo virtualInfo =
NonVirtualColumnInfo.create(isImmutable);
types.put(normalizedColName, new CyColumnImpl(this,
columnName, type,
/* listElementType = */ null,
virtualInfo ,
@@ -461,7 +461,7 @@
checkClass(listElementType);
- VirtualColumnInfo virtualInfo = new
VirtualColumnInfoImpl(false, null, null, null, null, isImmutable);
+ VirtualColumnInfo virtualInfo =
NonVirtualColumnInfo.create(isImmutable);
types.put(normalizedColName, new CyColumnImpl(this,
columnName, List.class,
listElementType,
virtualInfo,
@@ -1026,13 +1026,13 @@
if (sourceJoinKeyType.getType() !=
targetJoinKeyType.getType())
throw new
IllegalArgumentException("\""+sourceColumnName+"\" has a different type from
\""+targetJoinKeyName+"\".");
- VirtualColumnInfo virtualInfo = new
VirtualColumnInfoImpl(true, sourceTable, sourceColumnName,
-
sourceTable.getPrimaryKey().getName(),
-
targetJoinKeyName, isImmutable);
+ VirtualColumn virtualColumn = new
VirtualColumn((CyTableImpl)sourceTable, sourceColumnName, this,
+ sourceTable.getPrimaryKey().getName(),
+ targetJoinKeyName, isImmutable);
targetName = getUniqueColumnName(virtualColumnName);
final CyColumn targetColumn = new CyColumnImpl(this,
targetName, sourceColumn.getType(),
-
sourceColumn.getListElementType(), virtualInfo,
+
sourceColumn.getListElementType(), virtualColumn,
/*
isPrimaryKey = */ false, isImmutable, null);
((CyTableImpl)
sourceTable).addDependent(sourceColumnName, targetColumn);
@@ -1040,9 +1040,7 @@
final String normalizedTargetName =
normalizeColumnName(targetName);
types.put(normalizedTargetName, targetColumn);
attributes.put(normalizedTargetName, new
HashMap<Object, Object>(defaultInitSize));
- virtualColumnMap.put(normalizedTargetName, new
VirtualColumn((CyTableImpl)sourceTable, sourceColumnName, this,
-
sourceTable.getPrimaryKey().getName(),
-
targetJoinKeyName));
+ virtualColumnMap.put(normalizedTargetName,
virtualColumn);
}
eventHelper.fireEvent(new ColumnCreatedEvent(this, targetName));
Copied:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/NonVirtualColumnInfo.java
(from rev 30441,
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumnInfoImpl.java)
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/NonVirtualColumnInfo.java
(rev 0)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/NonVirtualColumnInfo.java
2012-09-20 19:31:10 UTC (rev 30443)
@@ -0,0 +1,56 @@
+package org.cytoscape.model.internal;
+
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.VirtualColumnInfo;
+
+public class NonVirtualColumnInfo implements VirtualColumnInfo {
+
+ private static VirtualColumnInfo IMMUTABLE = new
NonVirtualColumnInfo(true);
+ private static VirtualColumnInfo MUTABLE = new
NonVirtualColumnInfo(false);
+
+ private boolean isImmutable;
+
+ public static VirtualColumnInfo create(boolean isImmutable) {
+ // There are currently two possible variants of this object so
we create
+ // them ahead of time. This reduces our object allocation
overhead.
+ if (isImmutable) {
+ return IMMUTABLE;
+ } else {
+ return MUTABLE;
+ }
+ }
+
+ private NonVirtualColumnInfo(boolean isImmutable) {
+ this.isImmutable = isImmutable;
+ }
+
+ @Override
+ public boolean isVirtual() {
+ return false;
+ }
+
+ @Override
+ public String getSourceColumn() {
+ return null;
+ }
+
+ @Override
+ public String getSourceJoinKey() {
+ return null;
+ }
+
+ @Override
+ public String getTargetJoinKey() {
+ return null;
+ }
+
+ @Override
+ public CyTable getSourceTable() {
+ return null;
+ }
+
+ @Override
+ public boolean isImmutable() {
+ return isImmutable;
+ }
+}
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumn.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumn.java
2012-09-20 17:59:18 UTC (rev 30442)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumn.java
2012-09-20 19:31:10 UTC (rev 30443)
@@ -30,34 +30,34 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
-import org.cytoscape.model.CyRow;
+import org.cytoscape.model.VirtualColumnInfo;
-final class VirtualColumn {
+final class VirtualColumn implements VirtualColumnInfo {
private final CyTableImpl sourceTable;
private final CyColumn sourceColumn;
private final CyTableImpl targetTable;
private final CyColumn sourceJoinColumn;
private final CyColumn targetJoinColumn;
+ private final boolean isImmutable;
VirtualColumn(final CyTableImpl sourceTable, final String
sourceColumnName,
final CyTableImpl targetTable, final String
sourceJoinColumnName,
- final String targetJoinColumnName)
+ final String targetJoinColumnName, boolean isImmutable)
{
this.sourceTable = sourceTable;
this.sourceColumn = sourceTable.getColumn(sourceColumnName);
this.targetTable = targetTable;
this.sourceJoinColumn =
sourceTable.getColumn(sourceJoinColumnName);
this.targetJoinColumn =
targetTable.getColumn(targetJoinColumnName);
+ this.isImmutable = isImmutable;
}
Object getRawValue(final Object targetKey) {
@@ -150,4 +150,34 @@
return results;
}
+
+ @Override
+ public boolean isImmutable() {
+ return isImmutable;
+ }
+
+ @Override
+ public String getSourceColumn() {
+ return sourceColumn.getName();
+ }
+
+ @Override
+ public String getSourceJoinKey() {
+ return sourceJoinColumn.getName();
+ }
+
+ @Override
+ public CyTable getSourceTable() {
+ return sourceTable;
+ }
+
+ @Override
+ public String getTargetJoinKey() {
+ return targetJoinColumn.getName();
+ }
+
+ @Override
+ public boolean isVirtual() {
+ return true;
+ }
}
Deleted:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumnInfoImpl.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumnInfoImpl.java
2012-09-20 17:59:18 UTC (rev 30442)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/VirtualColumnInfoImpl.java
2012-09-20 19:31:10 UTC (rev 30443)
@@ -1,53 +0,0 @@
-package org.cytoscape.model.internal;
-
-import org.cytoscape.model.CyTable;
-import org.cytoscape.model.VirtualColumnInfo;
-
-public class VirtualColumnInfoImpl implements VirtualColumnInfo {
-
- private final boolean isVirtual;
- private final CyTable sourceTable;
- private final String sourceColumn;
- private final String sourceJoinKey;
- private final String targetJoinKey;
- private final boolean isImmutable;
-
- public VirtualColumnInfoImpl(boolean isVirtual, CyTable sourceTable,
String sourceColumn, String sourceJoinKey, String targetJoinKey, boolean
isImmutable) {
- this.isVirtual = isVirtual;
- this.sourceTable = sourceTable;
- this.sourceColumn = sourceColumn;
- this.sourceJoinKey = sourceJoinKey;
- this.targetJoinKey = targetJoinKey;
- this.isImmutable = isImmutable;
- }
-
- @Override
- public boolean isVirtual() {
- return isVirtual;
- }
-
- @Override
- public String getSourceColumn() {
- return sourceColumn;
- }
-
- @Override
- public String getSourceJoinKey() {
- return sourceJoinKey;
- }
-
- @Override
- public String getTargetJoinKey() {
- return targetJoinKey;
- }
-
- @Override
- public CyTable getSourceTable() {
- return sourceTable;
- }
-
- @Override
- public boolean isImmutable() {
- return isImmutable;
- }
-}
--
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.