[jbosstools-commits] JBoss Tools SVN: r35473 - in trunk/jsf: tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation and 1 other directory.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Fri Oct 7 14:06:26 EDT 2011


Author: vrubezhny
Date: 2011-10-07 14:06:26 -0400 (Fri, 07 Oct 2011)
New Revision: 35473

Modified:
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java
   trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidationTestMessages.java
   trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidatorTest.java
   trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/messages.properties
Log:
JBIDE-9846 XHTML Syntax Validation goes into infinite loop in fillInStackTrace()
JBIDE-9828 NPE and ArrayIndexOutOfBoundsException occur in XHTML validator 

Issues are fixed. JUnit Tests are created

Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java	2011-10-07 17:50:35 UTC (rev 35472)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java	2011-10-07 18:06:26 UTC (rev 35473)
@@ -12,11 +12,26 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Stack;
 
+import org.apache.xerces.impl.Constants;
+import org.apache.xerces.impl.XMLErrorReporter;
+import org.apache.xerces.impl.msg.XMLMessageFormatter;
+import org.apache.xerces.util.MessageFormatter;
+import org.apache.xerces.xni.XMLResourceIdentifier;
+import org.apache.xerces.xni.XNIException;
+import org.apache.xerces.xni.parser.XMLEntityResolver;
+import org.apache.xerces.xni.parser.XMLInputSource;
+import org.apache.xerces.xni.parser.XMLParseException;
+import org.apache.xerces.xni.parser.XMLParserConfiguration;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -36,12 +51,16 @@
 import org.jboss.tools.common.util.FileUtil;
 import org.jboss.tools.jsf.JSFModelPlugin;
 import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
 import org.xml.sax.SAXParseException;
 import org.xml.sax.XMLReader;
 import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.helpers.LocatorImpl;
 
 /**
  * 
@@ -59,21 +78,21 @@
 	IProgressMonitor monitor;
 	IResource resource;
 	
-	public boolean isXHTMLDoctype = false;
-
 	private String[] SAX_PARSER_FEATURES_TO_DISABLE = {
 			"http://xml.org/sax/features/namespaces", 
 	    	"http://xml.org/sax/features/use-entity-resolver2",
 			"http://xml.org/sax/features/validation",
 			"http://apache.org/xml/features/validation/dynamic",
 			"http://apache.org/xml/features/validation/schema",
-			"http://apache.org/xml/features/validation/schema-full-checking",		
+			"http://apache.org/xml/features/validation/schema-full-checking",
 			"http://apache.org/xml/features/nonvalidating/load-external-dtd",
 			"http://apache.org/xml/features/nonvalidating/load-dtd-grammar",
 			"http://apache.org/xml/features/xinclude",
-			"http://xml.org/sax/features/resolve-dtd-uris",
+			"http://xml.org/sax/features/resolve-dtd-uris"
+	};  
+	private String[] SAX_PARSER_FEATURES_TO_ENABLE = {
 			"http://apache.org/xml/features/continue-after-fatal-error"
-		};  
+		};
 	
 	private void setSAXParserFeatures(XMLReader reader, String[] features, boolean set) {
 		for (String feature : features) {
@@ -132,27 +151,48 @@
 			NestedValidatorContext context, ValidationResult result) {
 		displaySubtask(JSFValidationMessage.XHTML_VALIDATION, uri);
 		XMLValidationInfo report = new XMLValidationInfo(uri);
-		XHTMLElementHandler handler = new XHTMLElementHandler(
+		XHTMLElementHandler handler = new XHTMLElementHandler(uri,
 				(resource instanceof IFile ? getDocument((IFile)resource) : null),
 				report);
-		XMLReader xmlReader = new org.apache.xerces.parsers.SAXParser();
+		
+		try {
+			if (!handler.isWellFormedXHTML()) {
+				SAXParseException ex = handler.getException();
+				if (ex != null) {
+					JSFModelPlugin.getDefault().logError(ex);
+					report.addError(ex.getLocalizedMessage(), ex.getLineNumber(), ex.getColumnNumber(), uri);
+				}
+				return report;
+			}
+			
+			XMLReader xmlReader = new MySAXParser();
 
-		setSAXParserFeatures(xmlReader, SAX_PARSER_FEATURES_TO_DISABLE, false);
-	    setSAXParserProperty(xmlReader, "http://xml.org/sax/properties/lexical-handler", handler); 
-	    xmlReader.setContentHandler(handler);
-	    xmlReader.setDTDHandler(handler);
-	    xmlReader.setErrorHandler(handler);
-	    isXHTMLDoctype = false;
+			setSAXParserFeatures(xmlReader, SAX_PARSER_FEATURES_TO_DISABLE, false);
+			setSAXParserFeatures(xmlReader, SAX_PARSER_FEATURES_TO_ENABLE, true);
+    	    setSAXParserProperty(xmlReader, "http://xml.org/sax/properties/lexical-handler", handler); 
+    	    
+			xmlReader.setProperty("http://apache.org/xml/properties/internal/entity-resolver", new NullXMLEntityResolver());
 
-		try {
+    	    xmlReader.setContentHandler(handler);
+    	    xmlReader.setDTDHandler(handler);
+    	    xmlReader.setErrorHandler(handler);
+    	    xmlReader.setEntityResolver(handler);
+    	    
+    	    handler.setCurrentReader(xmlReader);
+    	    
 			xmlReader.parse(uri);
 		} catch (IOException e) {
 			JSFModelPlugin.getDefault().logError(e);
 			report.addError(e.getLocalizedMessage(), 0, 0, uri);
+		} catch (SAXNotRecognizedException e) {
+			JSFModelPlugin.getDefault().logError(e);
+		} catch (SAXNotSupportedException e) {
+			JSFModelPlugin.getDefault().logError(e);
 		} catch (SAXException e) {
 			report.addError(e.getLocalizedMessage(), 0, 0, uri);
+		} catch (Throwable x) {
+			x.printStackTrace();
 		}
-
 		List<ElementLocation> locations = handler.getNonPairedOpenElements();
 		if (!locations.isEmpty()) {
 			for (ElementLocation location : locations) {
@@ -171,7 +211,7 @@
 		
 		return report;
 	}
-	
+		
 	@Override
 	protected void addInfoToMessage(ValidationMessage validationMessage,
 			IMessage message) {
@@ -272,21 +312,45 @@
 		}
 	}
 
+	class NullXMLEntityResolver implements XMLEntityResolver {
+
+		public XMLInputSource resolveEntity(XMLResourceIdentifier rid)
+				throws XNIException, IOException {
+			
+			return new XMLInputSource(rid.getPublicId(), 
+					rid.getBaseSystemId()==null?rid.getLiteralSystemId():rid.getExpandedSystemId(), 
+							rid.getBaseSystemId(), new StringReader(""), null);
+		}
+		
+	}
+	
 	class XHTMLElementHandler extends DefaultHandler implements LexicalHandler {
+		private String uri;
 		private Locator locator;
 		private IDocument document;
 		private XMLValidationInfo valinfo;
+		public boolean isXHTMLDoctype = false;
+		private boolean isWellFormed = false;
+		private XMLReader currentReader = null;
 		  
 		List<ElementLocation> elements = new ArrayList<ElementLocation>();
 		Stack<ElementLocation> nonPairedOpenElements = new Stack<XHTMLValidator.ElementLocation>();
 		Stack<ElementLocation> nonPairedCloseElements = new Stack<XHTMLValidator.ElementLocation>();
 		 		  
-		public XHTMLElementHandler(IDocument document, XMLValidationInfo valinfo) {
+		public XHTMLElementHandler(String uri, IDocument document, XMLValidationInfo valinfo) {
 			super();
+			this.uri = uri;
 			this.document = document;
 			this.valinfo = valinfo;
 		}
 		
+		public void setCurrentReader  (XMLReader reader) {
+			this.currentReader = reader;
+		}
+		
+		public XMLReader getCurrentReader() {
+			return this.currentReader;
+		}
 		@Override
 		public void setDocumentLocator(Locator locator) {
 			  this.locator = locator;
@@ -294,7 +358,7 @@
 		  
 		@Override
 		public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
-			if (!isXHTMLDoctype)
+			if (!isWellFormed || !isXHTMLDoctype)
 				return;
 
 			int end = getCurrentLocation(), start = 0;
@@ -308,7 +372,7 @@
 		ElementLocation currentElementLocation = null;
 		@Override
 		public void endElement(String uri, String localName, String qName) throws SAXException {
-			if (!isXHTMLDoctype)
+			if (!isWellFormed || !isXHTMLDoctype)
 				return;
 
 			int end = getCurrentLocation(), start = 0;
@@ -354,10 +418,26 @@
 			return qName.toString();
 		}
 
+		@Override
+		public void fatalError(SAXParseException e) throws SAXException {
+			if (!isWellFormed) {
+				if (isNonWellFormedException(e, getCurrentReader() instanceof MySAXParser ? ((MySAXParser)getCurrentReader()).getConfiguration() : null)) {
+					super.fatalError(e);
+				}
+			}
+			// We do not need to throw any exceptions here in case of well-formed xhtml (opposite to what super method does)!
+		}
+
+		@Override
+		public InputSource resolveEntity(String publicId, String systemId)
+				throws IOException, SAXException {
+			return new InputSource(new StringReader("")); //$NON-NLS-1$
+		}
+
 		List<ElementLocation> getNonPairedOpenElements() {
 			return nonPairedOpenElements;
 		}
-
+		
 		List<ElementLocation> getNonPairedCloseElements() {
 			return nonPairedCloseElements;
 		}
@@ -365,7 +445,7 @@
 		private int getCurrentLocation() {
 			if (locator == null) 
 				return 0;
-
+				
 			int line = locator.getLineNumber() - 1;
 			int lineOffset = locator.getColumnNumber() - 1;
 			try {
@@ -411,12 +491,14 @@
 		@Override
 		public void startDTD(String name, String publicId, String systemId)
 				throws SAXException {
-    		valinfo.setGrammarEncountered(true);
-    		valinfo.setDTDEncountered(true);
-    		if (publicId != null && publicId.indexOf("W3C") != -1 && 
-    				publicId.indexOf("DTD") != -1 && publicId.indexOf("XHTML") != -1) {
-    			isXHTMLDoctype = true;
-    		}
+			if (!isWellFormed) {
+	    		valinfo.setGrammarEncountered(true);
+	    		valinfo.setDTDEncountered(true);
+	    		if (publicId != null && publicId.indexOf("W3C") != -1 && 
+	    				publicId.indexOf("DTD") != -1 && publicId.indexOf("XHTML") != -1) {
+	    			this.isXHTMLDoctype = true;
+	    		}
+			}
 		}
 
 		@Override
@@ -443,5 +525,293 @@
 		public void comment(char[] ch, int start, int length)
 				throws SAXException {
 		}
+		
+		private SAXParseException exception = null;
+		
+		SAXParseException getException() {
+			return exception;
+		}
+	
+		public boolean isWellFormedXHTML() throws IOException, SAXException {
+			exception = null;
+			isXHTMLDoctype = false;
+			isWellFormed = false;
+			
+		    MySAXParser reader = new MySAXParser();     
+			try {
+				setSAXParserFeatures(reader, SAX_PARSER_FEATURES_TO_DISABLE, false);
+				setSAXParserFeatures(reader, SAX_PARSER_FEATURES_TO_ENABLE, true); // Disabling this feature 
+																					// due to prevent validation 
+																					// on non-well-formed xhtml files
+	    	    setSAXParserProperty(reader, "http://xml.org/sax/properties/lexical-handler", this); 
+    			reader.setProperty("http://apache.org/xml/properties/internal/entity-resolver", new NullXMLEntityResolver());
+
+    			reader.setContentHandler(this);
+	    	    reader.setDTDHandler(this);
+	    	    reader.setErrorHandler(this);
+	    	    reader.setEntityResolver(this);
+
+	    	    this.setCurrentReader(reader);
+
+	    	    isXHTMLDoctype = false;
+				reader.parse(uri);
+			} catch (SAXParseException e) {
+				// We have to prevent further validation in case we've met the following exception:
+				// "The markup in the document preceding the root element must be well-formed"
+				// If the markup is not well-formed, not doing this may cause the validation to stuck 
+				// in Throwable.fillInStackTrace() method (it may come into an infinite loop) for some reason
+				//
+				if (isNonWellFormedException(e, reader.getConfiguration())) {
+					exception = e;
+					isXHTMLDoctype = false;
+					return false;
+				}
+			}
+			isWellFormed = true;
+			return this.isXHTMLDoctype;
+		}
+		
+		private static final String MARKUP_NOT_RECOGNIZED_ERROR_MESSAGE_ID = "MarkupNotRecognizedInProlog";
+		private static final String ERROR_REPORTER_PROPERTY = Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;
+		
+		private boolean isNonWellFormedException (SAXParseException e, XMLParserConfiguration parserConfiguration) {
+			if (parserConfiguration == null) return true;
+			
+			XMLErrorReporter errorReporter = (XMLErrorReporter)parserConfiguration.getProperty(ERROR_REPORTER_PROPERTY);
+			if (errorReporter == null) return true;
+
+			MessageFormatter messageFormatter = errorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN);
+	        String templateMessage = null;
+	        if (messageFormatter != null) {
+	            templateMessage = messageFormatter.formatMessage(parserConfiguration.getLocale(), MARKUP_NOT_RECOGNIZED_ERROR_MESSAGE_ID, null);
+	        }
+			String message = e.getMessage() == null ? null : e.getMessage().toLowerCase();
+			if (templateMessage == null) {
+				return (message != null && message.contains(XMLMessageFormatter.XML_DOMAIN) &&
+						message.contains("MarkupNotRecognizedInProlog"));
+			}
+	        
+			return (message != null && message.equals(templateMessage.toLowerCase()));
+		}
 	}
+	
+	class FilteredInputStream extends InputStream {
+		InputStream base;
+		
+		public FilteredInputStream(InputStream base) {
+			this.base = base;
+		}
+		
+		@Override
+		public int read() throws IOException {
+			int ch = base.read();
+			return (ch == '&' ? ' ' : ch); 
+		}
+
+		@Override
+		public int read(byte[] b) throws IOException {
+			return base.read(b);
+		}
+
+		@Override
+		public int read(byte[] b, int off, int len) throws IOException {
+			int length = base.read(b, off, len);
+			for (int i = 0; i < length; i++) {
+				if (b[i] == '&') b[i] = ' ';
+			}
+			return length;
+		}
+
+		@Override
+		public long skip(long n) throws IOException {
+			return base.skip(n);
+		}
+
+		@Override
+		public int available() throws IOException {
+			return base.available();
+		}
+
+		@Override
+		public void close() throws IOException {
+			base.close();
+		}
+
+		@Override
+		public synchronized void mark(int readlimit) {
+			base.mark(readlimit);
+		}
+
+		@Override
+		public synchronized void reset() throws IOException {
+			base.reset();
+		}
+
+		@Override
+		public boolean markSupported() {
+			return base.markSupported();
+		}
+	}
+	
+	class MyXMLInputSource extends XMLInputSource {
+
+		public MyXMLInputSource(String publicId, String systemId,
+				String baseSystemId) {
+			super(publicId, systemId, baseSystemId);
+		}
+
+		@Override
+		public InputStream getByteStream() {
+			InputStream stream = null;
+			try {
+				URL location = new URL(getSystemId());
+                URLConnection connect = location.openConnection();
+                if (!(connect instanceof HttpURLConnection)) {
+                    stream = new FilteredInputStream(connect.getInputStream());
+                }
+			} catch (MalformedURLException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+            return stream;
+		}
+	}
+	
+	class MySAXParser extends org.apache.xerces.parsers.SAXParser {
+    	public XMLParserConfiguration getConfiguration() {
+    		return fConfiguration;
+    	}
+    	
+    	
+
+		@Override
+		public void parse(String systemId) throws SAXException, IOException {
+	        // parse document
+	        XMLInputSource source = new MyXMLInputSource(null, systemId, null);
+	        try {
+	            parse(source);
+	        }
+
+	        // wrap XNI exceptions as SAX exceptions
+	        catch (XMLParseException e) {
+	            Exception ex = e.getException();
+	            if (ex == null) {
+	                // must be a parser exception; mine it for locator info and throw
+	                // a SAXParseException
+	                LocatorImpl locatorImpl = new LocatorImpl(){
+	                    public String getXMLVersion() {
+	                        return fVersion;
+	                    }
+	                    // since XMLParseExceptions know nothing about encoding,
+	                    // we cannot return anything meaningful in this context.
+	                    // We *could* consult the LocatorProxy, but the
+	                    // application can do this itself if it wishes to possibly
+	                    // be mislead.
+	                    public String getEncoding() {
+	                        return null;
+	                    }
+	                };
+	                locatorImpl.setPublicId(e.getPublicId());
+	                locatorImpl.setSystemId(e.getExpandedSystemId());
+	                locatorImpl.setLineNumber(e.getLineNumber());
+	                locatorImpl.setColumnNumber(e.getColumnNumber());
+	                throw new SAXParseException(e.getMessage(), locatorImpl);
+	            }
+	            if (ex instanceof SAXException) {
+	                // why did we create an XMLParseException?
+	                throw (SAXException)ex;
+	            }
+	            if (ex instanceof IOException) {
+	                throw (IOException)ex;
+	            }
+	            throw new SAXException(ex);
+	        }
+	        catch (XNIException e) {
+	            Exception ex = e.getException();
+	            if (ex == null) {
+	                throw new SAXException(e.getMessage());
+	            }
+	            if (ex instanceof SAXException) {
+	                throw (SAXException)ex;
+	            }
+	            if (ex instanceof IOException) {
+	                throw (IOException)ex;
+	            }
+	            throw new SAXException(ex);
+	        }
+
+		}
+
+
+
+		@Override
+		public void parse(InputSource inputSource) throws SAXException,
+				IOException {
+	        // parse document
+	        try {
+	            XMLInputSource xmlInputSource =
+	                new XMLInputSource(inputSource.getPublicId(),
+	                                   inputSource.getSystemId(),
+	                                   null);
+	            xmlInputSource.setByteStream(inputSource.getByteStream());
+	            xmlInputSource.setCharacterStream(inputSource.getCharacterStream());
+	            xmlInputSource.setEncoding(inputSource.getEncoding());
+	            parse(xmlInputSource);
+	        }
+
+	        // wrap XNI exceptions as SAX exceptions
+	        catch (XMLParseException e) {
+	            Exception ex = e.getException();
+	            if (ex == null) {
+	                // must be a parser exception; mine it for locator info and throw
+	                // a SAXParseException
+	                LocatorImpl locatorImpl = new LocatorImpl() {
+	                    public String getXMLVersion() {
+	                        return fVersion;
+	                    }
+	                    // since XMLParseExceptions know nothing about encoding,
+	                    // we cannot return anything meaningful in this context.
+	                    // We *could* consult the LocatorProxy, but the
+	                    // application can do this itself if it wishes to possibly
+	                    // be mislead.
+	                    public String getEncoding() {
+	                        return null;
+	                    }
+	                };
+	                locatorImpl.setPublicId(e.getPublicId());
+	                locatorImpl.setSystemId(e.getExpandedSystemId());
+	                locatorImpl.setLineNumber(e.getLineNumber());
+	                locatorImpl.setColumnNumber(e.getColumnNumber());
+	                throw new SAXParseException(e.getMessage(), locatorImpl);
+	            }
+	            if (ex instanceof SAXException) {
+	                // why did we create an XMLParseException?
+	                throw (SAXException)ex;
+	            }
+	            if (ex instanceof IOException) {
+	                throw (IOException)ex;
+	            }
+	            throw new SAXException(ex);
+	        }
+	        catch (XNIException e) {
+	            Exception ex = e.getException();
+	            if (ex == null) {
+	                throw new SAXException(e.getMessage());
+	            }
+	            if (ex instanceof SAXException) {
+	                throw (SAXException)ex;
+	            }
+	            if (ex instanceof IOException) {
+	                throw (IOException)ex;
+	            }
+	            throw new SAXException(ex);
+	        }
+		}
+
+    	
+    }  
+
 }

Modified: trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidationTestMessages.java
===================================================================
--- trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidationTestMessages.java	2011-10-07 17:50:35 UTC (rev 35472)
+++ trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidationTestMessages.java	2011-10-07 18:06:26 UTC (rev 35473)
@@ -1,3 +1,13 @@
+/******************************************************************************* 
+ * Copyright (c) 2009-2011 Red Hat, Inc. 
+ * Distributed under license by Red Hat, Inc. All rights reserved. 
+ * This program is made available under the terms of the 
+ * Eclipse Public License v1.0 which accompanies this distribution, 
+ * and is available at http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Red Hat, Inc. - initial API and implementation 
+ ******************************************************************************/
 package org.jboss.tools.jsf.test.validation;
 
 import org.eclipse.osgi.util.NLS;
