You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2011/10/22 19:59:37 UTC

svn commit: r1187741 [4/11] - in /myfaces/shared/trunk: ./ core/src/main/java/org/apache/myfaces/shared/ core/src/main/java/org/apache/myfaces/shared/application/ core/src/main/java/org/apache/myfaces/shared/component/ core/src/main/java/org/apache/myf...

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerCache.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerCache.java?rev=1187741&r1=1187740&r2=1187741&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerCache.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerCache.java Sat Oct 22 17:59:32 2011
@@ -1,239 +1,239 @@
-/*
- * 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.shared.resource;
-
-import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
-import org.apache.myfaces.shared.util.WebConfigParamUtils;
-
-import javax.faces.application.ProjectStage;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-public class ResourceHandlerCache
-{
-    private static final Logger log = Logger
-            .getLogger(ResourceHandlerCache.class.getName());
-
-    private Boolean _resourceCacheEnabled = null;
-    private Map<ResourceKey, ResourceValue> _resourceCacheMap = null;
-
-    @JSFWebConfigParam(defaultValue = "500", since = "2.0.2")
-    private static final String RESOURCE_HANDLER_CACHE_SIZE_ATTRIBUTE = "org.apache.myfaces.RESOURCE_HANDLER_CACHE_SIZE";
-    private static final int RESOURCE_HANDLER_CACHE_DEFAULT_SIZE = 500;
-
-    @JSFWebConfigParam(defaultValue = "true", since = "2.0.2")
-    private static final String RESOURCE_HANDLER_CACHE_ENABLED_ATTRIBUTE = "org.apache.myfaces.RESOURCE_HANDLER_CACHE_ENABLED";
-    private static final boolean RESOURCE_HANDLER_CACHE_ENABLED_DEFAULT = true;
-
-    public ResourceValue getResource(String resourceName, String libraryName,
-            String contentType, String localePrefix)
-    {
-        if (!isResourceCachingEnabled() || _resourceCacheMap == null)
-            return null;
-
-        if (log.isLoggable(Level.FINE))
-            log.log(Level.FINE, "Attemping to get resource from cache for "
-                    + resourceName);
-
-        ResourceKey key = new ResourceKey(resourceName, libraryName, contentType, localePrefix);
-
-        return _resourceCacheMap.get(key);
-    }
-    
-    public boolean containsResource(String resourceName, String libraryName, String contentType, String localePrefix)
-    {
-        if (!isResourceCachingEnabled() || _resourceCacheMap == null)
-            return false;
-
-        ResourceKey key = new ResourceKey(resourceName, libraryName, contentType, localePrefix);
-        return _resourceCacheMap.containsKey(key);
-    }
-
-    public void putResource(String resourceName, String libraryName,
-            String contentType, String localePrefix, ResourceMeta resource, ResourceLoader loader)
-    {
-        if (!isResourceCachingEnabled())
-            return;
-
-        if (log.isLoggable(Level.FINE))
-            log.log(Level.FINE, "Attemping to put resource to cache for "
-                    + resourceName);
-
-        if (_resourceCacheMap == null)
-        {
-            if (log.isLoggable(Level.FINE))
-                log.log(Level.FINE, "Initializing resource cache map");
-            _resourceCacheMap = Collections
-                    .synchronizedMap(new _ResourceMap<ResourceKey, ResourceValue>(
-                            getMaxSize()));
-        }
-
-        _resourceCacheMap.put(new ResourceKey(resourceName, libraryName,
-                contentType, localePrefix), new ResourceValue(resource, loader));
-    }
-
-    private boolean isResourceCachingEnabled()
-    {
-        if (_resourceCacheEnabled == null)
-        {
-            FacesContext facesContext = FacesContext.getCurrentInstance();
-
-            //first, check to make sure that ProjectStage is production, if not, skip caching
-            if (!facesContext.isProjectStage(ProjectStage.Production))
-            {
-                return _resourceCacheEnabled = Boolean.FALSE;
-            }
-
-            ExternalContext externalContext = facesContext.getExternalContext();
-            if (externalContext == null)
-                return false; //don't cache right now, but don't disable it yet either
-
-            //if in production, make sure that the cache is not explicitly disabled via context param
-            _resourceCacheEnabled = WebConfigParamUtils.getBooleanInitParameter(externalContext, 
-                    ResourceHandlerCache.RESOURCE_HANDLER_CACHE_ENABLED_ATTRIBUTE,
-                    ResourceHandlerCache.RESOURCE_HANDLER_CACHE_ENABLED_DEFAULT);
-
-            if (log.isLoggable(Level.FINE))
-            {
-                log.log(Level.FINE, "MyFaces Resource Caching Enabled="
-                        + _resourceCacheEnabled);
-            }
-        }
-        return _resourceCacheEnabled;
-    }
-
-    private int getMaxSize()
-    {
-        
-        ExternalContext externalContext = FacesContext.getCurrentInstance()
-                .getExternalContext();
-        return WebConfigParamUtils.getIntegerInitParameter(externalContext, 
-                RESOURCE_HANDLER_CACHE_SIZE_ATTRIBUTE, RESOURCE_HANDLER_CACHE_DEFAULT_SIZE);
-    }
-
-    public static class ResourceKey
-    {
-        private String resourceName;
-        private String libraryName;
-        private String contentType;
-        private String localePrefix;
-
-        public ResourceKey(String resourceName, String libraryName,
-                String contentType, String localePrefix)
-        {
-            this.resourceName = resourceName;
-            this.libraryName = libraryName;
-            this.contentType = contentType;
-            this.localePrefix = localePrefix;
-        }
-
-        @Override
-        public boolean equals(Object o)
-        {
-            if (this == o)
-            {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass())
-            {
-                return false;
-            }
-
-            ResourceKey that = (ResourceKey) o;
-
-            if (contentType != null ? !contentType.equals(that.contentType) : that.contentType != null)
-            {
-                return false;
-            }
-            if (libraryName != null ? !libraryName.equals(that.libraryName) : that.libraryName != null)
-            {
-                return false;
-            }
-            if (localePrefix != null ? !localePrefix.equals(that.localePrefix) : that.localePrefix != null)
-            {
-                return false;
-            }
-            if (resourceName != null ? !resourceName.equals(that.resourceName) : that.resourceName != null)
-            {
-                return false;
-            }
-
-            return true;
-        }
-
-        @Override
-        public int hashCode()
-        {
-            int result = resourceName != null ? resourceName.hashCode() : 0;
-            result = 31 * result + (libraryName != null ? libraryName.hashCode() : 0);
-            result = 31 * result + (contentType != null ? contentType.hashCode() : 0);
-            result = 31 * result + (localePrefix != null ? localePrefix.hashCode() : 0);
-            return result;
-        }
-    }
-
-    public static class ResourceValue
-    {
-        private ResourceMeta resourceMeta;
-        
-        private ResourceLoader resourceLoader;
-
-        public ResourceValue(ResourceMeta resourceMeta,
-                ResourceLoader resourceLoader)
-        {
-            super();
-            this.resourceMeta = resourceMeta;
-            this.resourceLoader = resourceLoader;
-        }
-
-        public ResourceMeta getResourceMeta()
-        {
-            return resourceMeta;
-        }
-
-        public ResourceLoader getResourceLoader()
-        {
-            return resourceLoader;
-        }
-    }
-
-    private static class _ResourceMap<K, V> extends LinkedHashMap<K, V>
-    {
-        private static final long serialVersionUID = 1L;
-        private int maxCapacity;
-
-        public _ResourceMap(int cacheSize)
-        {
-            // create map at max capacity and 1.1 load factor to avoid rehashing
-            super(cacheSize + 1, 1.1f, true);
-            maxCapacity = cacheSize;
-        }
-
-        @Override
-        protected boolean removeEldestEntry(Map.Entry<K, V> eldest)
-        {
-            return size() > maxCapacity;
-        }
-    }
+/*
+ * 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.shared.resource;
+
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
+import org.apache.myfaces.shared.util.WebConfigParamUtils;
+
+import javax.faces.application.ProjectStage;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class ResourceHandlerCache
+{
+    private static final Logger log = Logger
+            .getLogger(ResourceHandlerCache.class.getName());
+
+    private Boolean _resourceCacheEnabled = null;
+    private Map<ResourceKey, ResourceValue> _resourceCacheMap = null;
+
+    @JSFWebConfigParam(defaultValue = "500", since = "2.0.2")
+    private static final String RESOURCE_HANDLER_CACHE_SIZE_ATTRIBUTE = "org.apache.myfaces.RESOURCE_HANDLER_CACHE_SIZE";
+    private static final int RESOURCE_HANDLER_CACHE_DEFAULT_SIZE = 500;
+
+    @JSFWebConfigParam(defaultValue = "true", since = "2.0.2")
+    private static final String RESOURCE_HANDLER_CACHE_ENABLED_ATTRIBUTE = "org.apache.myfaces.RESOURCE_HANDLER_CACHE_ENABLED";
+    private static final boolean RESOURCE_HANDLER_CACHE_ENABLED_DEFAULT = true;
+
+    public ResourceValue getResource(String resourceName, String libraryName,
+            String contentType, String localePrefix)
+    {
+        if (!isResourceCachingEnabled() || _resourceCacheMap == null)
+            return null;
+
+        if (log.isLoggable(Level.FINE))
+            log.log(Level.FINE, "Attemping to get resource from cache for "
+                    + resourceName);
+
+        ResourceKey key = new ResourceKey(resourceName, libraryName, contentType, localePrefix);
+
+        return _resourceCacheMap.get(key);
+    }
+    
+    public boolean containsResource(String resourceName, String libraryName, String contentType, String localePrefix)
+    {
+        if (!isResourceCachingEnabled() || _resourceCacheMap == null)
+            return false;
+
+        ResourceKey key = new ResourceKey(resourceName, libraryName, contentType, localePrefix);
+        return _resourceCacheMap.containsKey(key);
+    }
+
+    public void putResource(String resourceName, String libraryName,
+            String contentType, String localePrefix, ResourceMeta resource, ResourceLoader loader)
+    {
+        if (!isResourceCachingEnabled())
+            return;
+
+        if (log.isLoggable(Level.FINE))
+            log.log(Level.FINE, "Attemping to put resource to cache for "
+                    + resourceName);
+
+        if (_resourceCacheMap == null)
+        {
+            if (log.isLoggable(Level.FINE))
+                log.log(Level.FINE, "Initializing resource cache map");
+            _resourceCacheMap = Collections
+                    .synchronizedMap(new _ResourceMap<ResourceKey, ResourceValue>(
+                            getMaxSize()));
+        }
+
+        _resourceCacheMap.put(new ResourceKey(resourceName, libraryName,
+                contentType, localePrefix), new ResourceValue(resource, loader));
+    }
+
+    private boolean isResourceCachingEnabled()
+    {
+        if (_resourceCacheEnabled == null)
+        {
+            FacesContext facesContext = FacesContext.getCurrentInstance();
+
+            //first, check to make sure that ProjectStage is production, if not, skip caching
+            if (!facesContext.isProjectStage(ProjectStage.Production))
+            {
+                return _resourceCacheEnabled = Boolean.FALSE;
+            }
+
+            ExternalContext externalContext = facesContext.getExternalContext();
+            if (externalContext == null)
+                return false; //don't cache right now, but don't disable it yet either
+
+            //if in production, make sure that the cache is not explicitly disabled via context param
+            _resourceCacheEnabled = WebConfigParamUtils.getBooleanInitParameter(externalContext, 
+                    ResourceHandlerCache.RESOURCE_HANDLER_CACHE_ENABLED_ATTRIBUTE,
+                    ResourceHandlerCache.RESOURCE_HANDLER_CACHE_ENABLED_DEFAULT);
+
+            if (log.isLoggable(Level.FINE))
+            {
+                log.log(Level.FINE, "MyFaces Resource Caching Enabled="
+                        + _resourceCacheEnabled);
+            }
+        }
+        return _resourceCacheEnabled;
+    }
+
+    private int getMaxSize()
+    {
+        
+        ExternalContext externalContext = FacesContext.getCurrentInstance()
+                .getExternalContext();
+        return WebConfigParamUtils.getIntegerInitParameter(externalContext, 
+                RESOURCE_HANDLER_CACHE_SIZE_ATTRIBUTE, RESOURCE_HANDLER_CACHE_DEFAULT_SIZE);
+    }
+
+    public static class ResourceKey
+    {
+        private String resourceName;
+        private String libraryName;
+        private String contentType;
+        private String localePrefix;
+
+        public ResourceKey(String resourceName, String libraryName,
+                String contentType, String localePrefix)
+        {
+            this.resourceName = resourceName;
+            this.libraryName = libraryName;
+            this.contentType = contentType;
+            this.localePrefix = localePrefix;
+        }
+
+        @Override
+        public boolean equals(Object o)
+        {
+            if (this == o)
+            {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass())
+            {
+                return false;
+            }
+
+            ResourceKey that = (ResourceKey) o;
+
+            if (contentType != null ? !contentType.equals(that.contentType) : that.contentType != null)
+            {
+                return false;
+            }
+            if (libraryName != null ? !libraryName.equals(that.libraryName) : that.libraryName != null)
+            {
+                return false;
+            }
+            if (localePrefix != null ? !localePrefix.equals(that.localePrefix) : that.localePrefix != null)
+            {
+                return false;
+            }
+            if (resourceName != null ? !resourceName.equals(that.resourceName) : that.resourceName != null)
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode()
+        {
+            int result = resourceName != null ? resourceName.hashCode() : 0;
+            result = 31 * result + (libraryName != null ? libraryName.hashCode() : 0);
+            result = 31 * result + (contentType != null ? contentType.hashCode() : 0);
+            result = 31 * result + (localePrefix != null ? localePrefix.hashCode() : 0);
+            return result;
+        }
+    }
+
+    public static class ResourceValue
+    {
+        private ResourceMeta resourceMeta;
+        
+        private ResourceLoader resourceLoader;
+
+        public ResourceValue(ResourceMeta resourceMeta,
+                ResourceLoader resourceLoader)
+        {
+            super();
+            this.resourceMeta = resourceMeta;
+            this.resourceLoader = resourceLoader;
+        }
+
+        public ResourceMeta getResourceMeta()
+        {
+            return resourceMeta;
+        }
+
+        public ResourceLoader getResourceLoader()
+        {
+            return resourceLoader;
+        }
+    }
+
+    private static class _ResourceMap<K, V> extends LinkedHashMap<K, V>
+    {
+        private static final long serialVersionUID = 1L;
+        private int maxCapacity;
+
+        public _ResourceMap(int cacheSize)
+        {
+            // create map at max capacity and 1.1 load factor to avoid rehashing
+            super(cacheSize + 1, 1.1f, true);
+            maxCapacity = cacheSize;
+        }
+
+        @Override
+        protected boolean removeEldestEntry(Map.Entry<K, V> eldest)
+        {
+            return size() > maxCapacity;
+        }
+    }
 }
\ No newline at end of file

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerCache.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerCache.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerSupport.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerSupport.java?rev=1187741&r1=1187740&r2=1187741&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerSupport.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerSupport.java Sat Oct 22 17:59:32 2011
@@ -1,86 +1,86 @@
-/*
- * 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.shared.resource;
-
-import javax.faces.context.FacesContext;
-
-/**
- * A utility class to isolate a ResourceHandler implementation from its
- * underlying implementation
- * 
- * @author Leonardo Uribe (latest modification by $Author: lu4242 $)
- * @version $Revision: 891494 $ $Date: 2009-12-16 19:42:18 -0500 (Mié, 16 Dic 2009) $
- */
-public abstract class ResourceHandlerSupport
-{
-
-    /**
-     * Calculate the resource base path.
-     * 
-     * It should extract a string like:
-     * 
-     * ResourceHandler.RESOURCE_IDENTIFIER + '/' + getResourceName()
-     * 
-     * For example:
-     * 
-     * /javax.faces.resource/image.jpg
-     * 
-     * This is used on ResourceHandler.handleResourceRequest()
-     * 
-     */
-    public abstract String calculateResourceBasePath(FacesContext facesContext);
-
-    /**
-     * Return an array of resource loaders used to find resources
-     * using the standard. The order of ResourceLoaders define
-     * its precedence. 
-     * 
-     * @return
-     */
-    public abstract ResourceLoader[] getResourceLoaders();
-    
-    /**
-     * Check if the mapping used is done using extensions (.xhtml, .jsf)
-     * or if it is not (/faces/*)
-     * @return
-     */
-    public abstract boolean isExtensionMapping();
-    
-    /**
-     * Get the mapping used as prefix(/faces) or sufix(.jsf)
-     * 
-     * @return
-     */
-    public abstract String getMapping();
-    
-    /**
-     * Return the time when the app started. This is useful to set the
-     * "Last-Modified" header in some specific cases.
-     * 
-     * @return
-     */
-    public abstract long getStartupTime();
-    
-    /**
-     * Return the time that should be set on "Expires" header in a resource.
-     * 
-     * @return
-     */
-    public abstract long getMaxTimeExpires();
-}
+/*
+ * 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.shared.resource;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * A utility class to isolate a ResourceHandler implementation from its
+ * underlying implementation
+ * 
+ * @author Leonardo Uribe (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public abstract class ResourceHandlerSupport
+{
+
+    /**
+     * Calculate the resource base path.
+     * 
+     * It should extract a string like:
+     * 
+     * ResourceHandler.RESOURCE_IDENTIFIER + '/' + getResourceName()
+     * 
+     * For example:
+     * 
+     * /javax.faces.resource/image.jpg
+     * 
+     * This is used on ResourceHandler.handleResourceRequest()
+     * 
+     */
+    public abstract String calculateResourceBasePath(FacesContext facesContext);
+
+    /**
+     * Return an array of resource loaders used to find resources
+     * using the standard. The order of ResourceLoaders define
+     * its precedence. 
+     * 
+     * @return
+     */
+    public abstract ResourceLoader[] getResourceLoaders();
+    
+    /**
+     * Check if the mapping used is done using extensions (.xhtml, .jsf)
+     * or if it is not (/faces/*)
+     * @return
+     */
+    public abstract boolean isExtensionMapping();
+    
+    /**
+     * Get the mapping used as prefix(/faces) or sufix(.jsf)
+     * 
+     * @return
+     */
+    public abstract String getMapping();
+    
+    /**
+     * Return the time when the app started. This is useful to set the
+     * "Last-Modified" header in some specific cases.
+     * 
+     * @return
+     */
+    public abstract long getStartupTime();
+    
+    /**
+     * Return the time that should be set on "Expires" header in a resource.
+     * 
+     * @return
+     */
+    public abstract long getMaxTimeExpires();
+}

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerSupport.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceHandlerSupport.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceImpl.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceImpl.java?rev=1187741&r1=1187740&r2=1187741&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceImpl.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceImpl.java Sat Oct 22 17:59:32 2011
@@ -1,385 +1,385 @@
-/*
- * 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.shared.resource;
-
-import static org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.JAVAX_FACES_LIBRARY_NAME;
-import static org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.JSF_JS_RESOURCE_NAME;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PushbackInputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.application.ProjectStage;
-import javax.faces.application.Resource;
-import javax.faces.application.ResourceHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.ExceptionQueuedEventContext;
-
-/**
- * Default implementation for resources
- * 
- * @author Leonardo Uribe (latest modification by $Author: lu4242 $)
- * @version $Revision: 957739 $ $Date: 2010-06-24 17:27:40 -0500 (Jue, 24 Jun 2010) $
- */
-public class ResourceImpl extends Resource
-{
-
-    private ResourceMeta _resourceMeta;
-    private ResourceLoader _resourceLoader;
-    private ResourceHandlerSupport _resourceHandlerSupport;
-    
-    public ResourceImpl(ResourceMeta resourceMeta, 
-            ResourceLoader resourceLoader, ResourceHandlerSupport support, String contentType)
-    {
-        _resourceMeta = resourceMeta;
-        _resourceLoader = resourceLoader;
-        _resourceHandlerSupport = support;
-        setLibraryName(resourceMeta.getLibraryName());
-        setResourceName(resourceMeta.getResourceName());
-        setContentType(contentType);
-    }
-    
-    public ResourceLoader getResourceLoader()
-    {
-        return _resourceLoader;
-    }    
-    
-    @Override
-    public InputStream getInputStream() throws IOException
-    {
-        if (couldResourceContainValueExpressions())
-        {
-            return new ValueExpressionFilterInputStream(
-                    getResourceLoader().getResourceInputStream(_resourceMeta)); 
-        }
-        else
-        {
-            return getResourceLoader().getResourceInputStream(_resourceMeta);            
-        }
-    }
-    
-    private boolean couldResourceContainValueExpressions()
-    {
-        if (_resourceMeta.couldResourceContainValueExpressions())
-        {
-            return true;
-        }
-        else
-        {
-            //By default only css resource contain value expressions
-            String contentType = getContentType();
-    
-            return ("text/css".equals(contentType));
-        }
-    }
-
-    private class ValueExpressionFilterInputStream extends InputStream
-    {
-        private PushbackInputStream delegate;
-        
-        public ValueExpressionFilterInputStream(InputStream in)
-        {
-            super();
-            delegate = new PushbackInputStream(in,255);
-        }
-
-        @Override
-        public int read() throws IOException
-        {
-            int c1 = delegate.read();
-            
-            if (c1 == -1) return -1;
-            
-            if ( ((char)c1) == '#')
-            {
-                int c2 = delegate.read();
-                if (c2 == -1) return -1;
-                if (((char)c2) == '{')
-                {
-                    //It is a value expression. We need
-                    //to look for a occurrence of } to 
-                    //extract the expression and evaluate it,
-                    //the result should be unread.
-                    List<Integer> expressionList = new ArrayList<Integer>();
-                    int c3 = delegate.read();
-                    while ( c3 != -1 && ((char)c3) != '}' )
-                    {
-                        expressionList.add(c3);
-                        c3 = delegate.read();
-                    }
-                    
-                    if (c3 == -1)
-                    {
-                        //get back the data, because we can't
-                        //extract any value expression
-                        for (int i = 0; i < expressionList.size(); i++)
-                        {
-                            delegate.unread(expressionList.get(i));
-                        }
-                        delegate.unread(c2);
-                        return c1;
-                    }
-                    else
-                    {
-                        //EL expression found. Evaluate it and pushback
-                        //the result into the stream
-                        FacesContext context = FacesContext.getCurrentInstance();
-                        ELContext elContext = context.getELContext();
-                        try
-                        {
-                            ValueExpression ve = context.getApplication().
-                                getExpressionFactory().createValueExpression(
-                                        elContext,
-                                        "#{"+convertToExpression(expressionList)+"}",
-                                        String.class);
-                            String value = (String) ve.getValue(elContext);
-                            
-                            for (int i = value.length()-1; i >= 0 ; i--)
-                            {
-                                delegate.unread((int) value.charAt(i));
-                            }
-                        }
-                        catch(ELException e)
-                        {
-                            ExceptionQueuedEventContext equecontext = new ExceptionQueuedEventContext (context, e, null);
-                            context.getApplication().publishEvent (context, ExceptionQueuedEvent.class, equecontext);
-                            
-                            Logger log = Logger.getLogger(ResourceImpl.class.getName());
-                            if (log.isLoggable(Level.SEVERE))
-                                log.severe("Cannot evaluate EL expression "+convertToExpression(expressionList)+ " in resource " + getLibraryName()+":"+getResourceName());
-                            
-                            delegate.unread(c3);
-                            for (int i = expressionList.size()-1; i >= 0; i--)
-                            {
-                                delegate.unread(expressionList.get(i));
-                            }
-                            delegate.unread(c2);
-                            return c1;
-                        }
-                        
-                        //read again
-                        return delegate.read();
-                    }
-                }
-                else
-                {
-                    delegate.unread(c2);
-                    return c1;
-                }
-            }
-            else
-            {
-                //just continue
-                return c1;
-            }
-        }
-        
-        private String convertToExpression(List<Integer> expressionList)
-        {
-            char[] exprArray = new char[expressionList.size()];
-            
-            for (int i = 0; i < expressionList.size(); i++)
-            {
-                exprArray[i] = (char) expressionList.get(i).intValue();
-            }
-            return String.valueOf(exprArray);
-        }
-    }
-
-    @Override
-    public String getRequestPath()
-    {
-        String path;
-        if (_resourceHandlerSupport.isExtensionMapping())
-        {
-            path = ResourceHandler.RESOURCE_IDENTIFIER + '/' + 
-                getResourceName() + _resourceHandlerSupport.getMapping();
-        }
-        else
-        {
-            String mapping = _resourceHandlerSupport.getMapping(); 
-            path = ResourceHandler.RESOURCE_IDENTIFIER + '/' + getResourceName();
-            path = (mapping == null) ? path : mapping + path;
-        }
- 
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        String metadata = null;
-        boolean useAmp = false;
-        if (getLibraryName() != null)
-        {
-            metadata = "?ln=" + getLibraryName();
-            path = path + metadata;
-            useAmp = true;
-            
-            if (!facesContext.isProjectStage(ProjectStage.Production)
-                    && JSF_JS_RESOURCE_NAME.equals(getResourceName()) 
-                    && JAVAX_FACES_LIBRARY_NAME.equals(getLibraryName()))
-            {
-                // append &stage=?? for all ProjectStages except Production
-                path = path + "&stage=" + facesContext.getApplication().getProjectStage().toString();
-            }
-        }
-        if (_resourceMeta.getLocalePrefix() != null)
-        {
-            path = path + (useAmp ? '&' : '?') + "loc=" + _resourceMeta.getLocalePrefix();
-            useAmp = true;
-        }
-        return facesContext.getApplication().getViewHandler().getResourceURL(facesContext, path);
-    }
-
-    @Override
-    public Map<String, String> getResponseHeaders()
-    {
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        
-        if (facesContext.getApplication().getResourceHandler().isResourceRequest(facesContext))
-        {
-            Map<String, String> headers = new HashMap<String, String>();
-            
-            long lastModified;
-            try
-            {
-                lastModified = ResourceLoaderUtils.getResourceLastModified(this.getURL());
-            }
-            catch (IOException e)
-            {
-                lastModified = -1;
-            }
-            
-            // Here we have two cases: If the file could contain EL Expressions
-            // the last modified time is the greatest value between application startup and
-            // the value from file.
-            if (this.couldResourceContainValueExpressions() &&
-                    lastModified < _resourceHandlerSupport.getStartupTime())
-            {
-                lastModified = _resourceHandlerSupport.getStartupTime();
-            }            
-            else if (_resourceMeta instanceof AliasResourceMetaImpl &&
-                lastModified < _resourceHandlerSupport.getStartupTime())
-            {
-                // If the resource meta is aliased, the last modified time is the greatest 
-                // value between application startup and the value from file.
-                lastModified = _resourceHandlerSupport.getStartupTime();
-            }
-
-            if (lastModified >= 0)
-            {
-                headers.put("Last-Modified", ResourceLoaderUtils.formatDateHeader(lastModified));
-                
-                long expires;
-                if (facesContext.isProjectStage(ProjectStage.Development))
-                {
-                    // Force to expire now to prevent caching on development time.
-                    expires = System.currentTimeMillis();
-                }
-                else
-                {
-                    expires = System.currentTimeMillis() + _resourceHandlerSupport.getMaxTimeExpires();
-                }
-                headers.put("Expires", ResourceLoaderUtils.formatDateHeader(expires));
-            }
-            
-            return headers;
-        }
-        else
-        {
-            //No need to return headers 
-            return Collections.emptyMap();
-        }
-    }
-
-    @Override
-    public URL getURL()
-    {
-        return getResourceLoader().getResourceURL(_resourceMeta);
-    }
-
-    @Override
-    public boolean userAgentNeedsUpdate(FacesContext context)
-    {
-        // RFC2616 says related to If-Modified-Since header the following:
-        //
-        // "... The If-Modified-Since request-header field is used with a method to 
-        // make it conditional: if the requested variant has not been modified since 
-        // the time specified in this field, an entity will not be returned from 
-        // the server; instead, a 304 (not modified) response will be returned 
-        // without any message-body..."
-        // 
-        // This method is called from ResourceHandlerImpl.handleResourceRequest and if
-        // returns false send a 304 Not Modified response.
-        
-        String ifModifiedSinceString = context.getExternalContext().getRequestHeaderMap().get("If-Modified-Since");
-        
-        if (ifModifiedSinceString == null)
-        {
-            return true;
-        }
-        
-        Long ifModifiedSince = ResourceLoaderUtils.parseDateHeader(ifModifiedSinceString);
-        
-        if (ifModifiedSince == null)
-        {
-            return true;
-        }
-        
-        Long lastModified;
-        try
-        {
-            lastModified = ResourceLoaderUtils.getResourceLastModified(this.getURL());
-        }
-        catch (IOException exception)
-        {
-            lastModified = -1L;
-        }
-        
-        if (lastModified >= 0)
-        {
-            if (this.couldResourceContainValueExpressions() &&
-                    lastModified < _resourceHandlerSupport.getStartupTime())
-            {
-                lastModified = _resourceHandlerSupport.getStartupTime();
-            }
-            
-            // If the lastModified date is lower or equal than ifModifiedSince,
-            // the agent does not need to update.
-            // Note the lastModified time is set at milisecond precision, but when 
-            // the date is parsed and sent on ifModifiedSince, the exceding miliseconds
-            // are trimmed. So, we have to compare trimming this from the calculated
-            // lastModified time.
-            if ( (lastModified-(lastModified % 1000)) <= ifModifiedSince)
-            {
-                return false;
-            }
-        }
-        
-        return true;
-    }
-}
+/*
+ * 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.shared.resource;
+
+import static org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.JAVAX_FACES_LIBRARY_NAME;
+import static org.apache.myfaces.shared.renderkit.html.util.ResourceUtils.JSF_JS_RESOURCE_NAME;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PushbackInputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.application.ProjectStage;
+import javax.faces.application.Resource;
+import javax.faces.application.ResourceHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
+
+/**
+ * Default implementation for resources
+ * 
+ * @author Leonardo Uribe (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class ResourceImpl extends Resource
+{
+
+    private ResourceMeta _resourceMeta;
+    private ResourceLoader _resourceLoader;
+    private ResourceHandlerSupport _resourceHandlerSupport;
+    
+    public ResourceImpl(ResourceMeta resourceMeta, 
+            ResourceLoader resourceLoader, ResourceHandlerSupport support, String contentType)
+    {
+        _resourceMeta = resourceMeta;
+        _resourceLoader = resourceLoader;
+        _resourceHandlerSupport = support;
+        setLibraryName(resourceMeta.getLibraryName());
+        setResourceName(resourceMeta.getResourceName());
+        setContentType(contentType);
+    }
+    
+    public ResourceLoader getResourceLoader()
+    {
+        return _resourceLoader;
+    }    
+    
+    @Override
+    public InputStream getInputStream() throws IOException
+    {
+        if (couldResourceContainValueExpressions())
+        {
+            return new ValueExpressionFilterInputStream(
+                    getResourceLoader().getResourceInputStream(_resourceMeta)); 
+        }
+        else
+        {
+            return getResourceLoader().getResourceInputStream(_resourceMeta);            
+        }
+    }
+    
+    private boolean couldResourceContainValueExpressions()
+    {
+        if (_resourceMeta.couldResourceContainValueExpressions())
+        {
+            return true;
+        }
+        else
+        {
+            //By default only css resource contain value expressions
+            String contentType = getContentType();
+    
+            return ("text/css".equals(contentType));
+        }
+    }
+
+    private class ValueExpressionFilterInputStream extends InputStream
+    {
+        private PushbackInputStream delegate;
+        
+        public ValueExpressionFilterInputStream(InputStream in)
+        {
+            super();
+            delegate = new PushbackInputStream(in,255);
+        }
+
+        @Override
+        public int read() throws IOException
+        {
+            int c1 = delegate.read();
+            
+            if (c1 == -1) return -1;
+            
+            if ( ((char)c1) == '#')
+            {
+                int c2 = delegate.read();
+                if (c2 == -1) return -1;
+                if (((char)c2) == '{')
+                {
+                    //It is a value expression. We need
+                    //to look for a occurrence of } to 
+                    //extract the expression and evaluate it,
+                    //the result should be unread.
+                    List<Integer> expressionList = new ArrayList<Integer>();
+                    int c3 = delegate.read();
+                    while ( c3 != -1 && ((char)c3) != '}' )
+                    {
+                        expressionList.add(c3);
+                        c3 = delegate.read();
+                    }
+                    
+                    if (c3 == -1)
+                    {
+                        //get back the data, because we can't
+                        //extract any value expression
+                        for (int i = 0; i < expressionList.size(); i++)
+                        {
+                            delegate.unread(expressionList.get(i));
+                        }
+                        delegate.unread(c2);
+                        return c1;
+                    }
+                    else
+                    {
+                        //EL expression found. Evaluate it and pushback
+                        //the result into the stream
+                        FacesContext context = FacesContext.getCurrentInstance();
+                        ELContext elContext = context.getELContext();
+                        try
+                        {
+                            ValueExpression ve = context.getApplication().
+                                getExpressionFactory().createValueExpression(
+                                        elContext,
+                                        "#{"+convertToExpression(expressionList)+"}",
+                                        String.class);
+                            String value = (String) ve.getValue(elContext);
+                            
+                            for (int i = value.length()-1; i >= 0 ; i--)
+                            {
+                                delegate.unread((int) value.charAt(i));
+                            }
+                        }
+                        catch(ELException e)
+                        {
+                            ExceptionQueuedEventContext equecontext = new ExceptionQueuedEventContext (context, e, null);
+                            context.getApplication().publishEvent (context, ExceptionQueuedEvent.class, equecontext);
+                            
+                            Logger log = Logger.getLogger(ResourceImpl.class.getName());
+                            if (log.isLoggable(Level.SEVERE))
+                                log.severe("Cannot evaluate EL expression "+convertToExpression(expressionList)+ " in resource " + getLibraryName()+":"+getResourceName());
+                            
+                            delegate.unread(c3);
+                            for (int i = expressionList.size()-1; i >= 0; i--)
+                            {
+                                delegate.unread(expressionList.get(i));
+                            }
+                            delegate.unread(c2);
+                            return c1;
+                        }
+                        
+                        //read again
+                        return delegate.read();
+                    }
+                }
+                else
+                {
+                    delegate.unread(c2);
+                    return c1;
+                }
+            }
+            else
+            {
+                //just continue
+                return c1;
+            }
+        }
+        
+        private String convertToExpression(List<Integer> expressionList)
+        {
+            char[] exprArray = new char[expressionList.size()];
+            
+            for (int i = 0; i < expressionList.size(); i++)
+            {
+                exprArray[i] = (char) expressionList.get(i).intValue();
+            }
+            return String.valueOf(exprArray);
+        }
+    }
+
+    @Override
+    public String getRequestPath()
+    {
+        String path;
+        if (_resourceHandlerSupport.isExtensionMapping())
+        {
+            path = ResourceHandler.RESOURCE_IDENTIFIER + '/' + 
+                getResourceName() + _resourceHandlerSupport.getMapping();
+        }
+        else
+        {
+            String mapping = _resourceHandlerSupport.getMapping(); 
+            path = ResourceHandler.RESOURCE_IDENTIFIER + '/' + getResourceName();
+            path = (mapping == null) ? path : mapping + path;
+        }
+ 
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        String metadata = null;
+        boolean useAmp = false;
+        if (getLibraryName() != null)
+        {
+            metadata = "?ln=" + getLibraryName();
+            path = path + metadata;
+            useAmp = true;
+            
+            if (!facesContext.isProjectStage(ProjectStage.Production)
+                    && JSF_JS_RESOURCE_NAME.equals(getResourceName()) 
+                    && JAVAX_FACES_LIBRARY_NAME.equals(getLibraryName()))
+            {
+                // append &stage=?? for all ProjectStages except Production
+                path = path + "&stage=" + facesContext.getApplication().getProjectStage().toString();
+            }
+        }
+        if (_resourceMeta.getLocalePrefix() != null)
+        {
+            path = path + (useAmp ? '&' : '?') + "loc=" + _resourceMeta.getLocalePrefix();
+            useAmp = true;
+        }
+        return facesContext.getApplication().getViewHandler().getResourceURL(facesContext, path);
+    }
+
+    @Override
+    public Map<String, String> getResponseHeaders()
+    {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        
+        if (facesContext.getApplication().getResourceHandler().isResourceRequest(facesContext))
+        {
+            Map<String, String> headers = new HashMap<String, String>();
+            
+            long lastModified;
+            try
+            {
+                lastModified = ResourceLoaderUtils.getResourceLastModified(this.getURL());
+            }
+            catch (IOException e)
+            {
+                lastModified = -1;
+            }
+            
+            // Here we have two cases: If the file could contain EL Expressions
+            // the last modified time is the greatest value between application startup and
+            // the value from file.
+            if (this.couldResourceContainValueExpressions() &&
+                    lastModified < _resourceHandlerSupport.getStartupTime())
+            {
+                lastModified = _resourceHandlerSupport.getStartupTime();
+            }            
+            else if (_resourceMeta instanceof AliasResourceMetaImpl &&
+                lastModified < _resourceHandlerSupport.getStartupTime())
+            {
+                // If the resource meta is aliased, the last modified time is the greatest 
+                // value between application startup and the value from file.
+                lastModified = _resourceHandlerSupport.getStartupTime();
+            }
+
+            if (lastModified >= 0)
+            {
+                headers.put("Last-Modified", ResourceLoaderUtils.formatDateHeader(lastModified));
+                
+                long expires;
+                if (facesContext.isProjectStage(ProjectStage.Development))
+                {
+                    // Force to expire now to prevent caching on development time.
+                    expires = System.currentTimeMillis();
+                }
+                else
+                {
+                    expires = System.currentTimeMillis() + _resourceHandlerSupport.getMaxTimeExpires();
+                }
+                headers.put("Expires", ResourceLoaderUtils.formatDateHeader(expires));
+            }
+            
+            return headers;
+        }
+        else
+        {
+            //No need to return headers 
+            return Collections.emptyMap();
+        }
+    }
+
+    @Override
+    public URL getURL()
+    {
+        return getResourceLoader().getResourceURL(_resourceMeta);
+    }
+
+    @Override
+    public boolean userAgentNeedsUpdate(FacesContext context)
+    {
+        // RFC2616 says related to If-Modified-Since header the following:
+        //
+        // "... The If-Modified-Since request-header field is used with a method to 
+        // make it conditional: if the requested variant has not been modified since 
+        // the time specified in this field, an entity will not be returned from 
+        // the server; instead, a 304 (not modified) response will be returned 
+        // without any message-body..."
+        // 
+        // This method is called from ResourceHandlerImpl.handleResourceRequest and if
+        // returns false send a 304 Not Modified response.
+        
+        String ifModifiedSinceString = context.getExternalContext().getRequestHeaderMap().get("If-Modified-Since");
+        
+        if (ifModifiedSinceString == null)
+        {
+            return true;
+        }
+        
+        Long ifModifiedSince = ResourceLoaderUtils.parseDateHeader(ifModifiedSinceString);
+        
+        if (ifModifiedSince == null)
+        {
+            return true;
+        }
+        
+        Long lastModified;
+        try
+        {
+            lastModified = ResourceLoaderUtils.getResourceLastModified(this.getURL());
+        }
+        catch (IOException exception)
+        {
+            lastModified = -1L;
+        }
+        
+        if (lastModified >= 0)
+        {
+            if (this.couldResourceContainValueExpressions() &&
+                    lastModified < _resourceHandlerSupport.getStartupTime())
+            {
+                lastModified = _resourceHandlerSupport.getStartupTime();
+            }
+            
+            // If the lastModified date is lower or equal than ifModifiedSince,
+            // the agent does not need to update.
+            // Note the lastModified time is set at milisecond precision, but when 
+            // the date is parsed and sent on ifModifiedSince, the exceding miliseconds
+            // are trimmed. So, we have to compare trimming this from the calculated
+            // lastModified time.
+            if ( (lastModified-(lastModified % 1000)) <= ifModifiedSince)
+            {
+                return false;
+            }
+        }
+        
+        return true;
+    }
+}

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoader.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoader.java?rev=1187741&r1=1187740&r2=1187741&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoader.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoader.java Sat Oct 22 17:59:32 2011
@@ -1,156 +1,156 @@
-/*
- * 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.shared.resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Comparator;
-
-/**
- * Base class for resource loaders.  Resource loaders can lookup resources 
- * as URLs from arbitrary locations, including JAR files.
- * 
- * @author Leonardo Uribe (latest modification by $Author: lu4242 $)
- * @version $Revision: 882702 $ $Date: 2009-11-20 15:16:07 -0500 (Vie, 20 Nov 2009) $
- */
-public abstract class ResourceLoader
-{
-    
-    public static final String VERSION_INVALID = "INVALID";
-    
-    private String _prefix;
-    
-    public ResourceLoader(String prefix)
-    {
-        _prefix = prefix;
-    }
-
-    public abstract String getResourceVersion(String path);
-
-    /**
-     * Return the max available version found (if exists) or
-     * return null if no version available. 
-     */
-    public abstract String getLibraryVersion(String path);
-
-    /**
-     * Return the max available version found (if exists) or
-     * return null if no version available. 
-     */
-    public abstract URL getResourceURL(ResourceMeta resourceMeta);
-
-    public abstract InputStream getResourceInputStream(ResourceMeta resourceMeta);
-    
-    public abstract ResourceMeta createResourceMeta(String prefix, String libraryName, String libraryVersion,
-            String resourceName, String resourceVersion);
-    
-    public abstract boolean libraryExists(String libraryName);
-    
-    private Comparator<String> _versionComparator = null;
-
-    protected Comparator<String> getVersionComparator()
-    {
-        if (_versionComparator == null)
-        {
-            _versionComparator = new VersionComparator();
-        }
-        return _versionComparator;
-    }
-
-    protected void setVersionComparator(Comparator<String> versionComparator)
-    {
-        _versionComparator = versionComparator;
-    }
-
-    public class VersionComparator implements Comparator<String>
-    {
-
-        public int compare(String s1, String s2)
-        {
-            int n1 = 0;
-            int n2 = 0;
-            String o1 = s1;
-            String o2 = s2;
-
-            boolean p1 = true;
-            boolean p2 = true;
-
-            while (n1 == n2 && (p1 || p2))
-            {
-                int i1 = o1.indexOf('_');
-                int i2 = o2.indexOf('_');
-                if (i1 < 0)
-                {
-                    if (o1.length() > 0)
-                    {
-                        p1 = false;
-                        n1 = Integer.valueOf(o1);
-                        o1 = "";
-                    }
-                    else
-                    {
-                        p1 = false;
-                        n1 = 0;
-                    }
-                }
-                else
-                {
-                    n1 = Integer.valueOf(o1.substring(0, i1));
-                    o1 = o1.substring(i1 + 1);
-                }
-                if (i2 < 0)
-                {
-                    if (o2.length() > 0)
-                    {
-                        p2 = false;
-                        n2 = Integer.valueOf(o2);
-                        o2 = "";
-                    }
-                    else
-                    {
-                        p2 = false;
-                        n2 = 0;
-                    }
-                }
-                else
-                {
-                    n2 = Integer.valueOf(o2.substring(0, i2));
-                    o2 = o2.substring(i2 + 1);
-                }
-            }
-
-            if (n1 == n2)
-            {
-                return s1.length() - s2.length();
-            }
-            return n1 - n2;
-        }
-    }
-    
-    public String getPrefix()
-    {
-        return _prefix;
-    }
-
-    public void setPrefix(String prefix)
-    {
-        _prefix = prefix;
-    }
-}
+/*
+ * 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.shared.resource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Comparator;
+
+/**
+ * Base class for resource loaders.  Resource loaders can lookup resources 
+ * as URLs from arbitrary locations, including JAR files.
+ * 
+ * @author Leonardo Uribe (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public abstract class ResourceLoader
+{
+    
+    public static final String VERSION_INVALID = "INVALID";
+    
+    private String _prefix;
+    
+    public ResourceLoader(String prefix)
+    {
+        _prefix = prefix;
+    }
+
+    public abstract String getResourceVersion(String path);
+
+    /**
+     * Return the max available version found (if exists) or
+     * return null if no version available. 
+     */
+    public abstract String getLibraryVersion(String path);
+
+    /**
+     * Return the max available version found (if exists) or
+     * return null if no version available. 
+     */
+    public abstract URL getResourceURL(ResourceMeta resourceMeta);
+
+    public abstract InputStream getResourceInputStream(ResourceMeta resourceMeta);
+    
+    public abstract ResourceMeta createResourceMeta(String prefix, String libraryName, String libraryVersion,
+            String resourceName, String resourceVersion);
+    
+    public abstract boolean libraryExists(String libraryName);
+    
+    private Comparator<String> _versionComparator = null;
+
+    protected Comparator<String> getVersionComparator()
+    {
+        if (_versionComparator == null)
+        {
+            _versionComparator = new VersionComparator();
+        }
+        return _versionComparator;
+    }
+
+    protected void setVersionComparator(Comparator<String> versionComparator)
+    {
+        _versionComparator = versionComparator;
+    }
+
+    public class VersionComparator implements Comparator<String>
+    {
+
+        public int compare(String s1, String s2)
+        {
+            int n1 = 0;
+            int n2 = 0;
+            String o1 = s1;
+            String o2 = s2;
+
+            boolean p1 = true;
+            boolean p2 = true;
+
+            while (n1 == n2 && (p1 || p2))
+            {
+                int i1 = o1.indexOf('_');
+                int i2 = o2.indexOf('_');
+                if (i1 < 0)
+                {
+                    if (o1.length() > 0)
+                    {
+                        p1 = false;
+                        n1 = Integer.valueOf(o1);
+                        o1 = "";
+                    }
+                    else
+                    {
+                        p1 = false;
+                        n1 = 0;
+                    }
+                }
+                else
+                {
+                    n1 = Integer.valueOf(o1.substring(0, i1));
+                    o1 = o1.substring(i1 + 1);
+                }
+                if (i2 < 0)
+                {
+                    if (o2.length() > 0)
+                    {
+                        p2 = false;
+                        n2 = Integer.valueOf(o2);
+                        o2 = "";
+                    }
+                    else
+                    {
+                        p2 = false;
+                        n2 = 0;
+                    }
+                }
+                else
+                {
+                    n2 = Integer.valueOf(o2.substring(0, i2));
+                    o2 = o2.substring(i2 + 1);
+                }
+            }
+
+            if (n1 == n2)
+            {
+                return s1.length() - s2.length();
+            }
+            return n1 - n2;
+        }
+    }
+    
+    public String getPrefix()
+    {
+        return _prefix;
+    }
+
+    public void setPrefix(String prefix)
+    {
+        _prefix = prefix;
+    }
+}

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoader.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoaderUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoaderUtils.java?rev=1187741&r1=1187740&r2=1187741&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoaderUtils.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoaderUtils.java Sat Oct 22 17:59:32 2011
@@ -1,137 +1,137 @@
-/*
- * 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.shared.resource;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.JarURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-public class ResourceLoaderUtils
-{
-    // TODO: In tomcat and jetty it is implemented a Flyweight pattern when converting
-    // date headers. For now it is better keep this stuff simple.
-    private static final String HTTP_RESPONSE_DATE_HEADER =
-        "EEE, dd MMM yyyy HH:mm:ss zzz";
-    
-    private static final String[] HTTP_REQUEST_DATE_HEADER = {
-            "EEE, dd MMM yyyy HH:mm:ss zzz", "EEEEEE, dd-MMM-yy HH:mm:ss zzz",
-            "EEE MMMM d HH:mm:ss yyyy" };
-    
-    private static TimeZone __GMT = TimeZone.getTimeZone("GMT");
-
-    public static String formatDateHeader(long value)
-    {
-        SimpleDateFormat format = new SimpleDateFormat(
-                HTTP_RESPONSE_DATE_HEADER,
-                Locale.US);
-        format.setTimeZone(__GMT);
-        return format.format(new Date(value));
-    }
-    
-    public static Long parseDateHeader(String value)
-    {
-        Date date = null;
-        for (int i = 0; (date == null) && (i < HTTP_REQUEST_DATE_HEADER.length); i++)
-        {
-            try
-            {
-                SimpleDateFormat format = new SimpleDateFormat(
-                        HTTP_REQUEST_DATE_HEADER[i], Locale.US);
-                format.setTimeZone(__GMT);
-                date = format.parse(value);
-            }
-            catch (ParseException e)
-            {
-                ;
-            }
-        }
-        if (date == null)
-        {
-            return null;
-        }
-        return new Long(date.getTime());
-    }
-    
-    //Taken from trinidad URLUtils
-    public static long getResourceLastModified(URL url) throws IOException
-    {
-        if ("file".equals(url.getProtocol()))
-        {
-            String externalForm = url.toExternalForm();
-            // Remove the "file:"
-            File file = new File(externalForm.substring(5));
-
-            return file.lastModified();
-        }
-        else
-        {
-            return getResourceLastModified(url.openConnection());
-        }
-    }
-
-    //Taken from trinidad URLUtils
-    public static long getResourceLastModified(URLConnection connection) throws IOException
-    {
-        long modified;
-        if (connection instanceof JarURLConnection)
-        {
-            // The following hack is required to work-around a JDK bug.
-            // getLastModified() on a JAR entry URL delegates to the actual JAR file
-            // rather than the JAR entry.
-            // This opens internally, and does not close, an input stream to the JAR
-            // file.
-            // In turn, you cannot close it by yourself, because it's internal.
-            // The work-around is to get the modification date of the JAR file
-            // manually,
-            // and then close that connection again.
-
-            URL jarFileUrl = ((JarURLConnection) connection).getJarFileURL();
-            URLConnection jarFileConnection = jarFileUrl.openConnection();
-
-            try
-            {
-                modified = jarFileConnection.getLastModified();
-            }
-            finally
-            {
-                try
-                {
-                    jarFileConnection.getInputStream().close();
-                }
-                catch (Exception exception)
-                {
-                    // Ignored
-                }
-            }
-        }
-        else
-        {
-            modified = connection.getLastModified();
-        }
-
-        return modified;
-    }
-}
+/*
+ * 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.shared.resource;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+public class ResourceLoaderUtils
+{
+    // TODO: In tomcat and jetty it is implemented a Flyweight pattern when converting
+    // date headers. For now it is better keep this stuff simple.
+    private static final String HTTP_RESPONSE_DATE_HEADER =
+        "EEE, dd MMM yyyy HH:mm:ss zzz";
+    
+    private static final String[] HTTP_REQUEST_DATE_HEADER = {
+            "EEE, dd MMM yyyy HH:mm:ss zzz", "EEEEEE, dd-MMM-yy HH:mm:ss zzz",
+            "EEE MMMM d HH:mm:ss yyyy" };
+    
+    private static TimeZone __GMT = TimeZone.getTimeZone("GMT");
+
+    public static String formatDateHeader(long value)
+    {
+        SimpleDateFormat format = new SimpleDateFormat(
+                HTTP_RESPONSE_DATE_HEADER,
+                Locale.US);
+        format.setTimeZone(__GMT);
+        return format.format(new Date(value));
+    }
+    
+    public static Long parseDateHeader(String value)
+    {
+        Date date = null;
+        for (int i = 0; (date == null) && (i < HTTP_REQUEST_DATE_HEADER.length); i++)
+        {
+            try
+            {
+                SimpleDateFormat format = new SimpleDateFormat(
+                        HTTP_REQUEST_DATE_HEADER[i], Locale.US);
+                format.setTimeZone(__GMT);
+                date = format.parse(value);
+            }
+            catch (ParseException e)
+            {
+                ;
+            }
+        }
+        if (date == null)
+        {
+            return null;
+        }
+        return new Long(date.getTime());
+    }
+    
+    //Taken from trinidad URLUtils
+    public static long getResourceLastModified(URL url) throws IOException
+    {
+        if ("file".equals(url.getProtocol()))
+        {
+            String externalForm = url.toExternalForm();
+            // Remove the "file:"
+            File file = new File(externalForm.substring(5));
+
+            return file.lastModified();
+        }
+        else
+        {
+            return getResourceLastModified(url.openConnection());
+        }
+    }
+
+    //Taken from trinidad URLUtils
+    public static long getResourceLastModified(URLConnection connection) throws IOException
+    {
+        long modified;
+        if (connection instanceof JarURLConnection)
+        {
+            // The following hack is required to work-around a JDK bug.
+            // getLastModified() on a JAR entry URL delegates to the actual JAR file
+            // rather than the JAR entry.
+            // This opens internally, and does not close, an input stream to the JAR
+            // file.
+            // In turn, you cannot close it by yourself, because it's internal.
+            // The work-around is to get the modification date of the JAR file
+            // manually,
+            // and then close that connection again.
+
+            URL jarFileUrl = ((JarURLConnection) connection).getJarFileURL();
+            URLConnection jarFileConnection = jarFileUrl.openConnection();
+
+            try
+            {
+                modified = jarFileConnection.getLastModified();
+            }
+            finally
+            {
+                try
+                {
+                    jarFileConnection.getInputStream().close();
+                }
+                catch (Exception exception)
+                {
+                    // Ignored
+                }
+            }
+        }
+        else
+        {
+            modified = connection.getLastModified();
+        }
+
+        return modified;
+    }
+}

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoaderUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceLoaderUtils.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMeta.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMeta.java?rev=1187741&r1=1187740&r2=1187741&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMeta.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMeta.java Sat Oct 22 17:59:32 2011
@@ -1,43 +1,43 @@
-/*
- * 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.shared.resource;
-
-/**
- * Contains the metadata information to reference a resource 
- * 
- * @author Leonardo Uribe (latest modification by $Author: lu4242 $)
- * @version $Revision: 946779 $ $Date: 2010-05-20 15:31:42 -0500 (Jue, 20 May 2010) $
- */
-public abstract class ResourceMeta
-{
-    
-    public abstract String getLibraryName();
-    
-    public abstract String getResourceName();
-
-    public abstract String getLocalePrefix();
-
-    public abstract String getLibraryVersion();
-
-    public abstract String getResourceVersion();
-    
-    public abstract String getResourceIdentifier();
-    
-    public abstract boolean couldResourceContainValueExpressions();
-}
+/*
+ * 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.shared.resource;
+
+/**
+ * Contains the metadata information to reference a resource 
+ * 
+ * @author Leonardo Uribe (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public abstract class ResourceMeta
+{
+    
+    public abstract String getLibraryName();
+    
+    public abstract String getResourceName();
+
+    public abstract String getLocalePrefix();
+
+    public abstract String getLibraryVersion();
+
+    public abstract String getResourceVersion();
+    
+    public abstract String getResourceIdentifier();
+    
+    public abstract boolean couldResourceContainValueExpressions();
+}

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMeta.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMeta.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMetaImpl.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMetaImpl.java?rev=1187741&r1=1187740&r2=1187741&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMetaImpl.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceMetaImpl.java Sat Oct 22 17:59:32 2011
@@ -1,116 +1,116 @@
-/*
- * 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.shared.resource;
-
-/**
- * Contains the metadata information to reference a resource 
- * 
- * @author Leonardo Uribe (latest modification by $Author: lu4242 $)
- * @version $Revision: 700544 $ $Date: 2008-09-30 13:44:02 -0500 (Mar, 30 Sep 2008) $
- */
-public class ResourceMetaImpl extends ResourceMeta
-{
-
-    private final String _prefix;
-    private final String _libraryName;
-    private final String _libraryVersion;
-    private final String _resourceName;
-    private final String _resourceVersion;
-    
-    public ResourceMetaImpl(String prefix, String libraryName, String libraryVersion,
-            String resourceName, String resourceVersion)
-    {
-        _prefix = prefix;
-        _libraryName = libraryName;
-        _libraryVersion = libraryVersion;
-        _resourceName = resourceName;
-        _resourceVersion = resourceVersion;
-    }
-
-    public String getLibraryName()
-    {
-        return _libraryName;
-    }    
-    
-    public String getResourceName()
-    {
-        return _resourceName;
-    }    
-
-    public String getLocalePrefix()
-    {
-        return _prefix;
-    }
-
-    public String getLibraryVersion()
-    {
-        return _libraryVersion;
-    }
-
-    public String getResourceVersion()
-    {
-        return _resourceVersion;
-    }
-    
-    @Override
-    public String getResourceIdentifier()
-    {
-        StringBuilder builder = new StringBuilder();
-        boolean firstSlashAdded = false;
-        if (_prefix != null && _prefix.length() > 0)
-        {
-            builder.append(_prefix);
-            firstSlashAdded = true;
-        }
-        if (_libraryName != null)
-        {
-            if (firstSlashAdded) builder.append('/');
-            builder.append(_libraryName);
-            firstSlashAdded = true;
-        }
-        if (_libraryVersion != null)
-        {
-            if (firstSlashAdded) builder.append('/');
-            builder.append(_libraryVersion);
-            firstSlashAdded = true;
-        }
-        if (_resourceName != null)
-        {
-            if (firstSlashAdded) builder.append('/');
-            builder.append(_resourceName);
-            firstSlashAdded = true;
-        }
-        if (_resourceVersion != null)
-        {
-            if (firstSlashAdded) builder.append('/');
-            builder.append(_resourceVersion);
-            builder.append(
-                    _resourceName.substring(_resourceName.lastIndexOf('.')));
-            firstSlashAdded = true;
-        }
-
-        return builder.toString();
-    }
-
-    @Override
-    public boolean couldResourceContainValueExpressions()
-    {
-        return false;
-    }
-}
+/*
+ * 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.shared.resource;
+
+/**
+ * Contains the metadata information to reference a resource 
+ * 
+ * @author Leonardo Uribe (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class ResourceMetaImpl extends ResourceMeta
+{
+
+    private final String _prefix;
+    private final String _libraryName;
+    private final String _libraryVersion;
+    private final String _resourceName;
+    private final String _resourceVersion;
+    
+    public ResourceMetaImpl(String prefix, String libraryName, String libraryVersion,
+            String resourceName, String resourceVersion)
+    {
+        _prefix = prefix;
+        _libraryName = libraryName;
+        _libraryVersion = libraryVersion;
+        _resourceName = resourceName;
+        _resourceVersion = resourceVersion;
+    }
+
+    public String getLibraryName()
+    {
+        return _libraryName;
+    }    
+    
+    public String getResourceName()
+    {
+        return _resourceName;
+    }    
+
+    public String getLocalePrefix()
+    {
+        return _prefix;
+    }
+
+    public String getLibraryVersion()
+    {
+        return _libraryVersion;
+    }
+
+    public String getResourceVersion()
+    {
+        return _resourceVersion;
+    }
+    
+    @Override
+    public String getResourceIdentifier()
+    {
+        StringBuilder builder = new StringBuilder();
+        boolean firstSlashAdded = false;
+        if (_prefix != null && _prefix.length() > 0)
+        {
+            builder.append(_prefix);
+            firstSlashAdded = true;
+        }
+        if (_libraryName != null)
+        {
+            if (firstSlashAdded) builder.append('/');
+            builder.append(_libraryName);
+            firstSlashAdded = true;
+        }
+        if (_libraryVersion != null)
+        {
+            if (firstSlashAdded) builder.append('/');
+            builder.append(_libraryVersion);
+            firstSlashAdded = true;
+        }
+        if (_resourceName != null)
+        {
+            if (firstSlashAdded) builder.append('/');
+            builder.append(_resourceName);
+            firstSlashAdded = true;
+        }
+        if (_resourceVersion != null)
+        {
+            if (firstSlashAdded) builder.append('/');
+            builder.append(_resourceVersion);
+            builder.append(
+                    _resourceName.substring(_resourceName.lastIndexOf('.')));
+            firstSlashAdded = true;
+        }
+
+        return builder.toString();
+    }
+
+    @Override
+    public boolean couldResourceContainValueExpressions()
+    {
+        return false;
+    }
+}