Author: ruschein
Date: 2010-12-21 16:27:57 -0800 (Tue, 21 Dec 2010)
New Revision: 23260
Modified:
core3/table-browser-impl/trunk/pom.xml
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/TableBrowser.java
core3/table-browser-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
core3/table-browser-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
Log:
Work in progress.
Modified: core3/table-browser-impl/trunk/pom.xml
===================================================================
--- core3/table-browser-impl/trunk/pom.xml 2010-12-21 21:04:24 UTC (rev
23259)
+++ core3/table-browser-impl/trunk/pom.xml 2010-12-22 00:27:57 UTC (rev
23260)
@@ -103,5 +103,10 @@
<artifactId>event-api</artifactId>
<version>3.0.0-alpha2-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.cytoscape</groupId>
+ <artifactId>equations-api</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
</dependencies>
</project>
Modified:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
===================================================================
---
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
2010-12-21 21:04:24 UTC (rev 23259)
+++
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
2010-12-22 00:27:57 UTC (rev 23260)
@@ -6,9 +6,12 @@
import java.util.Map;
import java.util.Set;
+import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
+import org.cytoscape.equations.EqnCompiler;
+import org.cytoscape.equations.Equation;
import org.cytoscape.event.CyEventHelper;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyRow;
@@ -24,34 +27,40 @@
public class BrowserTableModel extends AbstractTableModel
implements ColumnCreatedListener, ColumnDeletedListener,
RowCreatedMicroListener
{
+ private final JTable table;
private final CyEventHelper eventHelper;
- private final CyTable table;
+ private final CyTable attrs;
+ private final EqnCompiler compiler;
private boolean tableHasBooleanSelected;
private Map<CyRow, RowSetMicroListenerProxy> rowToListenerProxyMap;
- public BrowserTableModel(final CyEventHelper eventHelper, final CyTable
table) {
+ public BrowserTableModel(final JTable table, final CyEventHelper
eventHelper,
+ final CyTable attrs, final EqnCompiler
compiler)
+ {
+ this.table = table;
this.eventHelper = eventHelper;
- this.table = table;
- this.tableHasBooleanSelected =
table.getColumnTypeMap().get(CyNetwork.SELECTED) == Boolean.class;
+ this.attrs = attrs;
+ this.compiler = compiler;
+ this.tableHasBooleanSelected =
attrs.getColumnTypeMap().get(CyNetwork.SELECTED) == Boolean.class;
this.rowToListenerProxyMap = new HashMap<CyRow,
RowSetMicroListenerProxy>();
- eventHelper.addMicroListener(this,
RowCreatedMicroListener.class, table);
+ eventHelper.addMicroListener(this,
RowCreatedMicroListener.class, attrs);
- final List<CyRow> rows = table.getAllRows();
+ final List<CyRow> rows = attrs.getAllRows();
for (final CyRow row : rows)
rowToListenerProxyMap.put(row, new
RowSetMicroListenerProxy(this, eventHelper, row));
}
@Override
public int getRowCount() {
- final Map<String, Class<?>> columnNameToTypeMap =
table.getColumnTypeMap();
+ final Map<String, Class<?>> columnNameToTypeMap =
attrs.getColumnTypeMap();
if (columnNameToTypeMap.isEmpty())
return 0;
if (!tableHasBooleanSelected)
- return table.getRowCount();
+ return attrs.getRowCount();
- final List<CyRow> rows = table.getAllRows();
+ final List<CyRow> rows = attrs.getAllRows();
int selectedCount = 0;
for (final CyRow row : rows) {
@@ -64,19 +73,24 @@
@Override
public int getColumnCount() {
- return table.getColumnTypeMap().size();
+ return attrs.getColumnTypeMap().size();
}
@Override
- public Object getValueAt(final int row, final int column) {
- final String columnName = getColumnName(column);
+ public Object getValueAt(final int rowIndex, final int columnIndex) {
+ final String columnName = getColumnName(columnIndex);
+ final CyRow row = mapRowIndexToRow(rowIndex);
+ return getValidatedObjectAndEditString(row, columnName);
+ }
+
+ private CyRow mapRowIndexToRow(final int rowIndex) {
if (tableHasBooleanSelected) {
- final Set<CyRow> selectedRows =
table.getMatchingRows(CyNetwork.SELECTED, true);
+ final Set<CyRow> selectedRows =
attrs.getMatchingRows(CyNetwork.SELECTED, true);
int count = 0;
CyRow cyRow = null;
for (final CyRow selectedRow : selectedRows) {
- if (count == row) {
+ if (count == rowIndex) {
cyRow = selectedRow;
break;
}
@@ -84,24 +98,22 @@
++count;
}
- return getValidatedObjectAndEditString(cyRow,
columnName);
+ return cyRow;
} else {
final List primaryKeyValues =
- table.getColumnValues(table.getPrimaryKey(),
-
table.getPrimaryKeyType());
-
- return
getValidatedObjectAndEditString(table.getRow(primaryKeyValues.get(row)),
- columnName);
+ attrs.getColumnValues(attrs.getPrimaryKey(),
+
attrs.getPrimaryKeyType());
+ return attrs.getRow(primaryKeyValues.get(rowIndex));
}
}
/**
* @return the row index for "cyRow" or -1 if there is no matching row.
*/
- int mapRowToRowIndex(final CyRow cyRow) {
+ private int mapRowToRowIndex(final CyRow cyRow) {
int index = 0;
if (tableHasBooleanSelected) {
- final Set<CyRow> selectedRows =
table.getMatchingRows(CyNetwork.SELECTED, true);
+ final Set<CyRow> selectedRows =
attrs.getMatchingRows(CyNetwork.SELECTED, true);
for (final CyRow selectedRow : selectedRows) {
if (cyRow == selectedRow)
return index;
@@ -111,10 +123,10 @@
return -1; // Most likely the passed in row was not a
selected row!
} else {
final List primaryKeyValues =
- table.getColumnValues(table.getPrimaryKey(),
-
table.getPrimaryKeyType());
+ attrs.getColumnValues(attrs.getPrimaryKey(),
+
attrs.getPrimaryKeyType());
for (final Object primaryKey : primaryKeyValues) {
- if (cyRow == table.getRow(primaryKey))
+ if (cyRow == attrs.getRow(primaryKey))
return index;
++index;
}
@@ -130,12 +142,12 @@
if (raw == null)
return null;
- final Map<String, Class<?>> columnNameToTypeMap =
table.getColumnTypeMap();
+ final Map<String, Class<?>> columnNameToTypeMap =
attrs.getColumnTypeMap();
final Object cooked = row.get(columnName,
columnNameToTypeMap.get(columnName));
if (cooked != null)
return new ValidatedObjectAndEditString(cooked,
raw.toString());
- final String lastInternalError = table.getLastInternalError();
+ final String lastInternalError = attrs.getLastInternalError();
return new ValidatedObjectAndEditString(cooked, raw.toString(),
lastInternalError);
}
@@ -156,17 +168,17 @@
@Override
public void handleRowCreated(final Object key) {
- final CyRow newRow = table.getRow(key);
+ final CyRow newRow = attrs.getRow(key);
rowToListenerProxyMap.put(newRow, new
RowSetMicroListenerProxy(this, eventHelper, newRow));
fireTableStructureChanged();
}
private int mapColumnNameToColumnIndex(final String columnName) {
- final String primaryKey = table.getPrimaryKey();
+ final String primaryKey = attrs.getPrimaryKey();
if (columnName.equals(primaryKey))
return 0;
- final Map<String, Class<?>> columnNameToTypeMap =
table.getColumnTypeMap();
+ final Map<String, Class<?>> columnNameToTypeMap =
attrs.getColumnTypeMap();
int index = 1;
for (final String name : columnNameToTypeMap.keySet()) {
if (name.equals(columnName))
@@ -180,12 +192,12 @@
}
private String mapColumnIndexToColumnName(final int index) {
- final String primaryKey = table.getPrimaryKey();
+ final String primaryKey = attrs.getPrimaryKey();
if (index == 0)
return primaryKey;
- final Map<String, Class<?>> columnNameToTypeMap =
table.getColumnTypeMap();
+ final Map<String, Class<?>> columnNameToTypeMap =
attrs.getColumnTypeMap();
int i = 1;
for (final String name : columnNameToTypeMap.keySet()) {
if (name.equals(primaryKey))
@@ -212,8 +224,92 @@
}
}
+ @Override
+ public void setValueAt(final Object value, final int rowIndex, final
int columnIndex) {
+ final String text = (String)value;
+System.err.println("************************ Attempted to set a cell
value("+rowIndex+", "+columnIndex+")="+text);
+ final CyRow row = mapRowIndexToRow(rowIndex);
+ final String columnName =
mapColumnIndexToColumnName(columnIndex);
+ if (text.startsWith("=")) {
+ } else {
+ final Class<?> columnType = attrs.getType(columnName);
+ Object parsedValue;
+ StringBuilder errorMessage = new StringBuilder();
+ if (columnType == String.class)
+ parsedValue = text;
+ else if (columnType == Long.class)
+ parsedValue = parseLong(text, errorMessage);
+ else if (columnType == Integer.class)
+ parsedValue = parseInteger(text, errorMessage);
+ else if (columnType == Double.class)
+ parsedValue = parseDouble(text, errorMessage);
+ else if (columnType == Boolean.class)
+ parsedValue = parseBoolean(text, errorMessage);
+ else if (columnType == List.class)
+ parsedValue = parseList(text,
attrs.getListElementType(columnName),
+ errorMessage);
+ else
+ throw new IllegalStateException("unknown column
type: "
+ +
columnType.getName() + "!");
+ if (parsedValue != null)
+ row.set(columnName, parsedValue);
+ else {
+ final int viewColumnIndex =
table.convertColumnIndexToView(columnIndex);
+ if (viewColumnIndex == -1) // Column is
currently not visible!
+ return;
+
+ final ValidatedObjectAndEditString newCellValue
=
+ new ValidatedObjectAndEditString(null,
text, errorMessage.toString());
+ table.setValueAt(newCellValue, rowIndex,
viewColumnIndex);
+ }
+ }
+ }
+
+ private Object parseLong(final String text, final StringBuilder
errorMessage) {
+ try {
+ return Long.valueOf(text);
+ } catch (final Exception e) {
+ errorMessage.append("Can't convert text to a whole
number!");
+ return null;
+ }
+ }
+
+ private Object parseInteger(final String text, final StringBuilder
errorMessage) {
+ try {
+ return Integer.valueOf(text);
+ } catch (final Exception e) {
+ errorMessage.append("Can't convert text to a whole
number!");
+ return null;
+ }
+ }
+
+ private Object parseDouble(final String text, final StringBuilder
errorMessage) {
+ try {
+ return Double.valueOf(text);
+ } catch (final Exception e) {
+ errorMessage.append("Can't convert text to a floating
point number!");
+ return null;
+ }
+ }
+
+ private Object parseBoolean(final String text, final StringBuilder
errorMessage) {
+ if (text.compareToIgnoreCase("true") == 0)
+ return Boolean.valueOf(true);
+
+ if (text.compareToIgnoreCase("false") == 0)
+ return Boolean.valueOf(false);
+
+ errorMessage.append("Can't convert text to a truth value!");
+ return null;
+ }
+
+ private Object parseList(final String text, final Class elementType,
final StringBuilder errorMessage) {
+ errorMessage.append("parseList() has not yet been
implemented!");
+ return null;
+ }
+
public void cleanup() {
- eventHelper.removeMicroListener(this,
RowCreatedMicroListener.class, table);
+ eventHelper.removeMicroListener(this,
RowCreatedMicroListener.class, attrs);
for (final RowSetMicroListenerProxy proxy :
rowToListenerProxyMap.values())
proxy.cleanup();
}
Modified:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/TableBrowser.java
===================================================================
---
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/TableBrowser.java
2010-12-21 21:04:24 UTC (rev 23259)
+++
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/TableBrowser.java
2010-12-22 00:27:57 UTC (rev 23260)
@@ -14,6 +14,7 @@
import javax.swing.JTable;
import javax.swing.table.TableRowSorter;
+import org.cytoscape.equations.EqnCompiler;
import org.cytoscape.event.CyEventHelper;
import org.cytoscape.model.CyTable;
import org.cytoscape.model.CyTableManager;
@@ -28,16 +29,18 @@
private final CyTableManager tableManager;
private final CyServiceRegistrar serviceRegistrar;
private final CyEventHelper eventHelper;
+ private final EqnCompiler compiler;
private final BrowserTable browserTable;
private BrowserTableModel browserTableModel;
private CyTable currentTable;
TableBrowser(final CyTableManager tableManager, final
CyServiceRegistrar serviceRegistrar,
- final CyEventHelper eventHelper)
+ final CyEventHelper eventHelper, final EqnCompiler
compiler)
{
this.tableManager = tableManager;
this.serviceRegistrar = serviceRegistrar;
this.eventHelper = eventHelper;
+ this.compiler = compiler;
this.browserTable = new BrowserTable();
this.setLayout(new BorderLayout());
@@ -86,7 +89,7 @@
}
currentTable = table;
- browserTableModel = new BrowserTableModel(eventHelper,
table);
+ browserTableModel = new BrowserTableModel(eventHelper,
table, compiler);
eventHelper.addMicroListener(browserTableModel,
RowCreatedMicroListener.class, table);
serviceRegistrar.registerAllServices(browserTableModel,
new Properties());
browserTable.setModel(browserTableModel);
Modified:
core3/table-browser-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
===================================================================
---
core3/table-browser-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
2010-12-21 21:04:24 UTC (rev 23259)
+++
core3/table-browser-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
2010-12-22 00:27:57 UTC (rev 23260)
@@ -5,13 +5,13 @@
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi-1.0.xsd"
default-lazy-init="false">
- <osgi:reference id="cyTableManagerServiceRef"
interface="org.cytoscape.model.CyTableManager">
- </osgi:reference>
- <osgi:reference id="cyServiceRegistrarServiceRef"
interface="org.cytoscape.service.util.CyServiceRegistrar">
- </osgi:reference>
- <osgi:reference id="cyEventHelperServiceRef"
interface="org.cytoscape.event.CyEventHelper">
- </osgi:reference>
+ <!-- imports -->
+ <osgi:reference id="cyTableManagerServiceRef"
interface="org.cytoscape.model.CyTableManager" />
+ <osgi:reference id="cyServiceRegistrarServiceRef"
interface="org.cytoscape.service.util.CyServiceRegistrar" />
+ <osgi:reference id="cyEventHelperServiceRef"
interface="org.cytoscape.event.CyEventHelper" />
+ <osgi:reference id="compilerServiceRef"
interface="org.cytoscape.equations.EqnCompiler" />
+ <!-- listeners -->
<osgi:service id="tableBrowserCytoPanelComponentService"
ref="tableBrowser"
interface="org.cytoscape.application.swing.CytoPanelComponent"/>
</beans>
Modified:
core3/table-browser-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
===================================================================
---
core3/table-browser-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
2010-12-21 21:04:24 UTC (rev 23259)
+++
core3/table-browser-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
2010-12-22 00:27:57 UTC (rev 23260)
@@ -29,5 +29,6 @@
<constructor-arg ref="cyTableManagerServiceRef" />
<constructor-arg ref="cyServiceRegistrarServiceRef" />
<constructor-arg ref="cyEventHelperServiceRef" />
+ <constructor-arg ref="compilerServiceRef" />
</bean>
</beans>
--
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.