001 // Copyright 2005 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry.web; 016 017 import org.apache.hivemind.Resource; 018 import org.apache.hivemind.util.AbstractResource; 019 import org.apache.hivemind.util.LocalizedResource; 020 021 import javax.servlet.ServletContext; 022 import java.net.URL; 023 import java.util.Locale; 024 025 /** 026 * Implementation of {@link org.apache.hivemind.Resource} for resources found within a 027 * {@link org.apache.tapestry.web.WebContext}. 028 * 029 * @author Howard Lewis Ship 030 * @since 4.0 031 */ 032 033 public class WebContextResource extends AbstractResource 034 { 035 private WebContext _context; 036 037 public WebContextResource(WebContext context, String path) 038 { 039 this(context, path, null); 040 } 041 042 public WebContextResource(WebContext context, String path, Locale locale) 043 { 044 super(path, locale); 045 046 _context = context; 047 } 048 049 /** 050 * Locates the resource using {@link LocalizedWebContextResourceFinder}and 051 * {@link ServletContext#getResource(java.lang.String)}. 052 */ 053 054 public Resource getLocalization(Locale locale) 055 { 056 LocalizedWebContextResourceFinder finder = new LocalizedWebContextResourceFinder(_context); 057 058 String path = getPath(); 059 LocalizedResource localizedResource = finder.resolve(path, locale); 060 061 if (localizedResource == null) 062 return null; 063 064 String localizedPath = localizedResource.getResourcePath(); 065 Locale pathLocale = localizedResource.getResourceLocale(); 066 067 if (localizedPath == null) 068 return null; 069 070 if (path.equals(localizedPath)) 071 return this; 072 073 return new WebContextResource(_context, localizedPath, pathLocale); 074 } 075 076 public URL getResourceURL() 077 { 078 return _context.getResource(getPath()); 079 } 080 081 public String toString() 082 { 083 return "context:" + getPath(); 084 } 085 086 public int hashCode() 087 { 088 return 2387 & getPath().hashCode(); 089 } 090 091 protected Resource newResource(String path) 092 { 093 return new WebContextResource(_context, path); 094 } 095 096 }