ClassLoaderResourceLoader.java revision 56ed4167b942ec265f9cee70ac4d71d10b3835ce
191bca4244286fb519c93fe92329da96b0e6f32eejvr/* 291bca4244286fb519c93fe92329da96b0e6f32eejvr * Copyright (C) 2010 Google Inc. 305b4b4a27160e90307372f85dd99be69a9d972ffjvr * 41ae29591efbb29492ce05378909ccf4028d7c1eeBehdad Esfahbod * Licensed under the Apache License, Version 2.0 (the "License"); 530e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbod * you may not use this file except in compliance with the License. 605b4b4a27160e90307372f85dd99be69a9d972ffjvr * You may obtain a copy of the License at 710de259aec75d3ac0c34b444b2f0423fa86a7709jvr * 891bca4244286fb519c93fe92329da96b0e6f32eejvr * http://www.apache.org/licenses/LICENSE-2.0 991bca4244286fb519c93fe92329da96b0e6f32eejvr * 1091bca4244286fb519c93fe92329da96b0e6f32eejvr * Unless required by applicable law or agreed to in writing, software 1191bca4244286fb519c93fe92329da96b0e6f32eejvr * distributed under the License is distributed on an "AS IS" BASIS, 1291bca4244286fb519c93fe92329da96b0e6f32eejvr * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1391bca4244286fb519c93fe92329da96b0e6f32eejvr * See the License for the specific language governing permissions and 1491bca4244286fb519c93fe92329da96b0e6f32eejvr * limitations under the License. 1591bca4244286fb519c93fe92329da96b0e6f32eejvr */ 1691bca4244286fb519c93fe92329da96b0e6f32eejvr 1710de259aec75d3ac0c34b444b2f0423fa86a7709jvrpackage com.google.clearsilver.jsilver.resourceloader; 1805b4b4a27160e90307372f85dd99be69a9d972ffjvr 1905b4b4a27160e90307372f85dd99be69a9d972ffjvrimport com.google.clearsilver.jsilver.exceptions.JSilverTemplateNotFoundException; 2005b4b4a27160e90307372f85dd99be69a9d972ffjvr 21c53569efef1db3270a39ed2ecea89c54d05fc1b7jvrimport java.io.File; 22c53569efef1db3270a39ed2ecea89c54d05fc1b7jvrimport java.io.IOException; 2305b4b4a27160e90307372f85dd99be69a9d972ffjvrimport java.io.InputStream; 2405b4b4a27160e90307372f85dd99be69a9d972ffjvrimport java.io.InputStreamReader; 2591bca4244286fb519c93fe92329da96b0e6f32eejvrimport java.io.Reader; 2691bca4244286fb519c93fe92329da96b0e6f32eejvr 2791bca4244286fb519c93fe92329da96b0e6f32eejvr/** 2891bca4244286fb519c93fe92329da96b0e6f32eejvr * Loads resources from classpath. 2991bca4244286fb519c93fe92329da96b0e6f32eejvr * 3091bca4244286fb519c93fe92329da96b0e6f32eejvr * <p> 3191bca4244286fb519c93fe92329da96b0e6f32eejvr * For example, suppose the classpath contains: 3291bca4244286fb519c93fe92329da96b0e6f32eejvr * 3391bca4244286fb519c93fe92329da96b0e6f32eejvr * <pre> 3491bca4244286fb519c93fe92329da96b0e6f32eejvr * com/foo/my-template.cs 3591bca4244286fb519c93fe92329da96b0e6f32eejvr * com/foo/subdir/another-template.cs 3691bca4244286fb519c93fe92329da96b0e6f32eejvr * </pre> 3791bca4244286fb519c93fe92329da96b0e6f32eejvr * 3891bca4244286fb519c93fe92329da96b0e6f32eejvr * <p> 3991bca4244286fb519c93fe92329da96b0e6f32eejvr * You can access the resources like this: 4091bca4244286fb519c93fe92329da96b0e6f32eejvr * 4191bca4244286fb519c93fe92329da96b0e6f32eejvr * <pre> 4291bca4244286fb519c93fe92329da96b0e6f32eejvr * ResourceLoader loader = 4305b4b4a27160e90307372f85dd99be69a9d972ffjvr * new ClassPathResourceLoader(getClassLoader(), "com/foo"); 4405b4b4a27160e90307372f85dd99be69a9d972ffjvr * loader.open("my-template.cs"); 4505b4b4a27160e90307372f85dd99be69a9d972ffjvr * loader.open("subdir/my-template.cs"); 4691bca4244286fb519c93fe92329da96b0e6f32eejvr * </pre> 4791bca4244286fb519c93fe92329da96b0e6f32eejvr * 4891bca4244286fb519c93fe92329da96b0e6f32eejvr * @see ResourceLoader 4991bca4244286fb519c93fe92329da96b0e6f32eejvr * @see ClassResourceLoader 5091bca4244286fb519c93fe92329da96b0e6f32eejvr */ 5191bca4244286fb519c93fe92329da96b0e6f32eejvrpublic class ClassLoaderResourceLoader extends BufferedResourceLoader { 5291bca4244286fb519c93fe92329da96b0e6f32eejvr 5391bca4244286fb519c93fe92329da96b0e6f32eejvr private final ClassLoader classLoader; 5491bca4244286fb519c93fe92329da96b0e6f32eejvr private String basePath; 5591bca4244286fb519c93fe92329da96b0e6f32eejvr 5691bca4244286fb519c93fe92329da96b0e6f32eejvr public ClassLoaderResourceLoader(ClassLoader classLoader, String basePath) { 5791bca4244286fb519c93fe92329da96b0e6f32eejvr this.classLoader = classLoader; 5891bca4244286fb519c93fe92329da96b0e6f32eejvr this.basePath = basePath; 5991bca4244286fb519c93fe92329da96b0e6f32eejvr } 6091bca4244286fb519c93fe92329da96b0e6f32eejvr 6191bca4244286fb519c93fe92329da96b0e6f32eejvr public ClassLoaderResourceLoader(ClassLoader classLoader) { 6291bca4244286fb519c93fe92329da96b0e6f32eejvr this(classLoader, "."); 6391bca4244286fb519c93fe92329da96b0e6f32eejvr } 6491bca4244286fb519c93fe92329da96b0e6f32eejvr 6591bca4244286fb519c93fe92329da96b0e6f32eejvr @Override 6691bca4244286fb519c93fe92329da96b0e6f32eejvr public Reader open(String name) throws IOException { 6791bca4244286fb519c93fe92329da96b0e6f32eejvr String path = basePath + '/' + name; 6805b4b4a27160e90307372f85dd99be69a9d972ffjvr InputStream stream = classLoader.getResourceAsStream(path); 6905b4b4a27160e90307372f85dd99be69a9d972ffjvr return stream == null ? null : buffer(new InputStreamReader(stream, getCharacterSet())); 7005b4b4a27160e90307372f85dd99be69a9d972ffjvr } 7191bca4244286fb519c93fe92329da96b0e6f32eejvr 7291bca4244286fb519c93fe92329da96b0e6f32eejvr @Override 7391bca4244286fb519c93fe92329da96b0e6f32eejvr public Reader openOrFail(String name) throws JSilverTemplateNotFoundException, IOException { 7491bca4244286fb519c93fe92329da96b0e6f32eejvr Reader reader = open(name); 7591bca4244286fb519c93fe92329da96b0e6f32eejvr if (reader == null) { 7691bca4244286fb519c93fe92329da96b0e6f32eejvr throw new JSilverTemplateNotFoundException("No class loader resource '" + name + "' in '" 7791bca4244286fb519c93fe92329da96b0e6f32eejvr + basePath + "'"); 7891bca4244286fb519c93fe92329da96b0e6f32eejvr } else { 7991bca4244286fb519c93fe92329da96b0e6f32eejvr return reader; 8091bca4244286fb519c93fe92329da96b0e6f32eejvr } 8191bca4244286fb519c93fe92329da96b0e6f32eejvr } 8291bca4244286fb519c93fe92329da96b0e6f32eejvr 8391bca4244286fb519c93fe92329da96b0e6f32eejvr} 8491bca4244286fb519c93fe92329da96b0e6f32eejvr