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)]" />