Author: ruschein
Date: 2011-01-21 10:38:34 -0800 (Fri, 21 Jan 2011)
New Revision: 23541

Modified:
   
core3/model-api/trunk/src/test/java/org/cytoscape/model/AbstractCyTableTest.java
   
core3/model-impl/trunk/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
Log:
Improved virtual table column support.

Modified: 
core3/model-api/trunk/src/test/java/org/cytoscape/model/AbstractCyTableTest.java
===================================================================
--- 
core3/model-api/trunk/src/test/java/org/cytoscape/model/AbstractCyTableTest.java
    2011-01-21 18:31:57 UTC (rev 23540)
+++ 
core3/model-api/trunk/src/test/java/org/cytoscape/model/AbstractCyTableTest.java
    2011-01-21 18:38:34 UTC (rev 23541)
@@ -647,4 +647,25 @@
                assertEquals(matchingRow.get("s1", String.class), "abc");
                assertEquals(matchingRow.get("x", Integer.class), 
Integer.valueOf(33));
        }
+
+       @Test
+       public void testVirtualColumnDelete() {
+               table.createColumn("x", Long.class);
+               table2.createColumn("x2", Long.class);
+               table2.createColumn("s", String.class);
+               table.addVirtualColumn("s1", "s", table2, "x2", "x");
+               assertNotNull(table.getType("s1"));
+               table.deleteColumn("s1");
+               assertNull(table.getType("s1"));
+       }
+
+       @Test
+       public void testVirtualColumnListElementType() {
+               table.createColumn("x", Long.class);
+               table2.createColumn("x2", Long.class);
+               table2.createListColumn("b", Boolean.class);
+               table.addVirtualColumn("b1", "b", table2, "x2", "x");
+               assertEquals("Virtual column list element type should have been 
Boolean!",
+                            Boolean.class, table.getListElementType("b1"));
+       }
 }

Modified: 
core3/model-impl/trunk/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
===================================================================
--- 
core3/model-impl/trunk/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
     2011-01-21 18:31:57 UTC (rev 23540)
+++ 
core3/model-impl/trunk/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
     2011-01-21 18:38:34 UTC (rev 23541)
@@ -290,13 +290,20 @@
        }
 
        @Override
-       public void deleteColumn(String columnName) {
-               if (attributes.containsKey(columnName)) {
+       public void deleteColumn(final String columnName) {
+               final VirtualColumn virtColumn = 
virtualColumnMap.get(columnName);
+               if (attributes.containsKey(columnName) || virtColumn != null) {
                        synchronized(this) {
-                               attributes.remove(columnName);
-                               reverse.remove(columnName);
-                               types.remove(columnName);
-                               listElementTypes.remove(columnName);
+                               if (virtColumn != null) {
+                                       virtualColumnMap.remove(columnName);
+                                       types.remove(columnName);
+                                       listElementTypes.remove(columnName);
+                               } else {
+                                       attributes.remove(columnName);
+                                       reverse.remove(columnName);
+                                       types.remove(columnName);
+                                       listElementTypes.remove(columnName);
+                               }
                        }
 
                        // This event must be synchronous!
@@ -320,8 +327,8 @@
 
                        if (type == List.class)
                                throw new IllegalArgumentException(
-                                                                  "use 
createListColumn() to create List columns instead of createColumn for attribute 
'"
-                                                                  + columnName 
+ "'!");
+                                               "use createListColumn() to 
create List columns instead of createColumn for attribute '"
+                                               + columnName + "'!");
 
                        types.put(columnName, type);
                        attributes.put(columnName, new HashMap<Object, 
Object>());
@@ -818,6 +825,10 @@
                        throw new IllegalArgumentException("\"sourceJoinKey\" 
has a different type from \"targetJoinKey\"!");
 
                types.put(virtualColumn, sourceColumnType);
+               if (sourceColumnType == List.class) {
+                       final Class<?> listElementType = 
sourceTable.getListElementType(sourceColumn);
+                       listElementTypes.put(virtualColumn, listElementType);
+               }
                virtualColumnMap.put(
                        virtualColumn,
                        new VirtualColumn(sourceTable, sourceColumn, this, 
sourceJoinKey, targetJoinKey));

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