You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by aw...@apache.org on 2007/07/24 23:09:13 UTC
svn commit: r559211 - in
/myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main:
java/org/apache/myfaces/trinidadbuild/plugin/faces/
resources/org/apache/myfaces/trinidadbuild/plugin/faces/resources/
Author: awiner
Date: Tue Jul 24 14:09:12 2007
New Revision: 559211
URL: http://svn.apache.org/viewvc?view=rev&rev=559211
Log:
TRINIDAD-122: Improve startup performance by loading renderers lazily
- Support new generate-renderer-map goal on faces plugin
- Support new removeRenderers configuration option for faces-config.xml generation
Added:
myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateRendererMapMojo.java
Modified:
myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateFacesConfigMojo.java
myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/resources/org/apache/myfaces/trinidadbuild/plugin/faces/resources/transform.xsl
Modified: myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateFacesConfigMojo.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateFacesConfigMojo.java?view=diff&rev=559211&r1=559210&r2=559211
==============================================================================
--- myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateFacesConfigMojo.java (original)
+++ myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateFacesConfigMojo.java Tue Jul 24 14:09:12 2007
@@ -168,6 +168,8 @@
Transformer transformer = transFactory.newTransformer(xslSource);
transformer.setParameter("packageContains", packageContains);
transformer.setParameter("typePrefix", typePrefix);
+ transformer.setParameter("removeRenderers",
+ removeRenderers ? "true" : "false");
transformer.transform(mergedSource, mergedResult);
resultStream.close();
@@ -271,4 +273,9 @@
* @parameter
*/
private String transformStylesheet;
+
+ /**
+ * @parameter
+ */
+ private boolean removeRenderers;
}
Added: myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateRendererMapMojo.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateRendererMapMojo.java?view=auto&rev=559211
==============================================================================
--- myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateRendererMapMojo.java (added)
+++ myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateRendererMapMojo.java Tue Jul 24 14:09:12 2007
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.trinidadbuild.plugin.faces;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Iterator;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.FacesConfigBean;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.RenderKitBean;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.RendererBean;
+import org.apache.myfaces.trinidadbuild.plugin.faces.util.Util;
+
+/**
+ * @version $Id$
+ * @requiresDependencyResolution compile
+ * @goal generate-renderer-map
+ * @phase generate-sources
+ */
+public class GenerateRendererMapMojo extends AbstractFacesMojo
+{
+ /**
+ * Execute the Mojo.
+ */
+ public void execute() throws MojoExecutionException
+ {
+ try
+ {
+ processIndex(project, resourcePath);
+ _generateRendererMap();
+ }
+ catch (IOException e)
+ {
+ throw new MojoExecutionException("Error generating components", e);
+ }
+ }
+
+ /**
+ * Generates parsed components.
+ */
+ private void _generateRendererMap() throws IOException
+ {
+ // Make sure generated source directory
+ // is added to compilation source path
+ project.addCompileSourceRoot(generatedSourceDirectory.getCanonicalPath());
+
+ FacesConfigBean facesConfig = getFacesConfig();
+ if (!facesConfig.hasRenderKits())
+ {
+ getLog().info("Nothing to generate - no renderkits found");
+ }
+ else
+ {
+ Iterator renderkits = facesConfig.renderKits();
+ while (renderkits.hasNext())
+ {
+ RenderKitBean renderkit = (RenderKitBean) renderkits.next();
+ String id = renderkit.getRenderKitId();
+ if (!id.startsWith(renderKitPrefix))
+ continue;
+
+ _writeRenderKitMap(renderkit);
+ }
+ }
+ }
+
+ private void _writeRenderKitMap(RenderKitBean rk) throws IOException
+ {
+ File outFile = new File(generatedSourceDirectory,
+ "/META-INF/" + rk.getRenderKitId() + ".renderkit");
+ FileWriter fw = new FileWriter(outFile);
+ PrintWriter pw = new PrintWriter(fw);
+ try
+ {
+ Iterator renderers = rk.renderers();
+ while (renderers.hasNext())
+ {
+ RendererBean r = (RendererBean) renderers.next();
+ pw.print(r.getComponentFamily());
+ pw.print('|');
+ pw.print(r.getRendererType());
+ pw.print('=');
+ pw.println(r.getRendererClass());
+ }
+ }
+ finally
+ {
+ pw.close();
+ }
+ }
+
+ /**
+ * @parameter expression="${project}"
+ * @readonly
+ */
+ private MavenProject project;
+
+ /**
+ * @parameter
+ * @readonly
+ */
+ private String resourcePath = "META-INF/maven-faces-plugin/index.lst";
+
+ /**
+ * @parameter expression="${project.build.directory}/maven-faces-plugin/main/resources"
+ * @required
+ */
+ private File generatedSourceDirectory;
+
+ /**
+ * @parameter
+ * @required
+ */
+ private String renderKitPrefix;
+}
Modified: myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/resources/org/apache/myfaces/trinidadbuild/plugin/faces/resources/transform.xsl
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/resources/org/apache/myfaces/trinidadbuild/plugin/faces/resources/transform.xsl?view=diff&rev=559211&r1=559210&r2=559211
==============================================================================
--- myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/resources/org/apache/myfaces/trinidadbuild/plugin/faces/resources/transform.xsl (original)
+++ myfaces/trinidad/trunk/plugins/maven-faces-plugin/src/main/resources/org/apache/myfaces/trinidadbuild/plugin/faces/resources/transform.xsl Tue Jul 24 14:09:12 2007
@@ -29,6 +29,7 @@
<xsl:output method="xml" indent="yes"/>
<xsl:param name="packageContains" />
<xsl:param name="typePrefix" />
+ <xsl:param name="removeRenderers" />
<xsl:variable name="doctype" ><![CDATA[
<!DOCTYPE faces-config PUBLIC
@@ -91,9 +92,12 @@
<xsl:apply-templates select="javaee:icon" />
<xsl:apply-templates select="javaee:render-kit-id" />
<xsl:apply-templates select="javaee:render-kit-class" />
- <xsl:for-each select="key('render-kit-id', javaee:render-kit-id/text())" >
- <xsl:apply-templates select="javaee:renderer[contains(javaee:renderer-class, $packageContains)]" />
- </xsl:for-each>
+ <!-- Drop renderers if desired -->
+ <xsl:if test="$removeRenderers != 'true'">
+ <xsl:for-each select="key('render-kit-id', javaee:render-kit-id/text())" >
+ <xsl:apply-templates select="javaee:renderer[contains(javaee:renderer-class, $packageContains)]" />
+ </xsl:for-each>
+ </xsl:if>
</xsl:element>
</xsl:for-each>
<xsl:apply-templates select="javaee:lifecycle[contains(javaee:phase-listener, $packageContains)]" />