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.