Author: alevkovsky
Date: 2008-10-02 08:19:11 -0400 (Thu, 02 Oct 2008)
New Revision: 10647
Modified:
trunk/sandbox/ui/editor/src/main/java/org/richfaces/component/SeamTextConverter.java
Log:
Adjust Seam text converter work
Modified:
trunk/sandbox/ui/editor/src/main/java/org/richfaces/component/SeamTextConverter.java
===================================================================
---
trunk/sandbox/ui/editor/src/main/java/org/richfaces/component/SeamTextConverter.java 2008-10-02
12:19:07 UTC (rev 10646)
+++
trunk/sandbox/ui/editor/src/main/java/org/richfaces/component/SeamTextConverter.java 2008-10-02
12:19:11 UTC (rev 10647)
@@ -14,9 +14,13 @@
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.jboss.seam.text.SeamTextLexer;
import org.jboss.seam.text.SeamTextParser;
+import antlr.ANTLRException;
+import antlr.RecognitionException;
import antlr.TokenStream;
/**
@@ -27,6 +31,8 @@
*/
public class SeamTextConverter implements Converter {
+ private static final Log _log = LogFactory.getLog(SeamTextConverter.class);
+
/**
* <p>
* The standard converter id for this converter.
@@ -41,33 +47,45 @@
@SuppressWarnings("unchecked")
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
+ return value;
+ }
+
+ /**
+ * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext,
+ * javax.faces.component.UIComponent, java.lang.Object)
+ */
+ @SuppressWarnings("unchecked")
+ public String getAsString(FacesContext context, UIComponent component,
+ Object value) {
+ if (value == null) {
+ return null;
+ }
+
+ SeamTextParser parser = null;
+
try {
- Reader r = new StringReader(value);
+
+ Reader r = new StringReader(value.toString());
Class seamTextLexerClass =
Class.forName("org.jboss.seam.text.SeamTextLexer");
Class seamTextParserClass =
Class.forName("org.jboss.seam.text.SeamTextParser");
Constructor seamTextLexerConstructor =
seamTextLexerClass.getConstructor(Reader.class);
SeamTextLexer lexer = (SeamTextLexer) seamTextLexerConstructor.newInstance(new
Object[] { r });
Constructor seamTextParserConstructor =
seamTextParserClass.getConstructor(TokenStream.class);
- SeamTextParser parser = (SeamTextParser) seamTextParserConstructor.newInstance(new
Object[] { lexer });
-
- parser.startRule();
- return parser.toString();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- return null;
+ parser = (SeamTextParser) seamTextParserConstructor.newInstance(new Object[] { lexer
});
} catch (Exception e) {
- e.printStackTrace();
- return null;
+ throw new RuntimeException(e);
}
+ try {
+ parser.startRule();
+ } catch (RecognitionException rex) {
+ // Log a nice message for any lexer/parser errors, users can disable
+ // this if they want to
+ _log.warn("Seam Text parse error: " + rex.getMessage());
+ } catch (ANTLRException ex) {
+ // All other errors are fatal;
+ throw new RuntimeException(ex);
+ }
+ return parser.toString();
}
- /**
- * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext,
- * javax.faces.component.UIComponent, java.lang.Object)
- */
- public String getAsString(FacesContext context, UIComponent component,
- Object value) {
- return value.toString();
- }
-
}