Author: jm
Date: 2012-08-14 08:52:22 -0700 (Tue, 14 Aug 2012)
New Revision: 30186
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/AbstractTableFacade.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/LocalTableFacade.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/SharedTableFacade.java
Log:
Fixes #1367: Added facade for CyColumn which properly handles deletions and
renames
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/AbstractTableFacade.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/AbstractTableFacade.java
2012-08-14 14:58:01 UTC (rev 30185)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/AbstractTableFacade.java
2012-08-14 15:52:22 UTC (rev 30186)
@@ -32,35 +32,15 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-import org.cytoscape.equations.Equation;
-import org.cytoscape.equations.Interpreter;
-import org.cytoscape.event.CyEventHelper;
-import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyColumn;
import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
+import org.cytoscape.model.SUIDFactory;
import org.cytoscape.model.SavePolicy;
-import org.cytoscape.model.SUIDFactory;
import org.cytoscape.model.VirtualColumnInfo;
-import org.cytoscape.model.events.ColumnCreatedEvent;
-import org.cytoscape.model.events.ColumnDeletedEvent;
-import org.cytoscape.model.events.ColumnNameChangedEvent;
-import org.cytoscape.model.events.RowSetRecord;
-import org.cytoscape.model.events.RowsCreatedEvent;
-import org.cytoscape.model.events.RowsSetEvent;
-import org.cytoscape.model.events.TableAddedEvent;
-import org.cytoscape.model.events.TableAddedListener;
-import org.cytoscape.model.events.TablePrivacyChangedEvent;
-import org.cytoscape.model.events.TableTitleChangedEvent;
-
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.HashMultimap;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,12 +53,14 @@
private static final Logger logger =
LoggerFactory.getLogger(AbstractTableFacade.class);
private final CyTable actual;
private final Long suid;
- private final Map<CyRow,CyRow> facadeRows;
+ private final Map<CyRow,CyRow> facadeRows;
+ private final Map<CyColumn,CyColumn> facadeColumns;
public AbstractTableFacade(CyTable actual) {
this.actual = actual;
this.suid = Long.valueOf(SUIDFactory.getNextSUID());
this.facadeRows = new HashMap<CyRow,CyRow>();
+ this.facadeColumns = new HashMap<CyColumn,CyColumn>();
}
public Long getSUID() {
@@ -110,13 +92,35 @@
}
public CyColumn getColumn(String columnName) {
- return actual.getColumn(columnName);
+ CyColumn actualColumn = actual.getColumn(columnName);
+ if ( actualColumn == null )
+ return null;
+
+ return getFacadeColumn(actualColumn);
}
+ private CyColumn getFacadeColumn(CyColumn actualColumn) {
+ CyColumn ret = facadeColumns.get(actualColumn);
+ if ( ret == null ) {
+ ret = new ColumnFacade(actualColumn);
+ facadeColumns.put(actualColumn,ret);
+ }
+
+ return ret;
+ }
+
public Collection<CyColumn> getColumns() {
- return actual.getColumns();
+ return getFacadeColumns(actual.getColumns());
}
+ private Collection<CyColumn> getFacadeColumns(Collection<CyColumn>
columns) {
+ List<CyColumn> facadeColumns = new ArrayList<CyColumn>(
columns.size() );
+ for ( CyColumn column : columns )
+ facadeColumns.add( getFacadeColumn(column) );
+
+ return facadeColumns;
+ }
+
public CyRow getRow(Object primaryKey) {
CyRow actualRow = actual.getRow(primaryKey);
if ( actualRow == null )
@@ -185,6 +189,8 @@
actual.swap(otherTable);
}
+ protected abstract void updateColumnName(String oldName, String
newName);
+
private class RowFacade implements CyRow {
private final CyRow actualRow;
private final CyTable table;
@@ -264,4 +270,63 @@
return "FACADE of: " + actualRow.toString();
}
}
+
+ private class ColumnFacade implements CyColumn {
+ private final CyColumn actualColumn;
+
+ public ColumnFacade(CyColumn actualColumn) {
+ this.actualColumn = actualColumn;
+ }
+
+ @Override
+ public String getName() {
+ return actualColumn.getName();
+ }
+
+ @Override
+ public void setName(String newName) {
+ updateColumnName(actualColumn.getName(), newName);
+ }
+
+ @Override
+ public Class<?> getType() {
+ return actualColumn.getType();
+ }
+
+ @Override
+ public Class<?> getListElementType() {
+ return actualColumn.getListElementType();
+ }
+
+ @Override
+ public boolean isPrimaryKey() {
+ return actualColumn.isPrimaryKey();
+ }
+
+ @Override
+ public boolean isImmutable() {
+ return actualColumn.isImmutable();
+ }
+
+ @Override
+ public CyTable getTable() {
+ return AbstractTableFacade.this;
+ }
+
+ @Override
+ public <T> List<T> getValues(Class<? extends T> type) {
+ return actualColumn.getValues(type);
+ }
+
+ @Override
+ public VirtualColumnInfo getVirtualColumnInfo() {
+ return actualColumn.getVirtualColumnInfo();
+ }
+
+ @Override
+ public Object getDefaultValue() {
+ return actualColumn.getDefaultValue();
+ }
+
+ }
}
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/LocalTableFacade.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/LocalTableFacade.java
2012-08-14 14:58:01 UTC (rev 30185)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/LocalTableFacade.java
2012-08-14 15:52:22 UTC (rev 30186)
@@ -29,38 +29,10 @@
package org.cytoscape.model.internal;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.cytoscape.equations.Equation;
-import org.cytoscape.equations.Interpreter;
-import org.cytoscape.event.CyEventHelper;
import org.cytoscape.model.CyIdentifiable;
-import org.cytoscape.model.CyColumn;
-import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
-import org.cytoscape.model.SavePolicy;
-import org.cytoscape.model.SUIDFactory;
-import org.cytoscape.model.VirtualColumnInfo;
-import org.cytoscape.model.events.ColumnCreatedEvent;
-import org.cytoscape.model.events.ColumnDeletedEvent;
-import org.cytoscape.model.events.ColumnNameChangedEvent;
-import org.cytoscape.model.events.RowSetRecord;
-import org.cytoscape.model.events.RowsCreatedEvent;
-import org.cytoscape.model.events.RowsSetEvent;
-import org.cytoscape.model.events.TableAddedEvent;
-import org.cytoscape.model.events.TableAddedListener;
-import org.cytoscape.model.events.TablePrivacyChangedEvent;
-import org.cytoscape.model.events.TableTitleChangedEvent;
-
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.HashMultimap;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -124,4 +96,9 @@
public void addVirtualColumns(CyTable sourceTable, String
targetJoinKey, boolean isImmutable) {
shared.addVirtualColumns(sourceTable, targetJoinKey,
isImmutable);
}
+
+ @Override
+ protected void updateColumnName(String oldName, String newName) {
+ shared.getColumn(oldName).setName(newName);
+ }
}
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/SharedTableFacade.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/SharedTableFacade.java
2012-08-14 14:58:01 UTC (rev 30185)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/SharedTableFacade.java
2012-08-14 15:52:22 UTC (rev 30186)
@@ -30,41 +30,13 @@
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.cytoscape.equations.Equation;
-import org.cytoscape.equations.Interpreter;
-import org.cytoscape.event.CyEventHelper;
-import org.cytoscape.model.CyColumn;
-import org.cytoscape.model.CyRow;
-import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyNetwork;
-import org.cytoscape.model.SavePolicy;
-import org.cytoscape.model.SUIDFactory;
import org.cytoscape.model.CyNetworkTableManager;
-import org.cytoscape.model.CyIdentifiable;
+import org.cytoscape.model.CyTable;
import org.cytoscape.model.subnetwork.CyRootNetwork;
-import org.cytoscape.model.CyNetwork;
-import org.cytoscape.model.VirtualColumnInfo;
-import org.cytoscape.model.events.ColumnCreatedEvent;
-import org.cytoscape.model.events.ColumnDeletedEvent;
-import org.cytoscape.model.events.ColumnNameChangedEvent;
-import org.cytoscape.model.events.RowSetRecord;
-import org.cytoscape.model.events.RowsCreatedEvent;
-import org.cytoscape.model.events.RowsSetEvent;
-import org.cytoscape.model.events.TableAddedEvent;
-import org.cytoscape.model.events.TableAddedListener;
-import org.cytoscape.model.events.TablePrivacyChangedEvent;
-import org.cytoscape.model.events.TableTitleChangedEvent;
-
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.HashMultimap;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -164,4 +136,11 @@
for ( CyTable local : localTables() )
local.addVirtualColumns(sourceTable, targetJoinKey,
isImmutable);
}
+
+ @Override
+ protected void updateColumnName(String oldName, String newName) {
+ for ( CyTable local : localTables() )
+ local.getColumn(oldName).setName(newName);
+ shared.getColumn(oldName).setName(newName);
+ }
}
--
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.