/*
* Copyright (C) 2014 the original author or authors.
*
* Licensed 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 ro.pippo.pebble;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import ro.pippo.core.PippoRuntimeException;
import ro.pippo.core.util.ClasspathUtils;
import com.mitchellbosecke.pebble.error.LoaderException;
import com.mitchellbosecke.pebble.loader.ClasspathLoader;
class PippoTemplateLoader extends ClasspathLoader {
public PippoTemplateLoader() {
}
@Override
public Reader getReader(String templateName) throws LoaderException {
StringBuilder path = new StringBuilder("");
if (getPrefix() != null) {
path.append(getPrefix());
if (!getPrefix().endsWith(String.valueOf('/'))) {
path.append('/');
}
}
String resource = path.toString() + templateName + (getSuffix() == null ? "" : getSuffix());
String location = resource;
if (resource.charAt(0) == '/') {
location = resource.substring(1);
}
URL url = ClasspathUtils.locateOnClasspath(location);
if (url == null) {
throw new LoaderException(null, "Could not find template \"" + location + "\"");
}
Reader reader = null;
try {
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is, getCharset());
reader = new BufferedReader(isr);
} catch (IOException e) {
throw new PippoRuntimeException(e);
}
return reader;
}
}