You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/10/20 23:45:24 UTC

svn commit: r1187069 - in /myfaces/core/trunk: impl/src/main/java/org/apache/myfaces/application/ impl/src/main/java/org/apache/myfaces/resource/ shared/src/main/java/org/apache/myfaces/shared/renderkit/html/util/ shared/src/main/java/org/apache/myface...

Author: lu4242
Date: Thu Oct 20 21:45:23 2011
New Revision: 1187069

URL: http://svn.apache.org/viewvc?rev=1187069&view=rev
Log:
MYFACES-3361 jsf.js: code restructuration for size and speed improvlements

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/DefaultResourceHandlerSupport.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/resource/InternalClassLoaderResourceLoader.java
    myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/util/ResourceUtils.java
    myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/resource/ClassLoaderResourceLoader.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/DefaultResourceHandlerSupport.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/DefaultResourceHandlerSupport.java?rev=1187069&r1=1187068&r2=1187069&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/DefaultResourceHandlerSupport.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/DefaultResourceHandlerSupport.java Thu Oct 20 21:45:23 2011
@@ -22,10 +22,12 @@ import javax.faces.application.ProjectSt
 import javax.faces.context.FacesContext;
 
 import org.apache.myfaces.resource.InternalClassLoaderResourceLoader;
+import org.apache.myfaces.shared.renderkit.html.util.ResourceUtils;
 import org.apache.myfaces.shared.resource.BaseResourceHandlerSupport;
 import org.apache.myfaces.shared.resource.ClassLoaderResourceLoader;
 import org.apache.myfaces.shared.resource.ExternalContextResourceLoader;
 import org.apache.myfaces.shared.resource.ResourceLoader;