@@ -6,12 +16,17 @@
 	private static final String BUNDLE_NAME = "org.jboss.tools.jsf.test.validation.messages"; //$NON-NLS-1$
 
 	public static String XHTML_CONTENT_TEMPLATE;
+	public static String XHTML_BROKEN_CONTENT_TEMPLATE;
+	public static String XHTML_LARGE_CONTENT_TEMPLATE;
 	public static String XHTML_GOOD_PUBLIC_ID;
 	public static String XHTML_WRONG_PUBLIC_ID;
 	public static String XHTML_GOOD_URI;
 	public static String XHTML_WRONG_URI;
 	public static String XHTML_GOOD_TAGNAME;
 	public static String XHTML_WRONG_TAGNAME;
+	public static String XHTML_LARGE_GOOD_TAGNAME;
+	public static String XHTML_LARGE_WRONG_TAGNAME;
+	public static String XHTML_MARKUP_IS_BROKEN_ERROR;
 	
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, XHTMLValidationTestMessages.class);

Modified: trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidatorTest.java
===================================================================
--- trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidatorTest.java	2011-10-07 17:50:35 UTC (rev 35472)
+++ trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidatorTest.java	2011-10-07 18:06:26 UTC (rev 35473)
@@ -1,3 +1,13 @@
+/******************************************************************************* 
+ * Copyright (c) 2009-2011 Red Hat, Inc. 
+ * Distributed under license by Red Hat, Inc. All rights reserved. 
+ * This program is made available under the terms of the 
+ * Eclipse Public License v1.0 which accompanies this distribution, 
+ * and is available at http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Red Hat, Inc. - initial API and implementation 
+ ******************************************************************************/
 package org.jboss.tools.jsf.test.validation;
 
 import java.io.InputStream;
