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.

Reply via email to