+import org.apache.myfaces.shared.util.WebConfigParamUtils;
 
 /**
  * A ResourceHandlerSupport implementation for use with standard Java Servlet engines,
@@ -37,6 +39,10 @@ import org.apache.myfaces.shared.resourc
 public class DefaultResourceHandlerSupport extends BaseResourceHandlerSupport
 {
 
+    private static final String META_INF_RESOURCES = "META-INF/resources";
+    private static final String RESOURCES = "/resources";
+    private static final String META_INF_INTERNAL_RESOURCES = "META-INF/internal-resources";
+
     private ResourceLoader[] _resourceLoaders;
     
     public DefaultResourceHandlerSupport()
@@ -48,21 +54,27 @@ public class DefaultResourceHandlerSuppo
     {
         if (_resourceLoaders == null)
         {
+            FacesContext facesContext = FacesContext.getCurrentInstance(); 
             //The ExternalContextResourceLoader has precedence over
             //ClassLoaderResourceLoader, so it goes first.
-            if (FacesContext.getCurrentInstance().isProjectStage(ProjectStage.Development))
+            String renderedJSFJS = WebConfigParamUtils.getStringInitParameter(facesContext.getExternalContext(),
+                    InternalClassLoaderResourceLoader.MYFACES_JSF_MODE,
+                    ResourceUtils.JSF_MYFACES_JSFJS_NORMAL);
+
+            if (facesContext.isProjectStage(ProjectStage.Development) ||
+                 !renderedJSFJS.equals(ResourceUtils.JSF_MYFACES_JSFJS_NORMAL))
             {
                 _resourceLoaders = new ResourceLoader[] {
-                        new ExternalContextResourceLoader("/resources"),
-                        new ClassLoaderResourceLoader("META-INF/resources"),
-                        new InternalClassLoaderResourceLoader("META-INF/internal-resources")
+                        new ExternalContextResourceLoader(RESOURCES),
+                        new InternalClassLoaderResourceLoader(META_INF_INTERNAL_RESOURCES),
+                        new ClassLoaderResourceLoader(META_INF_RESOURCES)
                 };
             }
             else
             {
                 _resourceLoaders = new ResourceLoader[] {
-                        new ExternalContextResourceLoader("/resources"),
-                        new ClassLoaderResourceLoader("META-INF/resources")
+                        new ExternalContextResourceLoader(RESOURCES),
+                        new ClassLoaderResourceLoader(META_INF_RESOURCES)
                 };
             }
         }

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/resource/InternalClassLoaderResourceLoader.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/resource/InternalClassLoaderResourceLoader.java?rev=1187069&r1=1187068&r2=1187069&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/resource/InternalClassLoaderResourceLoader.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/resource/InternalClassLoaderResourceLoader.java Thu Oct 20 21:45:23 2011
@@ -21,6 +21,7 @@ package org.apache.myfaces.resource;
 import java.io.InputStream;
 import java.net.URL;
 
+import javax.faces.application.ProjectStage;
 import javax.faces.context.FacesContext;
 
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
@@ -30,10 +31,10 @@ import org.apache.myfaces.shared.resourc
 import org.apache.myfaces.shared.resource.ResourceMetaImpl;
 import org.apache.myfaces.shared.util.ClassUtils;
 import org.apache.myfaces.shared.util.WebConfigParamUtils;
+import org.apache.myfaces.shared.renderkit.html.util.ResourceUtils;
 
 /**
  * A resource loader implementation which loads resources from the thread ClassLoader.
- * 
  */
 public class InternalClassLoaderResourceLoader extends ResourceLoader
 {
@@ -44,16 +45,36 @@ public class InternalClassLoaderResource
      * all in just one file, to preserve line numbers and make javascript
      * debugging of the default jsf javascript file more simple.
      */
-    @JSFWebConfigParam(since="2.0.1",defaultValue="false",expectedValues="true,false", group="render")
+    @JSFWebConfigParam(since = "2.0.1", defaultValue = "false", expectedValues = "true,false", group = "render")
     public static final String USE_MULTIPLE_JS_FILES_FOR_JSF_UNCOMPRESSED_JS = "org.apache.myfaces.USE_MULTIPLE_JS_FILES_FOR_JSF_UNCOMPRESSED_JS";
+
+    /**
+     * Define the mode used for jsf.js file:
+     * <ul>
+     * <li>normal : contains everything, including jsf-i18n.js, jsf-experimental.js and jsf-legacy.js</li>
+     * <li>minimal-modern : is the core jsf with a baseline of ie9+, without jsf-i18n.js, jsf-experimental.js and jsf-legacy.js</li>
+     * <li>minimal: which is the same with a baseline of ie6, without jsf-i18n.js, jsf-experimental.js</li>
+     * </ul>
+     * <p>If org.apache.myfaces.USE_MULTIPLE_JS_FILES_FOR_JSF_UNCOMPRESSED_JS param is set to true and project stage
+     * is Development, this param is ignored.</p>
+     */
+    @JSFWebConfigParam(since = "2.0.10,2.1.4", defaultValue = "normal", expectedValues = "normal, minimal-modern, minimal",
+            group = "render")
+    public static final String MYFACES_JSF_MODE = "org.apache.myfaces.JSF_JS_MODE";
     
     private final boolean _useMultipleJsFilesForJsfUncompressedJs;
+    private final String _jsfMode;
+    private final boolean _developmentStage;
 
     public InternalClassLoaderResourceLoader(String prefix)
     {
         super(prefix);
         _useMultipleJsFilesForJsfUncompressedJs = WebConfigParamUtils.getBooleanInitParameter(FacesContext.getCurrentInstance().getExternalContext(),
                 USE_MULTIPLE_JS_FILES_FOR_JSF_UNCOMPRESSED_JS, false);
+
+        _jsfMode = WebConfigParamUtils.getStringInitParameter(FacesContext.getCurrentInstance().getExternalContext(), MYFACES_JSF_MODE, 
+                ResourceUtils.JSF_MYFACES_JSFJS_NORMAL);
+        _developmentStage = FacesContext.getCurrentInstance().isProjectStage(ProjectStage.Development);
     }
 
     @Override
@@ -65,7 +86,7 @@ public class InternalClassLoaderResource
     @Override
     public InputStream getResourceInputStream(ResourceMeta resourceMeta)
     {
-        InputStream is = null;
+        InputStream is;
         if (getPrefix() != null && !"".equals(getPrefix()))
         {
             String name = getPrefix() + '/' + resourceMeta.getResourceIdentifier();
@@ -90,7 +111,7 @@ public class InternalClassLoaderResource
     @Override
     public URL getResourceURL(ResourceMeta resourceMeta)
     {
-        URL url = null;
+        URL url;
         if (getPrefix() != null && !"".equals(getPrefix()))
         {
             String name = getPrefix() + '/' + resourceMeta.getResourceIdentifier();
@@ -108,7 +129,7 @@ public class InternalClassLoaderResource
             {
                 url = this.getClass().getClassLoader().getResource(resourceMeta.getResourceIdentifier());
             }
-            return url; 
+            return url;
         }
     }
 
@@ -123,28 +144,59 @@ public class InternalClassLoaderResource
                                            String resourceName, String resourceVersion)
     {
         //handle jsf.js
-        if (libraryName != null && 
-                org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.JAVAX_FACES_LIBRARY_NAME.equals(libraryName) &&
-                org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.JSF_JS_RESOURCE_NAME.equals(resourceName))
-        {
-            if (_useMultipleJsFilesForJsfUncompressedJs)
+        final boolean javaxFacesLib = libraryName != null &&
+        ResourceUtils.JAVAX_FACES_LIBRARY_NAME.equals(libraryName);
+        final boolean javaxFaces = javaxFacesLib &&
+                ResourceUtils.JSF_JS_RESOURCE_NAME.equals(resourceName);
+
+        if (javaxFaces)
+        {
+            if (_developmentStage)
+            {
+                if (_useMultipleJsFilesForJsfUncompressedJs)
+                {
+                    return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion,
+                            resourceName, resourceVersion, ResourceUtils.JSF_UNCOMPRESSED_JS_RESOURCE_NAME, true);
+                }
+                else
+                {
+                    //normall we would have to take care about the standard jsf.js case also
+                    //but our standard resource loader takes care of it, because this part is only called in debugging mode
+                    //in production only in debugging
+                    return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion, "jsf-uncompressed-full.js", false);
+                }
+            }
+            else if (_jsfMode.equals(ResourceUtils.JSF_MYFACES_JSFJS_MINIMAL) )
             {
-                return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion,
-                    resourceName, resourceVersion, org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.JSF_UNCOMPRESSED_JS_RESOURCE_NAME, true);
+                return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion,
+                        ResourceUtils.JSF_MINIMAL_JS_RESOURCE_NAME, false);
+            }
+            else if (_jsfMode.equals(ResourceUtils.JSF_MYFACES_JSFJS_MINIMAL_MODERN) )
+            {
+                return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion,
+                        ResourceUtils.JSF_MINIMAL_MODERN_JS_RESOURCE_NAME, false);
             }
             else
             {
-                return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion, "jsf-uncompressed-full.js", false);
+                return null;
             }
         }