@@ -19,10 +29,15 @@
 import org.jboss.tools.common.base.test.validation.TestUtil;
 import org.jboss.tools.jsf.web.validation.JSFValidationMessage;
 import org.jboss.tools.jsf.web.validation.XHTMLValidator;
-import org.jboss.tools.test.util.JobUtils;
 import org.jboss.tools.test.util.ResourcesUtils;
 import org.jboss.tools.tests.AbstractResourceMarkerTest;
 
+/**
+ * The JUnit test case for JBIDE-9828 and JBIDE-9846 issues
+ * 
+ * @author Victor V. Rubezhny
+ *
+ */
 public class XHTMLValidatorTest extends AbstractResourceMarkerTest {
 
 	protected static String PLUGIN_ID = "org.jboss.tools.jsf.test";
@@ -37,7 +52,15 @@
 		LOCALIZED_ERROR_MESSAGES.add(MessageFormat.format(JSFValidationMessage.XHTML_VALIDATION_NO_START_TAG, 
 				XHTMLValidationTestMessages.XHTML_WRONG_TAGNAME));
 	}
-
+	protected static Set<String> LOCALIZED_LARGE_ERROR_MESSAGES = new HashSet<String>();
+	static {
+		LOCALIZED_LARGE_ERROR_MESSAGES.add(MessageFormat.format(JSFValidationMessage.XHTML_VALIDATION_NO_END_TAG, 
+				XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME));
+		LOCALIZED_LARGE_ERROR_MESSAGES.add(MessageFormat.format(JSFValidationMessage.XHTML_VALIDATION_NO_START_TAG, 
+				XHTMLValidationTestMessages.XHTML_LARGE_WRONG_TAGNAME));
+	}
+	protected static String LOCALIZED_BROKEN_ERROR_MESSAGE = XHTMLValidationTestMessages.XHTML_MARKUP_IS_BROKEN_ERROR;
+	
 	// "Bad" file validation time should be not greater than "Good" file validation time multiplied by 10  
 	protected static final double NOT_BAD_DIFF_PERCENTAGE = 1000.0;
 	
