Coverage Report - org.apache.myfaces.application.DefaultResourceHandlerSupport
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultResourceHandlerSupport
0%
0/31
0%
0/22
4
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *   http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing,
 13  
  * software distributed under the License is distributed on an
 14  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15  
  * KIND, either express or implied.  See the License for the
 16  
  * specific language governing permissions and limitations
 17  
  * under the License.
 18  
  */
 19  
 package org.apache.myfaces.application;
 20  
 
 21  
 import javax.faces.application.ProjectStage;
 22  
 import javax.faces.application.ResourceHandler;
 23  
 import javax.faces.context.FacesContext;
 24  
 import org.apache.myfaces.resource.ClassLoaderContractResourceLoader;
 25  
 import org.apache.myfaces.resource.ExternalContextContractResourceLoader;
 26  
 import org.apache.myfaces.resource.FacesFlowClassLoaderResourceLoader;
 27  
 
 28  
 import org.apache.myfaces.resource.InternalClassLoaderResourceLoader;
 29  
 import org.apache.myfaces.resource.RootExternalContextResourceLoader;
 30  
 import org.apache.myfaces.resource.TempDirFileCacheContractResourceLoader;
 31  
 import org.apache.myfaces.resource.TempDirFileCacheResourceLoader;
 32  
 import org.apache.myfaces.shared.renderkit.html.util.ResourceUtils;
 33  
 import org.apache.myfaces.shared.resource.BaseResourceHandlerSupport;
 34  
 import org.apache.myfaces.shared.resource.ClassLoaderResourceLoader;
 35  
 import org.apache.myfaces.shared.resource.ContractResourceLoader;
 36  
 import org.apache.myfaces.shared.resource.ExternalContextResourceLoader;
 37  
 import org.apache.myfaces.shared.resource.ResourceLoader;
 38  
 import org.apache.myfaces.shared.util.WebConfigParamUtils;
 39  
 
 40  
 /**
 41  
  * A ResourceHandlerSupport implementation for use with standard Java Servlet engines,
 42  
  * ie an engine that supports javax.servlet, and uses a standard web.xml file.
 43  
  * 
 44  
  * @author Leonardo Uribe (latest modification by $Author$)
 45  
  * @version $Revision$ $Date$
 46  
  */
 47  
 public class DefaultResourceHandlerSupport extends BaseResourceHandlerSupport
 48  
 {
 49  
 
 50  
     private static final String META_INF_RESOURCES = "META-INF/resources";
 51  
     private static final String RESOURCES = "resources";
 52  
     private static final String META_INF_INTERNAL_RESOURCES = "META-INF/internal-resources";
 53  
     private static final String META_INF_CONTRACTS = "META-INF/contracts";
 54  
     private static final String CONTRACTS = "contracts";
 55  
 
 56  
     private ResourceLoader[] _resourceLoaders;
 57  
     
 58  
     private ContractResourceLoader[] _contractResourceLoaders;
 59  
     
 60  
     private ResourceLoader[] _viewResourceLoaders;
 61  
     
 62  
     public DefaultResourceHandlerSupport()
 63  
     {
 64  0
         super();
 65  0
     }
 66  
 
 67  
     public ResourceLoader[] getResourceLoaders()
 68  
     {
 69  0
         if (_resourceLoaders == null)
 70  
         {
 71  0
             FacesContext facesContext = FacesContext.getCurrentInstance(); 
 72  
             
 73  0
             String directory = WebConfigParamUtils.getStringInitParameter(facesContext.getExternalContext(), 
 74  
                 ResourceHandler.WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME, RESOURCES);
 75  
             
 76  0
             if (TempDirFileCacheResourceLoader.isValidCreateTemporalFiles(facesContext))
 77  
             {
 78  
                 //The ExternalContextResourceLoader has precedence over
 79  
                 //ClassLoaderResourceLoader, so it goes first.
 80  0
                 String renderedJSFJS = WebConfigParamUtils.getStringInitParameter(facesContext.getExternalContext(),
 81  
                         InternalClassLoaderResourceLoader.MYFACES_JSF_MODE,
 82  
                         ResourceUtils.JSF_MYFACES_JSFJS_NORMAL);
 83  
 
 84  0
                 if (facesContext.isProjectStage(ProjectStage.Development) ||
 85  
                      !renderedJSFJS.equals(ResourceUtils.JSF_MYFACES_JSFJS_NORMAL))
 86  
                 {
 87  0
                     _resourceLoaders = new ResourceLoader[] {
 88  
                             new TempDirFileCacheResourceLoader(new ExternalContextResourceLoader("/"+directory)),
 89  
                             new TempDirFileCacheResourceLoader(new FacesFlowClassLoaderResourceLoader()),
 90  
                             new TempDirFileCacheResourceLoader(
 91  
                                              new InternalClassLoaderResourceLoader(META_INF_INTERNAL_RESOURCES)),
 92  
                             new TempDirFileCacheResourceLoader(new ClassLoaderResourceLoader(META_INF_RESOURCES))
 93  
                     };
 94  
                 }
 95  
                 else
 96  
                 {
 97  0
                     _resourceLoaders = new ResourceLoader[] {
 98  
                             new TempDirFileCacheResourceLoader(new ExternalContextResourceLoader("/"+directory)),
 99  
                             new TempDirFileCacheResourceLoader(new FacesFlowClassLoaderResourceLoader()),
 100  
                             new TempDirFileCacheResourceLoader(new ClassLoaderResourceLoader(META_INF_RESOURCES))
 101  
                     };
 102  
                 }
 103  0
             }
 104  
             else
 105  
             {            
 106  
                 //The ExternalContextResourceLoader has precedence over
 107  
                 //ClassLoaderResourceLoader, so it goes first.
 108  0
                 String renderedJSFJS = WebConfigParamUtils.getStringInitParameter(facesContext.getExternalContext(),
 109  
                         InternalClassLoaderResourceLoader.MYFACES_JSF_MODE,
 110  
                         ResourceUtils.JSF_MYFACES_JSFJS_NORMAL);
 111  
 
 112  0
                 if (facesContext.isProjectStage(ProjectStage.Development) ||
 113  
                      !renderedJSFJS.equals(ResourceUtils.JSF_MYFACES_JSFJS_NORMAL))
 114  
                 {
 115  0
                     _resourceLoaders = new ResourceLoader[] {
 116  
                             new ExternalContextResourceLoader("/"+directory),
 117  
                             new FacesFlowClassLoaderResourceLoader(),
 118  
                             new InternalClassLoaderResourceLoader(META_INF_INTERNAL_RESOURCES),
 119  
                             new ClassLoaderResourceLoader(META_INF_RESOURCES)
 120  
                     };
 121  
                 }
 122  
                 else
 123  
                 {
 124  0
                     _resourceLoaders = new ResourceLoader[] {
 125  
                             new ExternalContextResourceLoader("/"+directory),
 126  
                             new FacesFlowClassLoaderResourceLoader(),
 127  
                             new ClassLoaderResourceLoader(META_INF_RESOURCES)
 128  
                     };
 129  
                 }
 130  
             }
 131  
         }
 132  0
         return _resourceLoaders;
 133  
     }
 134  
     
 135  
     @Override
 136  
     public ContractResourceLoader[] getContractResourceLoaders()
 137  
     {
 138  0
         if (_contractResourceLoaders == null)
 139  
         {
 140  0
             FacesContext facesContext = FacesContext.getCurrentInstance(); 
 141  
             
 142  0
             String directory = WebConfigParamUtils.getStringInitParameter(facesContext.getExternalContext(), 
 143  
                 ResourceHandler.WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME, CONTRACTS);
 144  
 
 145  0
             if (directory.startsWith("/"))
 146  
             {
 147  0
                 throw new IllegalStateException("javax.faces.WEBAPP_CONTRACTS_DIRECTORY cannot start with '/");
 148  
             }
 149  
             
 150  0
             if (TempDirFileCacheResourceLoader.isValidCreateTemporalFiles(facesContext))
 151  
             {
 152  0
                 _contractResourceLoaders= new ContractResourceLoader[] { 
 153  
                     new TempDirFileCacheContractResourceLoader(
 154  
                         new ExternalContextContractResourceLoader("/"+directory)),
 155  
                     new TempDirFileCacheContractResourceLoader(
 156  
                         new ClassLoaderContractResourceLoader(META_INF_CONTRACTS))
 157  
                 };
 158  
             }
 159  
             else
 160  
             {
 161  
             
 162  0
                 _contractResourceLoaders= new ContractResourceLoader[] { 
 163  
                     new ExternalContextContractResourceLoader("/"+directory),
 164  
                     new ClassLoaderContractResourceLoader(META_INF_CONTRACTS)
 165  
                 };
 166  
             }
 167  
         }
 168  0
         return _contractResourceLoaders;
 169  
     }
 170  
     
 171  
     @Override
 172  
     public ResourceLoader[] getViewResourceLoaders()
 173  
     {
 174  0
         if (_viewResourceLoaders == null)
 175  
         {
 176  0
             FacesContext facesContext = FacesContext.getCurrentInstance(); 
 177  0
             if (TempDirFileCacheResourceLoader.isValidCreateTemporalFiles(facesContext))
 178  
             {
 179  0
                 _viewResourceLoaders = new ResourceLoader[] {
 180  
                         new RootExternalContextResourceLoader(),
 181  
                         new TempDirFileCacheResourceLoader(new FacesFlowClassLoaderResourceLoader())
 182  
                 };
 183  
             }
 184  
             else
 185  
             {
 186  0
                 _viewResourceLoaders = new ResourceLoader[] {
 187  
                         new RootExternalContextResourceLoader(),
 188  
                         new FacesFlowClassLoaderResourceLoader()
 189  
                 };
 190  
             }
 191  
         }
 192  0
         return _viewResourceLoaders;
 193  
     }
 194  
 
 195  
 }