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 java.net.URL; 018 import java.util.Locale; 019 020 import org.apache.hivemind.Resource; 021 import org.apache.hivemind.util.AbstractResource; 022 import org.apache.hivemind.util.LocalizedResource; 023 024 /** 025 * Implementation of {@link org.apache.hivemind.Resource}for resources found within a 026 * {@link org.apache.tapestry.web.WebContext}. 027 * 028 * @author Howard Lewis Ship 029 * @since 4.0 030 */ 031 032 public class WebContextResource extends AbstractResource 033 { 034 private WebContext _context; 035 036 public WebContextResource(WebContext context, String path) 037 { 038 this(context, path, null); 039 } 040 041 public WebContextResource(WebContext context, String path, Locale locale) 042 { 043 super(path, locale); 044 045 _context = context; 046 } 047 048 /** 049 * Locates the resource using {@link LocalizedWebContextResourceFinder}and 050 * {@link ServletContext#getResource(java.lang.String)}. 051 */ 052 053 public Resource getLocalization(Locale locale) 054 { 055 LocalizedWebContextResourceFinder finder = new LocalizedWebContextResourceFinder(_context); 056 057 String path = getPath(); 058 LocalizedResource localizedResource = finder.resolve(path, locale); 059 060 if (localizedResource == null) 061 return null; 062 063 String localizedPath = localizedResource.getResourcePath(); 064 Locale pathLocale = localizedResource.getResourceLocale(); 065 066 if (localizedPath == null) 067 return null; 068 069 if (path.equals(localizedPath)) 070 return this; 071 072 return new WebContextResource(_context, localizedPath, pathLocale); 073 } 074 075 public URL getResourceURL() 076 { 077 return _context.getResource(getPath()); 078 } 079 080 public String toString() 081 { 082 return "context:" + getPath(); 083 } 084 085 public int hashCode() 086 { 087 return 2387 & getPath().hashCode(); 088 } 089 090 protected Resource newResource(String path) 091 { 092 return new WebContextResource(_context, path); 093 } 094 095 }