@@ -58,44 +81,33 @@
 		TestUtil._waitForValidation(project);
 	}
 
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#tearDown()
-	 */
-	@Override
-	protected void tearDown() throws Exception {
-		boolean saveAutoBuild = ResourcesUtils.setBuildAutomatically(false);
-		project.delete(true, true, null);
-		JobUtils.waitForIdle();
-		ResourcesUtils.setBuildAutomatically(saveAutoBuild);
-	}
-
 	public void testWebContentValidation() throws CoreException {
 		XHTMLValidator validator = new XHTMLValidator();
 		ValidationState state = new ValidationState();
 		try {
-			// Validate good file with no XHTML Syntax errors 
+			// Validate file with good DOCTYPE declaration and no XHTML Syntax errors 
 			IFile file = createTestFile(XHTMLValidationTestMessages.XHTML_CONTENT_TEMPLATE, 
 					XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_GOOD_URI,
 					XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME);
 			long start = System.currentTimeMillis();
 			ValidationResult result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
 			long goodValidationTime = System.currentTimeMillis() - start;
-			System.out.println("Good XHTML file with no XHTML Syntax errors validation time: " + goodValidationTime + " ms");
-			assertTrue("Good XHTML file with no XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime < MAX_VALIDATION_TIME));
+			System.out.println("XHTML file with good DOCTYPE declaration and no XHTML Syntax errors validation time: " + goodValidationTime + " ms");
+			assertTrue("XHTML file with good DOCTYPE declaration and no XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime < MAX_VALIDATION_TIME));
 			assertNotNull("No validation result is returned", result);
 			assertNotNull("No validation result is returned", result.getReporter(null));
 			List messages = result.getReporter(null).getMessages();
 			assertEquals("Wrong number of error messages reported", 0, messages == null ? 0 : messages.size());
 			
-			// Validate bad file with no XHTML Syntax errors 
+			// Validate file with bad DOCTYPE declaration and no XHTML Syntax errors 
 			file = createTestFile(XHTMLValidationTestMessages.XHTML_CONTENT_TEMPLATE, 
 					XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_WRONG_URI,
 					XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME);
 			start = System.currentTimeMillis();
 			result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
 			long badValidationTime = System.currentTimeMillis() - start;
-			System.out.println("Bad XHTML file with no XHTML Syntax errors validation time: " + badValidationTime + " ms");
-			assertTrue("Bad XHTML file with no XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime < MAX_VALIDATION_TIME));
+			System.out.println("XHTML file with bad DOCTYPE declaration and no XHTML Syntax errors validation time: " + badValidationTime + " ms");
+			assertTrue("XHTML file with bad DOCTYPE declaration and no XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime < MAX_VALIDATION_TIME));
 			assertNotNull("No validation result is returned", result);
 			assertNotNull("No validation result is returned", result.getReporter(null));
 			messages = result.getReporter(null).getMessages();
@@ -106,15 +118,15 @@
 			System.out.println("(With no errors) Validation time difference: " + diff + "%");
 			assertTrue("Validation time difference between good and wrong content is greater than " + NOT_BAD_DIFF_PERCENTAGE + "%", (diff < NOT_BAD_DIFF_PERCENTAGE));
 			
-			// Validate good file with XHTML Syntax errors 
+			// Validate file with good DOCTYPE declaration and XHTML Syntax errors 
 			file = createTestFile(XHTMLValidationTestMessages.XHTML_CONTENT_TEMPLATE, 
 						XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_GOOD_URI,
 						XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_WRONG_TAGNAME);
 			start = System.currentTimeMillis();
 			result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
 			goodValidationTime = System.currentTimeMillis() - start;
-			System.out.println("Good XHTML file with XHTML Syntax errors validation time: " + goodValidationTime + " ms");
-			assertTrue("Good XHTML file with XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime < MAX_VALIDATION_TIME));
+			System.out.println("XHTML file with good DOCTYPE declaration and XHTML Syntax errors validation time: " + goodValidationTime + " ms");
+			assertTrue("XHTML file with good DOCTYPE declaration and XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime < MAX_VALIDATION_TIME));
 			assertNotNull("No validation result is returned", result);
 			assertNotNull("No validation result is returned", result.getReporter(null));
 			messages = result.getReporter(null).getMessages();
@@ -125,15 +137,15 @@
 				assertTrue("Unexpected error message found: " + message.getText(), LOCALIZED_ERROR_MESSAGES.contains(message.getText()));
 			}
 	
-			// Validate bad file with XHTML Syntax errors 
+			// Validate file with bad DOCTYPE declaration and XHTML Syntax errors 
 			file = createTestFile(XHTMLValidationTestMessages.XHTML_CONTENT_TEMPLATE, 
 					XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_WRONG_URI,
 					XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_WRONG_TAGNAME);
 			start = System.currentTimeMillis();
 			result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
 			badValidationTime = System.currentTimeMillis() - start;
-			System.out.println("Bad XHTML file with XHTML Syntax errors validation time: " + badValidationTime + " ms");
-			assertTrue("Bad XHTML file with XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime < MAX_VALIDATION_TIME));
+			System.out.println("XHTML file with bad DOCTYPE declaration and XHTML Syntax errors validation time: " + badValidationTime + " ms");
+			assertTrue("XHTML file with bad DOCTYPE declaration and XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime < MAX_VALIDATION_TIME));
 			assertNotNull("No validation result is returned", result);
 			assertNotNull("No validation result is returned", result.getReporter(null));
 			messages = result.getReporter(null).getMessages();
@@ -151,7 +163,161 @@
 			removeTestFile();
 		}
 	}
+
+	public void testBrokenWebContentValidation() throws CoreException {
+		XHTMLValidator validator = new XHTMLValidator();
+		ValidationState state = new ValidationState();
+		try {
+			// Validate file with good DOCTYPE declaration and broken content
+			IFile file = createBrokenTestFile(XHTMLValidationTestMessages.XHTML_BROKEN_CONTENT_TEMPLATE, 
+					XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_GOOD_URI);
+			long start = System.currentTimeMillis();
+			ValidationResult result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
+			long goodValidationTime = System.currentTimeMillis() - start;
+			System.out.println("XHTML file with good DOCTYPE declaration and broken content validation time: " + goodValidationTime + " ms");
+			assertTrue("XHTML file with good DOCTYPE declaration and broken content validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime < MAX_VALIDATION_TIME));
+			assertNotNull("No validation result is returned", result);
+			assertNotNull("No validation result is returned", result.getReporter(null));
+			List messages = result.getReporter(null).getMessages();
+			assertEquals("Wrong number of error messages reported", 1, messages == null ? 0 : messages.size());
+			for (Object m : messages) {
+				assertTrue("Wrong type of validation message is returned", (m instanceof Message));
+				Message message = (Message)m;
+//				System.out.println("Error Message: " + message.getText());
+				assertTrue("Unexpected error message found: " + message.getText(), LOCALIZED_BROKEN_ERROR_MESSAGE.contains(message.getText()));
+			}
+			
+			// Validate file with DOCTYPE declaration and broken content 
+			file = createBrokenTestFile(XHTMLValidationTestMessages.XHTML_BROKEN_CONTENT_TEMPLATE, 
+					XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_WRONG_URI);
+			start = System.currentTimeMillis();
+			result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
+			long badValidationTime = System.currentTimeMillis() - start;
+			System.out.println("XHTML file with bad DOCTYPE declaration and broken content validation time: " + badValidationTime + " ms");
+			assertTrue("XHTML file with bad DOCTYPE declaration and broken content validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime < MAX_VALIDATION_TIME));
+			assertNotNull("No validation result is returned", result);
+			assertNotNull("No validation result is returned", result.getReporter(null));
+			messages = result.getReporter(null).getMessages();
+			assertEquals("Wrong number of error messages reported", 1, messages == null ? 0 : messages.size());
+			for (Object m : messages) {
+				assertTrue("Wrong type of validation message is returned", (m instanceof Message));
+				Message message = (Message)m;
+//				System.out.println("Error Message: " + message.getText());
+				assertTrue("Unexpected error message found: " + message.getText(), LOCALIZED_BROKEN_ERROR_MESSAGE.contains(message.getText()));
+			}
 	
+			// Check that the difference between good and bad files validation time is not greater that NOT_BAD_DIFF_PERCENTAGE (%) of a good value
+			double diff = 100*badValidationTime/goodValidationTime;
+			System.out.println("(With broken content) Validation time difference: " + diff + "%");
+			assertTrue("Validation time difference between good and wrong DOCTYPE declaration is greater than " + NOT_BAD_DIFF_PERCENTAGE + "%", (diff < NOT_BAD_DIFF_PERCENTAGE));
+		} finally {
+			removeTestFile();
+		}
+	}
+
+	public void testLargeWebContentValidation() throws CoreException {
+		XHTMLValidator validator = new XHTMLValidator();
+		ValidationState state = new ValidationState();
+		try {
+			// Validate file with good DOCTYPE declaration and no XHTML Syntax errors 
+			IFile file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE, 
+					XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_GOOD_URI,
+					XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME);
+			long start = System.currentTimeMillis();
+			ValidationResult result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
+			long goodValidationTime = System.currentTimeMillis() - start;
+			System.out.println("Large XHTML file with good DOCTYPE declaration and no XHTML Syntax errors validation time: " + goodValidationTime + " ms");
+			assertTrue("Large XHTML file with good DOCTYPE declaration and no XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime < MAX_VALIDATION_TIME));
+			assertNotNull("No validation result is returned", result);
+			assertNotNull("No validation result is returned", result.getReporter(null));
+			List messages = result.getReporter(null).getMessages();
+			assertEquals("Wrong number of error messages reported", 0, messages == null ? 0 : messages.size());
+			
+			// Validate file with bad DOCTYPE declaration and no XHTML Syntax errors 
+			file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE, 
+					XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_WRONG_URI,
+					XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME);
+			start = System.currentTimeMillis();
+			result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
+			long badValidationTime = System.currentTimeMillis() - start;
+			System.out.println("Large XHTML file with bad DOCTYPE declaration and no XHTML Syntax errors validation time: " + badValidationTime + " ms");
+			assertTrue("Large XHTML file with bad DOCTYPE declaration and no XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime < MAX_VALIDATION_TIME));
+			assertNotNull("No validation result is returned", result);
+			assertNotNull("No validation result is returned", result.getReporter(null));
+			messages = result.getReporter(null).getMessages();
+			assertEquals("Wrong number of error messages reported", 0, messages == null ? 0 : messages.size());
+	
+			// Check that the difference between good and bad files validation time is not greater that NOT_BAD_DIFF_PERCENTAGE (%) of a good value
+			double diff = 100*badValidationTime/goodValidationTime;
+			System.out.println("(Large With no errors) Validation time difference: " + diff + "%");
+			assertTrue("Validation time difference between good and wrong content is greater than " + NOT_BAD_DIFF_PERCENTAGE + "%", (diff < NOT_BAD_DIFF_PERCENTAGE));
+			
+			// Validate file with good DOCTYPE declaration and XHTML Syntax errors 
+			file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE, 
+						XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_GOOD_URI,
+						XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_LARGE_WRONG_TAGNAME);
+			start = System.currentTimeMillis();
+			result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
+			goodValidationTime = System.currentTimeMillis() - start;
+			System.out.println("Large XHTML file with good DOCTYPE declaration and XHTML Syntax errors validation time: " + goodValidationTime + " ms");
+			assertTrue("Large XHTML file with good DOCTYPE declaration and XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime < MAX_VALIDATION_TIME));
+			assertNotNull("No validation result is returned", result);
+			assertNotNull("No validation result is returned", result.getReporter(null));
+			messages = result.getReporter(null).getMessages();
+			assertEquals("Wrong number of error messages reported", 180, messages == null ? 0 : messages.size());
+			for (Object m : messages) {
+				assertTrue("Wrong type of validation message is returned", (m instanceof Message));
+				Message message = (Message)m;
+//				System.out.println("Error Message: " + message.getText());
+				assertTrue("Unexpected error message found: " + message.getText(), LOCALIZED_LARGE_ERROR_MESSAGES.contains(message.getText()));
+			}
+	
+			// Validate file with bad DOCTYPE declaration and XHTML Syntax errors 
+			file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE, 
+					XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_WRONG_URI,
+					XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_LARGE_WRONG_TAGNAME);
+			start = System.currentTimeMillis();
+			result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
+			badValidationTime = System.currentTimeMillis() - start;
+			System.out.println("Large XHTML file with bad DOCTYPE declaration and XHTML Syntax errors validation time: " + badValidationTime + " ms");
+			assertTrue("Large XHTML file with bad DOCTYPE declaration and XHTML Syntax errors validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime < MAX_VALIDATION_TIME));
+			assertNotNull("No validation result is returned", result);
+			assertNotNull("No validation result is returned", result.getReporter(null));
+			messages = result.getReporter(null).getMessages();
+			assertEquals("Wrong number of error messages reported", 180, messages == null ? 0 : messages.size());
+			for (Object m : messages) {
+				assertTrue("Wrong type of validation message is returned", (m instanceof Message));
+				Message message = (Message)m;
+//				System.out.println("Error Message: " + message.getText());
+				assertTrue("Unexpected error message found: " + message.getText(), LOCALIZED_LARGE_ERROR_MESSAGES.contains(message.getText()));
+			}
+			// Check that the difference between good and bad files validation time is not greater that NOT_BAD_DIFF_PERCENTAGE (%) of a good value
+			diff = 100*badValidationTime/goodValidationTime;
+			System.out.println("(Large With errors) Validation time difference: " + diff + "%");
+			assertTrue("Validation time difference between good and wrong content is greater than " + NOT_BAD_DIFF_PERCENTAGE + "%", (diff < NOT_BAD_DIFF_PERCENTAGE));
+		} finally {
+			removeTestFile();
+		}
+	}
+
+	public void testBrokenEntityWebContentValidation() throws CoreException {
+		XHTMLValidator validator = new XHTMLValidator();
+		ValidationState state = new ValidationState();
+		try {
+			// Validate file with good DOCTYPE declaration and no XHTML Syntax errors 
+			IFile file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE, 
+					XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID, XHTMLValidationTestMessages.XHTML_GOOD_URI,
+					XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME, XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME);
+			ValidationResult result = validator.validate(file, IResourceDelta.CHANGED, state, new NullProgressMonitor());
+		} catch (NullPointerException e) {
+			fail("Validation on XHTML file with a 'broken' entity has failed with NullPointerException: " + e.getLocalizedMessage());
+		} catch (ArrayIndexOutOfBoundsException e) {
+			fail("Validation on XHTML file with a 'broken' entity has failed with ArrayIndexOutOfBoundsException: " + e.getLocalizedMessage());
+		} finally {
+			removeTestFile();
+		}
+	}
+
 	private IFile createTestFile(String template, String publicId, String uri, String openingTagName, String closingTagName) {
 		IFile testFile = project.getFile(FILE_NAME);
 		String content = MessageFormat.format(template, publicId, uri, openingTagName, closingTagName);
@@ -167,7 +333,24 @@
 		}
 		return testFile;
 	}
+
+	private IFile createBrokenTestFile(String template, String publicId, String uri) {
+		IFile testFile = project.getFile(FILE_NAME);
+		String content = MessageFormat.format(template, publicId, uri);
+		InputStream source = new StringBufferInputStream(content);
+		try {
+			if (testFile.exists()) {
+				testFile.setContents(source, true, false, new NullProgressMonitor());
+			} else {
+				testFile.create(source, true, new NullProgressMonitor());
+			}
+		} catch (CoreException e) {
+			fail(e.getLocalizedMessage());
+		}
+		return testFile;
+	}
 	
+
 	private void removeTestFile() {
 		IFile testFile = project.getFile(FILE_NAME);
 		if (testFile.exists()) {

Modified: trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/messages.properties
===================================================================
--- trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/messages.properties	2011-10-07 17:50:35 UTC (rev 35472)
+++ trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/messages.properties	2011-10-07 18:06:26 UTC (rev 35473)
@@ -4,9 +4,2339 @@
 	<{2} name=""> \
 	</{3}> \
 </ui:composition>
+XHTML_BROKEN_CONTENT_TEMPLATE=<!DOCTYPE composition PUBLIC "{0}" "{1}"> \
+</
 XHTML_GOOD_PUBLIC_ID=-//W3C//DTD XHTML 1.0 Transitional//EN
 XHTML_WRONG_PUBLIC_ID=-//W3C//DTD XHTMLs 1.0 Transitional//EN
 XHTML_GOOD_URI=http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
 XHTML_WRONG_URI=http://hans-moleman.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
 XHTML_GOOD_TAGNAME=ui:define
-XHTML_WRONG_TAGNAME=enifed:iu
\ No newline at end of file
+XHTML_WRONG_TAGNAME=enifed:iu
+XHTML_LARGE_GOOD_TAGNAME=rich:panel
+XHTML_LARGE_WRONG_TAGNAME=lenep:hcir
+XHTML_MARKUP_IS_BROKEN_ERROR=The markup in the document preceding the root element must be well-formed.
+XHTML_LARGE_CONTENT_TEMPLATE=<!DOCTYPE composition PUBLIC "{0}" "{1}"> \
+<ui:composition xmlns="http://www.w3.org/1999/xhtml" \
+	xmlns:s="http://jboss.com/products/seam/taglib" \
+	xmlns:ui="http://java.sun.com/jsf/facelets" \
+	xmlns:f="http://java.sun.com/jsf/core" \
+	xmlns:h="http://java.sun.com/jsf/html" \
+	xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml"> \
+	<ui:define name="body"> \
+		<h1>Welcome to Seam!</h1> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+										<h1>Welcome to Seam!</h1> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+										<{2}> \
+											<h:panelGrid columns="2" \
+												border="" \
+												bgcolor=""> \
+												<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+												<s:div styleClass="info"> \
+													<p><strong>Your seam-gen project is deployed!</strong> \
+													Here are some of the features this project provides:</p> \
+													<ul class="bullets"> \
+														<{2}> \
+															<h:panelGrid columns="2" \
+																border="" \
+																bgcolor=""> \
+																<h:graphicImage value="/img/seamlogo.png" \
+																	alt="Seam logo & copyright" /> \
+																<s:div styleClass="info"> \
+																	<{2}> \
+																		<h:panelGrid columns="2" \
+																			border="" \
+																			bgcolor=""> \
+																			<h:graphicImage value="/img/seamlogo.png" \
+																				alt="Seam logo & copyright" /> \
+																			<s:div styleClass="info"> \
+																				<{2}> \
+																					<h:panelGrid columns="2" \
+																						border="" \
+																						bgcolor=""> \
+																						<h:graphicImage value="/img/seamlogo.png" \
+																							alt="Seam logo & copyright" /> \
+																						<s:div styleClass="info"> \
+																							<p><strong>Your seam-gen project is \
+																							deployed!</strong> Here are some of the features this \
+																							project provides:</p> \
+																							<ul class="bullets"> \
+																								<li>Ant build script</li> \
+																								<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																								<li>Development & production profiles</li> \
+																								<li>Integration testing using TestNG & \
+																								Embedded JBoss</li> \
+																								<li>JavaBean or EJB 3.0 Seam components</li> \
+																								<li>JPA entity classes</li> \
+																								<li>A configurable DataSource & JPA \
+																								EntityManager</li> \
+																								<li>Templated Facelets views</li> \
+																								<li>RichFaces panels & tables</li> \
+																								<li>Default CSS stylesheet</li> \
+																								<li>Internationalization support</li> \
+																							</ul> \
+																						</s:div> \
+																					</h:panelGrid> \
+																				</{3}> \
+																				<p><strong>Your seam-gen project is \
+																				deployed!</strong> Here are some of the features this project \
+																				provides:</p> \
+																				<ul class="bullets"> \
+																					<li>Ant build script</li> \
+																					<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																					<li>Development & production profiles</li> \
+																					<li>Integration testing using TestNG & \
+																					Embedded JBoss</li> \
+																					<li>JavaBean or EJB 3.0 Seam components</li> \
+																					<li>JPA entity classes</li> \
+																					<li>A configurable DataSource & JPA \
+																					EntityManager</li> \
+																					<li>Templated Facelets views</li> \
+																					<li>RichFaces panels & tables</li> \
+																					<li>Default CSS stylesheet</li> \
+																					<li>Internationalization support</li> \
+																				</ul> \
+																			</s:div> \
+																		</h:panelGrid> \
+																	</{3}> \
+																	<p><strong>Your seam-gen project is \
+																	deployed!</strong> Here are some of the features this project \
+																	provides:</p> \
+																	<ul class="bullets"> \
+																		<li>Ant build script</li> \
+																		<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																		<li>Development & production profiles</li> \
+																		<li>Integration testing using TestNG & Embedded \
+																		JBoss</li> \
+																		<li>JavaBean or EJB 3.0 Seam components</li> \
+																		<li>JPA entity classes</li> \
+																		<li>A configurable DataSource & JPA \
+																		EntityManager</li> \
+																		<li>Templated Facelets views</li> \
+																		<li>RichFaces panels & tables</li> \
+																		<li>Default CSS stylesheet</li> \
+																		<li>Internationalization support</li> \
+																	</ul> \
+																</s:div> \
+															</h:panelGrid> \
+														</{3}> \
+														<li>Ant build script</li> \
+														<li>Deployment to JBoss AS (EAR or WAR)</li> \
+														<li>Development & production profiles</li> \
+														<li>Integration testing using TestNG & Embedded \
+														JBoss</li> \
+														<li>JavaBean or EJB 3.0 Seam components</li> \
+														<li>JPA entity classes</li> \
+														<li>A configurable DataSource & JPA EntityManager</li> \
+														<li>Templated Facelets views</li> \
+														<li>RichFaces panels & tables</li> \
+														<li>Default CSS stylesheet</li> \
+														<li>Internationalization support</li> \
+													</ul> \
+												</s:div> \
+											</h:panelGrid> \
+										</{3}> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+		<{2}> \
+			<h:panelGrid columns="2" \
+				border="" \
+				bgcolor=""> \
+				<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+				<s:div styleClass="info"> \
+					<p><strong>Your seam-gen project is deployed!</strong> Here are \
+					some of the features this project provides:</p> \
+					<ul class="bullets"> \
+						<{2}> \
+							<h:panelGrid columns="2" \
+								border="" \
+								bgcolor=""> \
+								<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+								<s:div styleClass="info"> \
+									<{2}> \
+										<h:panelGrid columns="2" \
+											border="" \
+											bgcolor=""> \
+											<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+											<s:div styleClass="info"> \
+												<{2}> \
+													<h:panelGrid columns="2" \
+														border="" \
+														bgcolor=""> \
+														<h:graphicImage value="/img/seamlogo.png" alt="Seam logo & copyright" /> \
+														<s:div styleClass="info"> \
+															<p><strong>Your seam-gen project is \
+															deployed!</strong> Here are some of the features this project \
+															provides:</p> \
+															<ul class="bullets"> \
+																<li>Ant build script</li> \
+																<li>Deployment to JBoss AS (EAR or WAR)</li> \
+																<li>Development & production profiles</li> \
+																<li>Integration testing using TestNG & Embedded \
+																JBoss</li> \
+																<li>JavaBean or EJB 3.0 Seam components</li> \
+																<li>JPA entity classes</li> \
+																<li>A configurable DataSource & JPA EntityManager</li> \
+																<li>Templated Facelets views</li> \
+																<li>RichFaces panels & tables</li> \
+																<li>Default CSS stylesheet</li> \
+																<li>Internationalization support</li> \
+															</ul> \
+														</s:div> \
+													</h:panelGrid> \
+												</{3}> \
+												<p><strong>Your seam-gen project is deployed!</strong> \
+												Here are some of the features this project provides:</p> \
+												<ul class="bullets"> \
+													<li>Ant build script</li> \
+													<li>Deployment to JBoss AS (EAR or WAR)</li> \
+													<li>Development & production profiles</li> \
+													<li>Integration testing using TestNG & Embedded \
+													JBoss</li> \
+													<li>JavaBean or EJB 3.0 Seam components</li> \
+													<li>JPA entity classes</li> \
+													<li>A configurable DataSource & JPA EntityManager</li> \
+													<li>Templated Facelets views</li> \
+													<li>RichFaces panels & tables</li> \
+													<li>Default CSS stylesheet</li> \
+													<li>Internationalization support</li> \
+												</ul> \
+											</s:div> \
+										</h:panelGrid> \
+									</{3}> \
+									<p><strong>Your seam-gen project is deployed!</strong> Here \
+									are some of the features this project provides:</p> \
+									<ul class="bullets"> \
+										<li>Ant build script</li> \
+										<li>Deployment to JBoss AS (EAR or WAR)</li> \
+										<li>Development & production profiles</li> \
+										<li>Integration testing using TestNG & Embedded JBoss</li> \
+										<li>JavaBean or EJB 3.0 Seam components</li> \
+										<li>JPA entity classes</li> \
+										<li>A configurable DataSource & JPA EntityManager</li> \
+										<li>Templated Facelets views</li> \
+										<li>RichFaces panels & tables</li> \
+										<li>Default CSS stylesheet</li> \
+										<li>Internationalization support</li> \
+									</ul> \
+								</s:div> \
+							</h:panelGrid> \
+						</{3}> \
+						<li>Ant build script</li> \
+						<li>Deployment to JBoss AS (EAR or WAR)</li> \
+						<li>Development & production profiles</li> \
+						<li>Integration testing using TestNG & Embedded JBoss</li> \
+						<li>JavaBean or EJB 3.0 Seam components</li> \
+						<li>JPA entity classes</li> \
+						<li>A configurable DataSource & JPA EntityManager</li> \
+						<li>Templated Facelets views</li> \
+						<li>RichFaces panels & tables</li> \
+						<li>Default CSS stylesheet</li> \
+						<li>Internationalization support</li> \
+					</ul> \
+				</s:div> \
+			</h:panelGrid> \
+		</{3}> \
+	</ui:define> \
+</ui:composition>
\ No newline at end of file



More information about the jbosstools-commits mailing list