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.

Reply via email to