Author: pwang
Date: 2011-09-20 11:04:08 -0700 (Tue, 20 Sep 2011)
New Revision: 26883

Modified:
   
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
   
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
Log:
Show error message if input data type is wrong

Modified: 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
===================================================================
--- 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
  2011-09-20 18:01:59 UTC (rev 26882)
+++ 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
  2011-09-20 18:04:08 UTC (rev 26883)
@@ -26,6 +26,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 
+import java.util.ArrayList;
 import java.util.EventObject;
 import java.util.HashMap;
 import java.util.List;
@@ -64,6 +65,7 @@
 import java.awt.event.FocusEvent;
 import javax.swing.event.CellEditorListener;
 import javax.swing.event.ChangeEvent;
+import org.cytoscape.browser.util.TableBrowserUtil;
 
 
 public class BrowserTable extends JTable
@@ -656,7 +658,15 @@
                        CyRow rowObj = (CyRow) cellVect.get(0);
                        String columnName = (String)cellVect.get(1);
                        
-                       rowObj.set(columnName, 
MultiLineTableCellEditor.lastValueUserEntered);                                 
 
+                       ArrayList parsedData = 
TableBrowserUtil.parseCellInput(rowObj.getTable(), columnName, 
MultiLineTableCellEditor.lastValueUserEntered);
+                       
+                       if (parsedData.get(0) != null){
+                               rowObj.set(columnName, 
MultiLineTableCellEditor.lastValueUserEntered);                                 
                                 
+                       }
+                       else {
+                               // Error
+                               // discard the change
+                       }
                }       
        }
                

Modified: 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
===================================================================
--- 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
     2011-09-20 18:01:59 UTC (rev 26882)
+++ 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
     2011-09-20 18:04:08 UTC (rev 26883)
@@ -32,6 +32,8 @@
 import org.cytoscape.model.events.RowsSetEvent;
 import org.cytoscape.model.events.RowsSetListener;
 import java.util.Vector;
+import org.cytoscape.browser.util.TableBrowserUtil;
+import javax.swing.JOptionPane;
 
 
 public final class BrowserTableModel extends AbstractTableModel implements 
ColumnCreatedListener,
@@ -453,31 +455,15 @@
                                row.set(columnName, errorEqn);
                        }
                } else { // Not an equation!
-                       Object parsedValue;
-                       final 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, 
dataTable.getColumn(columnName).getListElementType(),
-                                                 errorMessage);
-                       else
-                               throw new IllegalStateException("unknown column 
type: "
-                                                               + 
columnType.getName() + "!");
-                       if (parsedValue != null)
-                               row.set(columnName, parsedValue);
+
+                       ArrayList parsedData = 
TableBrowserUtil.parseCellInput(dataTable, columnName, value);
+                       
+                       if (parsedData.get(0) != null)
+                               row.set(columnName, parsedData.get(0));
                        else {
-                               final Class<?> eqnType = columnType == 
Integer.class ? Long.class : columnType;
-                               final Equation errorEqn = 
compiler.getErrorEquation(text, eqnType, errorMessage.toString());
-                               row.set(columnName, errorEqn);
+                               //Error!
+                               showErrorWindow(parsedData.get(1).toString());
+                                               //+ " should be an Integer (or 
the number is too big/small).");
                        }
                }
 
@@ -485,6 +471,13 @@
                fireTableChanged(event);
        }
 
+       // Pop-up window for error message
+       private static void showErrorWindow(final String errMessage) {
+               JOptionPane.showMessageDialog(null, errMessage, "Invalid 
Value!",
+                                             JOptionPane.ERROR_MESSAGE);
+       }
+
+       
        private boolean eqnTypeIsCompatible(final Class<?> columnType, final 
Class<?> eqnType) {
                if (columnType == eqnType)
                        return true;
@@ -528,343 +521,7 @@
                }
        }
 