-        //handle the oamSubmit.js
-        else if (libraryName != null &&
-                org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.MYFACES_LIBRARY_NAME.equals(libraryName) &&
-                org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.MYFACES_JS_RESOURCE_NAME.equals(resourceName))
+        else if (javaxFacesLib && !_jsfMode.equals(ResourceUtils.JSF_MYFACES_JSFJS_NORMAL) &&
+                                   (ResourceUtils.JSF_MYFACES_JSFJS_I18N.equals(resourceName) ||
+                                   ResourceUtils.JSF_MYFACES_JSFJS_EXPERIMENTAL.equals(resourceName) ||
+                                   ResourceUtils.JSF_MYFACES_JSFJS_LEGACY.equals(resourceName)) )
         {
-                return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion,
-                    resourceName, resourceVersion, org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.MYFACES_JS_RESOURCE_NAME_UNCOMPRESSED, true);
-        } else if (libraryName != null && libraryName.startsWith("org.apache.myfaces.core"))
+            return new ResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion);
+        }
+        else if (_developmentStage && libraryName != null &&
+                ResourceUtils.MYFACES_LIBRARY_NAME.equals(libraryName) &&
+                ResourceUtils.MYFACES_JS_RESOURCE_NAME.equals(resourceName))
+        {
+            //handle the oamSubmit.js
+            return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion,
+                    resourceName, resourceVersion, ResourceUtils.MYFACES_JS_RESOURCE_NAME_UNCOMPRESSED, true);
+        }
+        else if (_developmentStage && libraryName != null && libraryName.startsWith("org.apache.myfaces.core"))
         {
             return new ResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion);
         }
@@ -157,7 +209,7 @@ public class InternalClassLoaderResource
     /**
      * Returns the ClassLoader to use when looking up resources under the top level package. By default, this is the
      * context class loader.
-     * 
+     *
      * @return the ClassLoader used to lookup resources
      */
     protected ClassLoader getClassLoader()

Modified: myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/util/ResourceUtils.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/util/ResourceUtils.java?rev=1187069&r1=1187068&r2=1187069&view=diff
==============================================================================
--- myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/util/ResourceUtils.java (original)
+++ myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/util/ResourceUtils.java Thu Oct 20 21:45:23 2011
@@ -19,6 +19,7 @@
 package org.apache.myfaces.shared.renderkit.html.util;
 
 import java.io.IOException;
