JBoss Tools SVN: r35481 - trunk/common/plugins/org.jboss.tools.common.base.test/src/org/jboss/tools/common/base/test/contentassist.
by jbosstools-commits@lists.jboss.org
Author: akazakov
Date: 2011-10-07 16:14:37 -0400 (Fri, 07 Oct 2011)
New Revision: 35481
Modified:
trunk/common/plugins/org.jboss.tools.common.base.test/src/org/jboss/tools/common/base/test/contentassist/AbstractContentAssistantTestCase.java
Log:
https://issues.jboss.org/browse/JBIDE-9868 org.jboss.tools.jsf.jsp.ca.test.CAForJSF2BeansInJavaTest failure
Modified: trunk/common/plugins/org.jboss.tools.common.base.test/src/org/jboss/tools/common/base/test/contentassist/AbstractContentAssistantTestCase.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.base.test/src/org/jboss/tools/common/base/test/contentassist/AbstractContentAssistantTestCase.java 2011-10-07 20:01:13 UTC (rev 35480)
+++ trunk/common/plugins/org.jboss.tools.common.base.test/src/org/jboss/tools/common/base/test/contentassist/AbstractContentAssistantTestCase.java 2011-10-07 20:14:37 UTC (rev 35481)
@@ -104,19 +104,24 @@
// }
ICompletionProposal[] result = res.toArray(new ICompletionProposal[res.size()]);
+ StringBuffer sb = new StringBuffer("[");
+ for (ICompletionProposal p : result) {
+ sb.append(p.getDisplayString()).append(", ");
+ }
+ sb.append("]");
int foundCounter = 0;
for (int i = 0; i < proposals.length; i++) {
boolean found = compareProposal(proposals[i], result);
if (found)
foundCounter++;
- assertTrue("Proposal " + proposals[i] + " not found!", found ); //$NON-NLS-1$ //$NON-NLS-2$
+ assertTrue("Proposal " + proposals[i] + " not found! Found proposals: " + sb.toString(), found ); //$NON-NLS-1$ //$NON-NLS-2$
}
if (exactly) {
if (excludeELProposalsFromExactTest) {
- assertTrue("Some other proposals were found!", foundCounter == proposals.length); //$NON-NLS-1$
+ assertEquals("Some other proposals were found! Found proposals: " + sb.toString(), foundCounter, proposals.length); //$NON-NLS-1$
} else {
- assertTrue("Some other proposals were found!", result.length == proposals.length); //$NON-NLS-1$
+ assertEquals("Some other proposals were found! Found proposals: " + sb.toString(), result.length, proposals.length); //$NON-NLS-1$
}
}
13 years, 3 months
JBoss Tools SVN: r35480 - trunk/bpel/tests/org.jboss.tools.bpel.ui.test.
by jbosstools-commits@lists.jboss.org
Author: nickboldt
Date: 2011-10-07 16:01:13 -0400 (Fri, 07 Oct 2011)
New Revision: 35480
Modified:
trunk/bpel/tests/org.jboss.tools.bpel.ui.test/pom.xml
Log:
JBDS-1876 disable emma coverage for bpel until we can get the sources from upstream into the Hudson workspace
Modified: trunk/bpel/tests/org.jboss.tools.bpel.ui.test/pom.xml
===================================================================
--- trunk/bpel/tests/org.jboss.tools.bpel.ui.test/pom.xml 2011-10-07 19:59:31 UTC (rev 35479)
+++ trunk/bpel/tests/org.jboss.tools.bpel.ui.test/pom.xml 2011-10-07 20:01:13 UTC (rev 35480)
@@ -12,8 +12,10 @@
<packaging>eclipse-test-plugin</packaging>
<properties>
+ <!-- TODO: re-enable this as per JBDS-1876
<emma.filter>org.eclipse.bpel*</emma.filter>
<emma.instrument.bundles>org.eclipse.bpel.ui,org.eclipse.bpel.common.ui,org.eclipse.bpel.common.model,org.eclipse.bpel.model</emma.instrument.bundles>
+ -->
</properties>
13 years, 3 months
JBoss Tools SVN: r35479 - trunk/jsf/tests/org.jboss.tools.jsf.ui.test/src/org/jboss/tools/jsf/jsp/ca/test.
by jbosstools-commits@lists.jboss.org
Author: akazakov
Date: 2011-10-07 15:59:31 -0400 (Fri, 07 Oct 2011)
New Revision: 35479
Modified:
trunk/jsf/tests/org.jboss.tools.jsf.ui.test/src/org/jboss/tools/jsf/jsp/ca/test/CAForJSF2BeansInJavaTest.java
Log:
https://issues.jboss.org/browse/JBIDE-9868 org.jboss.tools.jsf.jsp.ca.test.CAForJSF2BeansInJavaTest failure
Modified: trunk/jsf/tests/org.jboss.tools.jsf.ui.test/src/org/jboss/tools/jsf/jsp/ca/test/CAForJSF2BeansInJavaTest.java
===================================================================
--- trunk/jsf/tests/org.jboss.tools.jsf.ui.test/src/org/jboss/tools/jsf/jsp/ca/test/CAForJSF2BeansInJavaTest.java 2011-10-07 19:14:02 UTC (rev 35478)
+++ trunk/jsf/tests/org.jboss.tools.jsf.ui.test/src/org/jboss/tools/jsf/jsp/ca/test/CAForJSF2BeansInJavaTest.java 2011-10-07 19:59:31 UTC (rev 35479)
@@ -35,7 +35,7 @@
*/
public void testCAForJSF2Beans(){
String[] proposals = {
- "mybean1", "mybean2"
+ "mybean1 : Bean1", "mybean2 : Bean2"
};
checkProposals(PAGE_NAME, "#{}", 2, proposals, false);
13 years, 3 months
JBoss Tools SVN: r35478 - in trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test: projects/CDISolderTest/src/org/jboss/servlet and 1 other directories.
by jbosstools-commits@lists.jboss.org
Author: scabanovich
Date: 2011-10-07 15:14:02 -0400 (Fri, 07 Oct 2011)
New Revision: 35478
Added:
trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/
trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean1.java
trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean2.java
trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyQualifier.java
trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/Validation.java
trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/SeamServletValidationTest.java
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/CDISeamSolderCoreAllTests.java
Log:
JBIDE-9852
https://issues.jboss.org/browse/JBIDE-9852
Tests for seam servlet migrated to 3.1.
Added: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean1.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean1.java (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean1.java 2011-10-07 19:14:02 UTC (rev 35478)
@@ -0,0 +1,5 @@
+package org.jboss.servlet;
+
+public class MyBean1 {
+
+}
\ No newline at end of file
Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean1.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean2.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean2.java (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean2.java 2011-10-07 19:14:02 UTC (rev 35478)
@@ -0,0 +1,5 @@
+package org.jboss.servlet;
+
+public class MyBean2 extends MyBean1 {
+
+}
Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyBean2.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyQualifier.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyQualifier.java (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyQualifier.java 2011-10-07 19:14:02 UTC (rev 35478)
@@ -0,0 +1,21 @@
+package org.jboss.servlet;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RUNTIME)
+@Documented
+public @interface MyQualifier {
+
+}
Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/MyQualifier.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/Validation.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/Validation.java (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/Validation.java 2011-10-07 19:14:02 UTC (rev 35478)
@@ -0,0 +1,44 @@
+package org.jboss.servlet;
+
+import javax.inject.Inject;
+
+import org.jboss.solder.servlet.http.CookieParam;
+import org.jboss.solder.servlet.http.DefaultValue;
+import org.jboss.solder.servlet.http.HeaderParam;
+import org.jboss.solder.servlet.http.RequestParam;
+
+public class Validation {
+
+ @Inject @RequestParam("id") @MyQualifier String bookId;
+ @Inject @RequestParam @MyQualifier String id;
+ @Inject @RequestParam @DefaultValue("25") String pageSize;
+ @Inject @HeaderParam("User-Agent") @MyQualifier String userAgent;
+ @Inject @HeaderParam @MyQualifier String userAgent2;
+ @Inject @HeaderParam @DefaultValue("25") @MyQualifier String userAgent3;
+ @Inject @CookieParam("User-Agent") String userAgent4;
+ @Inject @CookieParam @MyQualifier String userAgent5;
+ @Inject @CookieParam @DefaultValue("25") @MyQualifier String userAgent6;
+ @Inject @RequestParam("id") MyBean1 bookId1;
+ @Inject @RequestParam MyBean1 id1;
+ @Inject @RequestParam @DefaultValue("25") MyBean1 pageSize1;
+ @Inject @HeaderParam("User-Agent") MyBean1 userAgent7;
+ @Inject @HeaderParam MyBean1 userAgent8;
+ @Inject @HeaderParam @DefaultValue("25") MyBean1 userAgent9;
+ @Inject @CookieParam("User-Agent") MyBean1 userAgent10;
+ @Inject @CookieParam MyBean1 userAgent11;
+ @Inject @CookieParam @DefaultValue("25") MyBean1 userAgent12;
+ @Inject @RequestParam public void setMyBeanOk(MyBean1 bean, @MyQualifier String bean2) {}
+ @Inject @RequestParam("id") public void setMyBeanOk1(MyBean1 bean, @MyQualifier String bean2) {}
+ @Inject @RequestParam @DefaultValue("25") public void setMyBeanOk2(MyBean1 bean, @MyQualifier String bean2) {}
+ @Inject @HeaderParam public void setMyBeanOk3(MyBean1 bean, @MyQualifier String bean2) {}
+ @Inject @HeaderParam("id") public void setMyBeanOk4(MyBean1 bean, String bean2) {}
+ @Inject @HeaderParam @DefaultValue("25") public void setMyBeanOk5(MyBean1 bean, @MyQualifier String bean2) {}
+ @Inject @CookieParam public void setMyBeanOk6(MyBean1 bean, @MyQualifier String bean2) {}
+ @Inject @CookieParam("id") public void setMyBeanOk7(MyBean1 bean, @MyQualifier String bean2) {}
+ @Inject @CookieParam @DefaultValue("25") public void setMyBeanOk8(MyBean1 bean, @MyQualifier String bean2) {}
+
+ @Inject MyBean1 beanBroken;
+ @Inject @MyQualifier String bean2Broken;
+ @Inject public void setMyBeanBroken(MyBean1 bean) {}
+ @Inject public void setMyBeanBroken(@MyQualifier String bean) {}
+}
\ No newline at end of file
Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/projects/CDISolderTest/src/org/jboss/servlet/Validation.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/CDISeamSolderCoreAllTests.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/CDISeamSolderCoreAllTests.java 2011-10-07 19:13:28 UTC (rev 35477)
+++ trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/CDISeamSolderCoreAllTests.java 2011-10-07 19:14:02 UTC (rev 35478)
@@ -47,6 +47,7 @@
suite31.addTestSuite(ServiceHandlerTest.class);
suite31.addTestSuite(DefaultBeanTest.class);
suite31.addTestSuite(UnwrapsTest.class);
+ suite31.addTestSuite(SeamServletValidationTest.class);
suiteAll.addTest(suite);
Added: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/SeamServletValidationTest.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/SeamServletValidationTest.java (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/SeamServletValidationTest.java 2011-10-07 19:14:02 UTC (rev 35478)
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 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.cdi.seam.solder.core.test;
+
+import org.eclipse.core.resources.IFile;
+import org.jboss.tools.cdi.internal.core.validation.CDIValidationMessages;
+import org.jboss.tools.tests.AbstractResourceMarkerTest;
+
+/**
+ * @author Alexey Kazakov
+ */
+public class SeamServletValidationTest extends SeamSolderTest {
+
+ /**
+ * CDI validator should ignore injection points annotated @RequestParam/@HeaderParam/@CookieParam
+ * See https://issues.jboss.org/browse/JBIDE-9389
+ * @throws Exception
+ */
+ public void testInjectionValidationForField() throws Exception {
+ IFile file = getTestProject().getFile("src/org/jboss/servlet/Validation.java");
+ for (int i = 12; i < 30; i++) {
+ AbstractResourceMarkerTest.assertMarkerIsNotCreated(file, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS, i);
+ AbstractResourceMarkerTest.assertMarkerIsNotCreated(file, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS, i);
+ }
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS, 40, 42);
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS, 41, 43);
+ }
+
+ /**
+ * CDI validator should ignore injection points annotated @RequestParam/@HeaderParam/@CookieParam
+ * See https://issues.jboss.org/browse/JBIDE-9389
+ * @throws Exception
+ */
+ public void testInjectionValidationForParam() throws Exception {
+ IFile file = getTestProject().getFile("src/org/jboss/servlet/Validation.java");
+ for (int i = 30; i < 39; i++) {
+ AbstractResourceMarkerTest.assertMarkerIsNotCreated(file, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS, i);
+ AbstractResourceMarkerTest.assertMarkerIsNotCreated(file, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS, i);
+ }
+ }
+}
\ No newline at end of file
Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.seam.solder.core.test/src/org/jboss/tools/cdi/seam/solder/core/test/SeamServletValidationTest.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
13 years, 3 months
JBoss Tools SVN: r35477 - in trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core: src/org/jboss/tools/cdi/seam/solder/core and 1 other directory.
by jbosstools-commits@lists.jboss.org
Author: scabanovich
Date: 2011-10-07 15:13:28 -0400 (Fri, 07 Oct 2011)
New Revision: 35477
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServletExtension.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants30.java
Log:
JBIDE-9852
https://issues.jboss.org/browse/JBIDE-9852
Seam servlet migrated to 3.1.
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml 2011-10-07 18:27:24 UTC (rev 35476)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml 2011-10-07 19:13:28 UTC (rev 35477)
@@ -34,6 +34,11 @@
</cdiextension>
<cdiextension
+ class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderServletExtension"
+ runtime="org.jboss.solder.servlet.ServletExtension">
+ </cdiextension>
+
+ <cdiextension
class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolder30CoreExtension"
runtime="org.jboss.seam.solder.core.CoreExtension">
</cdiextension>
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants30.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants30.java 2011-10-07 18:27:24 UTC (rev 35476)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants30.java 2011-10-07 19:13:28 UTC (rev 35477)
@@ -10,8 +10,6 @@
******************************************************************************/
package org.jboss.tools.cdi.seam.solder.core;
-import org.jboss.tools.cdi.core.CDIConstants;
-
/**
*
* @author Viacheslav Kabanovich
Added: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServletExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServletExtension.java (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServletExtension.java 2011-10-07 19:13:28 UTC (rev 35477)
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 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.cdi.seam.solder.core;
+
+import org.eclipse.jdt.core.IType;
+import org.jboss.tools.cdi.core.IInjectionPoint;
+import org.jboss.tools.cdi.core.IInjectionPointParameter;
+import org.jboss.tools.cdi.core.extension.ICDIExtension;
+import org.jboss.tools.cdi.core.extension.feature.IInjectionPointValidatorFeature;
+import org.jboss.tools.common.java.IAnnotated;
+
+/**
+ * Solder version 3.1
+ *
+ * @author Alexey Kazakov
+ */
+public class CDISeamSolderServletExtension implements ICDIExtension, IInjectionPointValidatorFeature {
+ private final static String SEAM_SERVLET_HTTP_PACKAGE_NAME = "org.jboss.solder.servlet.http";
+
+ private final static String SEAM_SERVLET_REQUEST_PARAM_TYPE_NAME = SEAM_SERVLET_HTTP_PACKAGE_NAME + ".RequestParam";
+ private final static String SEAM_SERVLET_HEADER_PARAM_TYPE_NAME = SEAM_SERVLET_HTTP_PACKAGE_NAME + ".HeaderParam";
+ private final static String SEAM_SERVLET_COOKIE_PARAM_TYPE_NAME = SEAM_SERVLET_HTTP_PACKAGE_NAME + ".CookieParam";
+
+ /**
+ * If the injection point annotated @RequestParam, @HeaderParam or @CookieParam then don't try to resolve it.
+ * See https://issues.jboss.org/browse/JBIDE-9389
+ *
+ * @see org.jboss.tools.cdi.core.extension.feature.IInjectionPointValidatorFeature#shouldIgnoreInjection(org.eclipse.jdt.core.IType, org.jboss.tools.cdi.core.IInjectionPoint)
+ */
+ @Override
+ public boolean shouldIgnoreInjection(IType typeOfInjectionPoint, IInjectionPoint injection) {
+ IAnnotated annotated = injection;
+ if(injection instanceof IInjectionPointParameter) {
+ IInjectionPointParameter param = (IInjectionPointParameter)injection;
+ annotated = param.getBeanMethod();
+ }
+
+ return annotated.getAnnotation(SEAM_SERVLET_COOKIE_PARAM_TYPE_NAME) != null
+ || annotated.getAnnotation(SEAM_SERVLET_HEADER_PARAM_TYPE_NAME) != null
+ || annotated.getAnnotation(SEAM_SERVLET_REQUEST_PARAM_TYPE_NAME) != null;
+ }
+}
\ No newline at end of file
Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServletExtension.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
13 years, 3 months
JBoss Tools SVN: r35476 - trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation.
by jbosstools-commits@lists.jboss.org
Author: vrubezhny
Date: 2011-10-07 14:27:24 -0400 (Fri, 07 Oct 2011)
New Revision: 35476
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java
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 18:18:09 UTC (rev 35475)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java 2011-10-07 18:27:24 UTC (rev 35476)
@@ -668,8 +668,10 @@
}
} catch (MalformedURLException e) {
// Ignore (null will be returned as result)
+ JSFModelPlugin.getPluginLog().logError(e);
} catch (IOException e) {
// Ignore (null will be returned as result)
+ JSFModelPlugin.getPluginLog().logError(e);
}
return stream;
}
13 years, 3 months
JBoss Tools SVN: r35475 - trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation.
by jbosstools-commits@lists.jboss.org
Author: vrubezhny
Date: 2011-10-07 14:18:09 -0400 (Fri, 07 Oct 2011)
New Revision: 35475
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java
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 18:08:00 UTC (rev 35474)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java 2011-10-07 18:18:09 UTC (rev 35475)
@@ -159,7 +159,6 @@
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;
@@ -183,16 +182,14 @@
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) {
@@ -670,11 +667,9 @@
stream = new FilteredInputStream(connect.getInputStream());
}
} catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ // Ignore (null will be returned as result)
} catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ // Ignore (null will be returned as result)
}
return stream;
}
13 years, 3 months
JBoss Tools SVN: r35474 - trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/filesystems/impl.
by jbosstools-commits@lists.jboss.org
Author: scabanovich
Date: 2011-10-07 14:08:00 -0400 (Fri, 07 Oct 2011)
New Revision: 35474
Modified:
trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/filesystems/impl/Libs.java
Log:
JBIDE-9867
https://issues.jboss.org/browse/JBIDE-9867
Deadlock in Libs.updatePaths() if fixed.
Modified: trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/filesystems/impl/Libs.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/filesystems/impl/Libs.java 2011-10-07 18:06:26 UTC (rev 35473)
+++ trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/filesystems/impl/Libs.java 2011-10-07 18:08:00 UTC (rev 35474)
@@ -85,7 +85,8 @@
}
public boolean update() {
- boolean result = updatePaths();
+ int cpv = classpathVersion;
+ boolean result = hasToUpdatePaths() && updatePaths(getNewPaths(), cpv);
if(result) fire();
if(paths == null && result) return true;
@@ -99,21 +100,29 @@
classpathVersion++;
}
- synchronized boolean updatePaths() {
- if(classpathVersion <= pathsVersion) {
- return false;
- }
- pathsVersion = classpathVersion;
- List<String> newPaths = null;
+ synchronized boolean hasToUpdatePaths() {
+ return (classpathVersion > pathsVersion);
+ }
+
+ private List<String> getNewPaths() {
+ List<String> result = null;
try {
- newPaths = EclipseResourceUtil.getClassPath(getProjectResource());
+ result = EclipseResourceUtil.getClassPath(getProjectResource());
List<String> jre = EclipseResourceUtil.getJREClassPath(getProjectResource());
- if(jre != null) newPaths.removeAll(jre);
+ if(jre != null) result.removeAll(jre);
} catch (CoreException e) {
ModelPlugin.getDefault().logError(e);
} catch(IOException e) {
ModelPlugin.getDefault().logError(e);
}
+ return result;
+ }
+
+ private synchronized boolean updatePaths(List<String> newPaths, int cpv) {
+ if(cpv <= pathsVersion) {
+ return false;
+ }
+ pathsVersion = cpv;
if(paths == null && newPaths == null) return false;
if((newPaths != null && paths != null) && (paths.size() == newPaths.size())) {
boolean b = false;
13 years, 3 months
JBoss Tools SVN: r35473 - in trunk/jsf: tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation and 1 other directory.
by jbosstools-commits@lists.jboss.org
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-transitio...
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
13 years, 3 months
JBoss Tools SVN: r35472 - in trunk/forge/plugins: org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console and 1 other directories.
by jbosstools-commits@lists.jboss.org
Author: koen.aers(a)jboss.com
Date: 2011-10-07 13:50:35 -0400 (Fri, 07 Oct 2011)
New Revision: 35472
Added:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/AllCommandsInterceptor.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeCommandProcessor.java
Modified:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/EventHandler.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeTextViewer.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ForgeView.java
Log:
- AllCommandsInterceptor will send the tools info about the current command that has been sent to the runtime (before the command gets executed)
- EventHandler sends the tools info about the command that has been executed
- ForgeCommandProcessor will keep track of the currently executing command and do pre/post processing if necessary
- ForgeTextViewer gets informed of the commands that are about to be executed or have been executed
Added: trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/AllCommandsInterceptor.java
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/AllCommandsInterceptor.java (rev 0)
+++ trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/AllCommandsInterceptor.java 2011-10-07 17:50:35 UTC (rev 35472)
@@ -0,0 +1,25 @@
+package org.jboss.tools.forge.runtime.ext;
+
+import javax.inject.Inject;
+
+import org.jboss.forge.shell.Shell;
+import org.jboss.forge.shell.spi.CommandInterceptor;
+
+public class AllCommandsInterceptor implements CommandInterceptor {
+
+ private static final String ESCAPE = new String(new char[] { 27, '%'} );
+
+ @Inject
+ private Shell shell;
+
+ @Override
+ public String intercept(String line) {
+ sendEscaped("Intercepted Command: " + line);
+ return line;
+ }
+
+ private void sendEscaped(String str) {
+ shell.print(ESCAPE + str + ESCAPE);
+ }
+
+}
Modified: trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/EventHandler.java
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/EventHandler.java 2011-10-07 17:42:47 UTC (rev 35471)
+++ trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/EventHandler.java 2011-10-07 17:50:35 UTC (rev 35472)
@@ -4,7 +4,7 @@
import javax.inject.Inject;
import org.jboss.forge.shell.Shell;
-import org.jboss.forge.shell.events.PostStartup;
+import org.jboss.forge.shell.events.CommandExecuted;
public class EventHandler {
@@ -13,8 +13,8 @@
@Inject
private Shell shell;
- public void startup(@Observes PostStartup event) {
- sendEscaped("PostStartup");
+ public void handleCommandExecuted(@Observes CommandExecuted event) {
+ sendEscaped("Executed Command: " + event.getCommand().getName());
}
private void sendEscaped(String str) {
Added: trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeCommandProcessor.java
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeCommandProcessor.java (rev 0)
+++ trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeCommandProcessor.java 2011-10-07 17:50:35 UTC (rev 35472)
@@ -0,0 +1,5 @@
+package org.jboss.tools.forge.ui.console;
+
+public class ForgeCommandProcessor {
+
+}
Modified: trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeTextViewer.java
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeTextViewer.java 2011-10-07 17:42:47 UTC (rev 35471)
+++ trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeTextViewer.java 2011-10-07 17:50:35 UTC (rev 35472)
@@ -176,7 +176,13 @@
outputListener = new ForgeHiddenOutputFilter(ansiCommandFilter) {
@Override
public void handleFilteredString(String str) {
- System.out.println("handleHiddenOutput : " + str);
+ if (str.startsWith("Intercepted Command: ")) {
+
+ } else if (str.startsWith("Executed Command: ")) {
+
+ } else {
+ System.out.println("unhandled hidden output: " + str);
+ }
}
};
runtime.addOutputListener(outputListener);
Modified: trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ForgeView.java
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ForgeView.java 2011-10-07 17:42:47 UTC (rev 35471)
+++ trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ForgeView.java 2011-10-07 17:50:35 UTC (rev 35472)
@@ -230,5 +230,5 @@
public ForgeRuntime getRuntime() {
return runtime;
}
-
+
}
13 years, 3 months