-       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;
-       }
-
-       enum ListParserState {
-               OPENING_BRACE_EXPECTED, COMMA_OR_CLOSING_BRACE_EXPECTED,
-               ITEM_OR_CLOSING_BRACE_EXPECTED, ITEM_EXPECTED, 
END_OF_INPUT_EXPECTED
-       };
-
-       @SuppressWarnings (value={"unchecked", "fallthrough"})
-       static List parseList(final String text, final Class<?> 
listElementType, final StringBuilder errorMessage) {
-               final List newList = new ArrayList();
-               final StringReader reader = new StringReader(text);
-
-               ListParserState state = ListParserState.OPENING_BRACE_EXPECTED;
-               for (;;) {
-                       int ch = EOF;
-                       try {
-                               reader.mark(0);
-                               ch = reader.read();
-                       } catch (final IOException e) {
-                               throw new IllegalStateException("We should 
*never* get here!");
-                       }
-
-                       if (ch == '\n' || ch == '\t' || ch == ' ')
-                               continue;
-
-                       switch (state) {
-                       case OPENING_BRACE_EXPECTED:
-                               if (ch == '[') {
-                                       state = 
ListParserState.ITEM_OR_CLOSING_BRACE_EXPECTED;
-                                       break;
-                               } else {
-                                       errorMessage.append("List must start 
with '['!");
-                                       return null;
-                               }
-                       case ITEM_OR_CLOSING_BRACE_EXPECTED:
-                               if (ch == ']') {
-                                       state = 
ListParserState.END_OF_INPUT_EXPECTED;
-                                       break;
-                               }
-                       case ITEM_EXPECTED:
-                               if (ch == EOF) {
-                                       errorMessage.append("Premature end of 
list!");
-                                       return null;
-                               }
-                               try {
-                                       reader.reset();
-                               } catch (final IOException e) {
-                                       throw new IllegalStateException("We 
should *never* get here!");
-                               }
-
-                               final Object item = getListItem(reader, 
listElementType, errorMessage);
-                               if (item == null)
-                                       return null;
-                               newList.add(item);
-
-                               state = 
ListParserState.COMMA_OR_CLOSING_BRACE_EXPECTED;
-                               break;
-                       case COMMA_OR_CLOSING_BRACE_EXPECTED:
-                               if (ch == ']') {
-                                       state = 
ListParserState.END_OF_INPUT_EXPECTED;
-                                       break;
-                               } else if (ch == ',') {
-                                       state = ListParserState.ITEM_EXPECTED;
-                                       break;
-                               } else {
-                                       errorMessage.append("Unexpected 
character(s) in list detected!");
-                                       return null;
-                               }
-                       case END_OF_INPUT_EXPECTED:
-                               if (ch != EOF) {
-                                       errorMessage.append("Unexpected garbage 
after end of list!");
-                                       return null;
-                               }
-
-                               return newList;
-                       }
-               }
-       }
-
-       private static Object getListItem(final StringReader reader, final 
Class<?> listElementType,
-                                         final StringBuilder errorMessage)
-       {
-               if (listElementType == Double.class)
-                       return getDouble(reader, errorMessage);
-               else if (listElementType == String.class)
-                       return getString(reader, errorMessage);
-               else if (listElementType == Integer.class || listElementType == 
Long.class) {
-                       // Process optional leading sign:
-                       int ch = EOF;
-                       try {
-                               reader.mark(0);
-                               ch = reader.read();
-                       } catch (final IOException e) {
-                               throw new IllegalStateException("We should 
*never* get here!");
-                       }
-                       final StringBuilder builder = new StringBuilder();
-                       if (ch == '-')
-                               builder.append((char)ch);
-                       else if (ch == '+')
-                               /* Intentionally empty! */;
-                       else {
-                               try {
-                                       reader.reset();
-                               } catch (final IOException e) {
-                                       throw new IllegalStateException("We 
should *never* get here!");
-                               }
-                       }
-
-                       grabAsciiDigits(reader, builder);
-                       try {
-                               if (listElementType == Integer.class)
-                                       return 
Integer.valueOf(builder.toString());
-                               else
-                                       return Long.valueOf(builder.toString());
-                       } catch (final NumberFormatException e) {
-                               errorMessage.append("Found invalid integer or 
long integer list item!");
-                               return null;
-                       }
-               } else if (listElementType == Boolean.class) {
-                       final StringBuilder builder = new StringBuilder();
-                       grabAsciiLetters(reader, builder);
-                       final String boolValueCandidate = builder.toString();
-                       if (boolValueCandidate.equalsIgnoreCase("true"))
-                               return Boolean.valueOf(true);
-                       else if (boolValueCandidate.equalsIgnoreCase("false"))
-                               return Boolean.valueOf(false);
-                       else {
-                               errorMessage.append("\"" + boolValueCandidate
-                                                   + "\" is not a valid 
boolean list item!");
-                               return null;
-                       }
-               } else
-                       throw new IllegalStateException("unknown list element 
type: "
-                                                       + 
listElementType.getName() + "!");
-       }
-
-       private static Double getDouble(final StringReader reader, final 
StringBuilder errorMessage) {
-               try {
-                       reader.mark(0);
-                       int ch = reader.read();
-                       if (ch == EOF) {
-                               errorMessage.append("Unexpected end of input 
while trying to read a floating point number!");
-                               return null;
-                       }
-
-                       final StringBuilder builder = new StringBuilder();
-
-                       // Process optional leading sign:
-                       if (ch == '-' || ch == '+')
-                               builder.append((char)ch);
-                       else
-                               reader.reset();
-
-                       int savedLength = builder.length();
-                       grabAsciiDigits(reader, builder);
-                       final boolean needAfterDecimalPointDigits = 
builder.length() == savedLength;
-
-                       // Process optional decimal point followed by zero or 
more digits:
-                       reader.mark(0);
-                       ch = reader.read();
-                       if (ch != '.') {
-                               if (needAfterDecimalPointDigits) {
-                                       errorMessage.append("Bad or missing 
floating point list item!");
-                                       return null;
-                               }
-                               reader.reset();
-                       } else {
-                               builder.append('.');
-                               savedLength = builder.length();
-                               grabAsciiDigits(reader, builder);
-                               if (needAfterDecimalPointDigits && savedLength 
== builder.length()) {
-                                       errorMessage.append("Bad or missing 
floating point list item!");
-                                       return null;
-                               }
-                       }
-
-                       // Process optional exponent:
-                       reader.mark(0);
-                       ch = reader.read();
-                       if (ch != 'e' && ch != 'E')
-                               reader.reset();
-                       else {
-                               builder.append('e');
-
-                               // Process optional sign:
-                               reader.mark(0);
-                               ch = reader.read();
-                               if (ch != '+' && ch != '-')
-                                       reader.reset();
-                               else
-                                       builder.append((char)ch);
-
-                               savedLength = builder.length();
-                               grabAsciiDigits(reader, builder);
-                               if (builder.length() == savedLength) {
-                                       errorMessage.append("Invalid 
exponent!");
-                                       return null;
-                               }
-                       }
-
-                       try {
-                               return Double.valueOf(builder.toString());
-                       } catch (Exception e) {
-                               errorMessage.append("Malformed number!");
-                               return null;
-                       }
-               } catch (final IOException e) {
-                       throw new IllegalStateException("This should *never* 
happen!");
-               }
-       }
-
-       private static void grabAsciiDigits(final StringReader reader, final 
StringBuilder builder) {
-               try {
-                       for (;;) {
-                               reader.mark(0);
-                               final int ch = reader.read();
-                               if (ch == EOF || (char)ch < '0' || (char)ch > 
'9') {
-                                       reader.reset();
-                                       return;
-                               }
-
-                               builder.append((char)ch);
-                       }
-               } catch (final IOException e) {
-                       throw new IllegalStateException("This should *never* 
happen!");
-               }
-       }
-
-       private static String getString(final StringReader reader, final 
StringBuilder errorMessage) {
-               try {
-                       if (reader.read() != '"') {
-                               errorMessage.append("Strings must start with a 
double quote symbol!");
-                               return null;
-                       }
-
-                       final StringBuilder builder = new StringBuilder();
-
-                       int ch = reader.read();
-                       boolean escaped = false;
-                       while (escaped || ch != '"') {
-                               if (ch == EOF) {
-                                       errorMessage.append("Unterminated 
string list item!");
-                                       return null;
-                               }
-
-                               if (escaped) {
-                                       switch (ch) {
-                                       case 'n':
-                                               builder.append('\n');
-                                               break;
-                                       case 't':
-                                               builder.append('\t');
-                                               break;
-                                       case 'r':
-                                               builder.append('\r');
-                                               break;
-                                       case 'f':
-                                               builder.append('\f');
-                                               break;
-                                       case 'b':
-                                               builder.append('\b');
-                                               break;
-                                       default:
-                                               builder.append((char)ch);
-                                       }
-                                       escaped = false;
-                               } else if (ch == '\\')
-                                       escaped = true;
-                               else
-                                       builder.append((char)ch);
-
-                               ch = reader.read();
-                       }
-
-                       return builder.toString();
-               } catch (final IOException e) {
-                       throw new IllegalStateException("This should *never* 
happen!");
-               }
-       }
-
-       private static void grabAsciiLetters(final StringReader reader, final 
StringBuilder builder)
-       {
-               try {
-                       for (;;) {
-                               reader.mark(0);
-                               final int ch = reader.read();
-                               if (ch == EOF
-                                   || (((char)ch < 'a' || (char)ch > 'z')
-                                       && ((char)ch < 'A' || (char)ch > 'Z')))
-                               {
-                                       reader.reset();
-                                       return;
-                               }
-
-                               builder.append((char)ch);
-                       }
-               } catch (final IOException e) {
-                       throw new IllegalStateException("This should *never* 
happen!");
-               }
-       }
-
        @Override
        public boolean isCellEditable(final int rowIndex, final int 
columnIndex) {
                return table.convertColumnIndexToModel(columnIndex) != 0;

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