+import java.lang.String;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -27,6 +28,7 @@ import javax.faces.component.UIComponent
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
 
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
 import org.apache.myfaces.shared.config.MyfacesConfig;
 import org.apache.myfaces.shared.renderkit.JSFAttr;
 import org.apache.myfaces.shared.renderkit.html.HTML;
@@ -45,10 +47,21 @@ public class ResourceUtils {
     public final static String MYFACES_LIBRARY_NAME = "org.apache.myfaces";
     private final static String RENDERED_MYFACES_JS = "org.apache.myfaces.RENDERED_MYFACES_JS";
 
+    public final static String JSF_MYFACES_JSFJS_MINIMAL = "minimal";
+    public final static String JSF_MYFACES_JSFJS_MINIMAL_MODERN = "minimal-modern";
+    public final static String JSF_MYFACES_JSFJS_NORMAL = "normal";
+    
     public final static String JSF_UNCOMPRESSED_JS_RESOURCE_NAME = "jsf-uncompressed.js";
+    public final static String JSF_MINIMAL_JS_RESOURCE_NAME = "jsf-minimal.js";
+    public final static String JSF_MINIMAL_MODERN_JS_RESOURCE_NAME = "jsf-minimal-modern.js";
+    
+    public final static String JSF_MYFACES_JSFJS_I18N = "jsf-i18n.js";
+    public final static String JSF_MYFACES_JSFJS_EXPERIMENTAL = "jsf-experimental.js";
+    public final static String JSF_MYFACES_JSFJS_LEGACY = "jsf-legacy.js";
+
     private final static String RENDERED_STYLESHEET_RESOURCES_SET = "org.apache.myfaces.RENDERED_STYLESHEET_RESOURCES_SET";
     private final static String RENDERED_SCRIPT_RESOURCES_SET = "org.apache.myfaces.RENDERED_SCRIPT_RESOURCES_SET";
-    private final static String RENDERED_JSF_JS = "org.apache.myfaces.RENDERED_JSF_JS";
+    public final static String RENDERED_JSF_JS = "org.apache.myfaces.RENDERED_JSF_JS";
     public final static String HEAD_TARGET = "head";
     public final static String BODY_TARGET = "body";
     public final static String FORM_TARGET = "form";

Modified: myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/resource/ClassLoaderResourceLoader.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/resource/ClassLoaderResourceLoader.java?rev=1187069&r1=1187068&r2=1187069&view=diff
==============================================================================
--- myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/resource/ClassLoaderResourceLoader.java (original)
+++ myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/resource/ClassLoaderResourceLoader.java Thu Oct 20 21:45:23 2011
@@ -73,12 +73,9 @@ public class ClassLoaderResourceLoader e
         }
     };*/
     
-    private final boolean _developmentStage;
-
     public ClassLoaderResourceLoader(String prefix)
     {
         super(prefix);
-        _developmentStage = FacesContext.getCurrentInstance().isProjectStage(ProjectStage.Development);
     }
 
     @Override
@@ -434,21 +431,21 @@ public class ClassLoaderResourceLoader e
     public ResourceMeta createResourceMeta(String prefix, String libraryName, String libraryVersion,
                                            String resourceName, String resourceVersion)
     {
-        if (_developmentStage && libraryName != null && 
-                ResourceUtils.JAVAX_FACES_LIBRARY_NAME.equals(libraryName) &&
-                ResourceUtils.JSF_JS_RESOURCE_NAME.equals(resourceName))
-        {
+        //if (_developmentStage && libraryName != null && 
+        //        ResourceUtils.JAVAX_FACES_LIBRARY_NAME.equals(libraryName) &&
+        //        ResourceUtils.JSF_JS_RESOURCE_NAME.equals(resourceName))
+        //{
             // InternalClassLoaderResourceLoader will serve it, so return null in this case.
-            return null;
-        } else if (_developmentStage && libraryName != null &&
-                ResourceUtils.MYFACES_LIBRARY_NAME.equals(libraryName) &&
-                ResourceUtils.MYFACES_JS_RESOURCE_NAME.equals(resourceName)) {
+        //    return null;
+        //} else if (_developmentStage && libraryName != null &&
+        //        ResourceUtils.MYFACES_LIBRARY_NAME.equals(libraryName) &&
+        //        ResourceUtils.MYFACES_JS_RESOURCE_NAME.equals(resourceName)) {
             // InternalClassLoaderResourceLoader will serve it, so return null in this case.
-             return null;
-        } else
-        {
+        //     return null;
+        //} else
+        //{
             return new ResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion);
-        }
+        //}
     }
 
     /**