// Path: src/main/java/x/mvmn/gp2srv/web/service/velocity/TemplateEngine.java
// public class TemplateEngine {
// 
// 	public static final String DEFAULT_TEMPLATES_CLASSPATH_PREFIX = "/x/mvmn/gp2srv/web/templates/";
// 
// 	private final VelocityEngine engine;
// 	private final String templatesClasspathPrefix;
// 
// 	protected static class StaticToolsHelper {
// 
// 		private static final Class<?> TOOLS[] = new Class<?>[] { DateHelper.class };
// 
// 		public static void populateTools(final Context context) {
// 			for (final Class<?> toolClass : TOOLS) {
// 				context.put("tool" + toolClass.getSimpleName(), toolClass);
// 			}
// 		}
// 	}
// 
// 	public TemplateEngine(Map<String, String> pathToTempalteMapping) {
// 		this(DEFAULT_TEMPLATES_CLASSPATH_PREFIX, pathToTempalteMapping);
// 	}
// 
// 	public TemplateEngine(String templatesClasspathPrefix, Map<String, String> pathToTempalteMapping) {
// 		this.templatesClasspathPrefix = templatesClasspathPrefix;
// 		try {
// 			initStringResourceRepository(pathToTempalteMapping);
// 			engine = new VelocityEngine(getConfigurationAsProperties());
// 		} catch (Exception e) {
// 			throw new RuntimeException("Failed in initialize Template Engine", e);
// 		}
// 	}
// 
// 	private StringResourceRepository initStringResourceRepository(Map<String, String> pathToTempalteMapping) throws IOException {
// 		StringResourceRepository result = new StringResourceRepositoryImpl();
// 		StringResourceLoader.setRepository(StringResourceLoader.REPOSITORY_NAME_DEFAULT, result);
// 		registerResource(result, RuntimeConstants.VM_LIBRARY_DEFAULT, RuntimeConstants.VM_LIBRARY_DEFAULT);
// 		for (Map.Entry<String, String> pathToTempalteMappingItem : pathToTempalteMapping.entrySet()) {
// 			registerResource(result, pathToTempalteMappingItem.getKey(), pathToTempalteMappingItem.getValue());
// 		}
// 		return result;
// 	}
// 
// 	private void registerResource(StringResourceRepository repo, String registeredName, String relativeClasspathRef) throws IOException {
// 		String templateClasspathRef = templatesClasspathPrefix + relativeClasspathRef.replaceAll("\\.\\./", "");
// 		InputStream templateBodyInputStream = GPhoto2Server.class.getResourceAsStream(templateClasspathRef);
// 		String templateBodyString = IOUtils.toString(templateBodyInputStream, "UTF-8");
// 		repo.putStringResource(registeredName, templateBodyString);
// 	}
// 
// 	private Properties getConfigurationAsProperties() {
// 		Properties result = new Properties();
// 
// 		result.setProperty(RuntimeConstants.RESOURCE_LOADER, "string");
// 		result.setProperty(RuntimeConstants.VM_LIBRARY_AUTORELOAD, "false");
// 		result.setProperty(RuntimeConstants.VM_LIBRARY, RuntimeConstants.VM_LIBRARY_DEFAULT);
// 		result.setProperty("string.resource.loader.class", StringResourceLoader.class.getName());
// 		result.setProperty("string.resource.loader.modificationCheckInterval", "0");
// 		result.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, SystemLogChute.class.getName());
// 
// 		return result;
// 	}
// 
// 	public void renderTemplate(String tempalteName, String encoding, Context context, Writer output) {
// 		StaticToolsHelper.populateTools(context);
// 		engine.mergeTemplate(tempalteName, encoding, context, output);
// 	}
// }
// 
// Path: src/main/java/x/mvmn/lang/util/Provider.java
// public interface Provider<T> {
// 
// 	public T provide();
// }
// 
// Path: src/main/java/x/mvmn/log/api/Logger.java
// public interface Logger {
// 
// 	public static enum LogLevel {
// 		TRACE, DEBUG, INFO, WARN, ERROR, SEVERE, FATAL
// 	}
// 
// 	public Logger setLevel(LogLevel level);
// 
// 	public LogLevel getLevel();
// 
// 	public boolean shouldLog(LogLevel logLevel);
// 
// 	public Logger log(LogLevel level, String text);
// 
// 	public Logger log(LogLevel level, String text, Throwable t);
// 
// 	public Logger log(LogLevel level, Throwable t);
// 
// 	public Logger trace(String text);
// 
// 	public Logger trace(String text, Throwable t);
// 
// 	public Logger trace(Throwable t);
// 
// 	public Logger debug(String text);
// 
// 	public Logger debug(String text, Throwable t);
// 
// 	public Logger debug(Throwable t);
// 
// 	public Logger info(String text);
// 
// 	public Logger info(String text, Throwable t);
// 
// 	public Logger info(Throwable t);
// 
// 	public Logger warn(String text);
// 
// 	public Logger warn(String text, Throwable t);
// 
// 	public Logger warn(Throwable t);
// 
// 	public Logger error(String text);
// 
// 	public Logger error(String text, Throwable t);
// 
// 	public Logger error(Throwable t);
// 
// 	public Logger severe(String text);
// 
// 	public Logger severe(String text, Throwable t);
// 
// 	public Logger severe(Throwable t);
// 
// 	public Logger fatal(String text);
// 
// 	public Logger fatal(String text, Throwable t);
// 
// 	public Logger fatal(Throwable t);
// }


import java.io.IOException;
import java.io.Writer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.VelocityContext;
import x.mvmn.gp2srv.web.service.velocity.TemplateEngine;
import x.mvmn.lang.util.Provider;
import x.mvmn.log.api.Logger;
package x.mvmn.gp2srv.web.servlets;





public abstract class AbstractErrorHandlingServlet extends HttpServletWithTemplates {

	private static final long serialVersionUID = 8638499002251355635L;

	protected final Logger logger;

// Path: src/main/java/x/mvmn/gp2srv/web/service/velocity/TemplateEngine.java
// public class TemplateEngine {
// 
// 	public static final String DEFAULT_TEMPLATES_CLASSPATH_PREFIX = "/x/mvmn/gp2srv/web/templates/";
// 
// 	private final VelocityEngine engine;
// 	private final String templatesClasspathPrefix;
// 
// 	protected static class StaticToolsHelper {
// 
// 		private static final Class<?> TOOLS[] = new Class<?>[] { DateHelper.class };
// 
// 		public static void populateTools(final Context context) {
// 			for (final Class<?> toolClass : TOOLS) {
// 				context.put("tool" + toolClass.getSimpleName(), toolClass);
// 			}
// 		}
// 	}
// 
// 	public TemplateEngine(Map<String, String> pathToTempalteMapping) {
// 		this(DEFAULT_TEMPLATES_CLASSPATH_PREFIX, pathToTempalteMapping);
// 	}
// 
// 	public TemplateEngine(String templatesClasspathPrefix, Map<String, String> pathToTempalteMapping) {
// 		this.templatesClasspathPrefix = templatesClasspathPrefix;
// 		try {
// 			initStringResourceRepository(pathToTempalteMapping);
// 			engine = new VelocityEngine(getConfigurationAsProperties());
// 		} catch (Exception e) {
// 			throw new RuntimeException("Failed in initialize Template Engine", e);
// 		}
// 	}
// 
// 	private StringResourceRepository initStringResourceRepository(Map<String, String> pathToTempalteMapping) throws IOException {
// 		StringResourceRepository result = new StringResourceRepositoryImpl();
// 		StringResourceLoader.setRepository(StringResourceLoader.REPOSITORY_NAME_DEFAULT, result);
// 		registerResource(result, RuntimeConstants.VM_LIBRARY_DEFAULT, RuntimeConstants.VM_LIBRARY_DEFAULT);
// 		for (Map.Entry<String, String> pathToTempalteMappingItem : pathToTempalteMapping.entrySet()) {
// 			registerResource(result, pathToTempalteMappingItem.getKey(), pathToTempalteMappingItem.getValue());
// 		}
// 		return result;
// 	}
// 
// 	private void registerResource(StringResourceRepository repo, String registeredName, String relativeClasspathRef) throws IOException {
// 		String templateClasspathRef = templatesClasspathPrefix + relativeClasspathRef.replaceAll("\\.\\./", "");
// 		InputStream templateBodyInputStream = GPhoto2Server.class.getResourceAsStream(templateClasspathRef);
// 		String templateBodyString = IOUtils.toString(templateBodyInputStream, "UTF-8");
// 		repo.putStringResource(registeredName, templateBodyString);
// 	}
// 
// 	private Properties getConfigurationAsProperties() {
// 		Properties result = new Properties();
// 
// 		result.setProperty(RuntimeConstants.RESOURCE_LOADER, "string");
// 		result.setProperty(RuntimeConstants.VM_LIBRARY_AUTORELOAD, "false");
// 		result.setProperty(RuntimeConstants.VM_LIBRARY, RuntimeConstants.VM_LIBRARY_DEFAULT);
// 		result.setProperty("string.resource.loader.class", StringResourceLoader.class.getName());
// 		result.setProperty("string.resource.loader.modificationCheckInterval", "0");
// 		result.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, SystemLogChute.class.getName());
// 
// 		return result;
// 	}
// 
// 	public void renderTemplate(String tempalteName, String encoding, Context context, Writer output) {
// 		StaticToolsHelper.populateTools(context);
// 		engine.mergeTemplate(tempalteName, encoding, context, output);
// 	}
// }
// 
// Path: src/main/java/x/mvmn/lang/util/Provider.java
// public interface Provider<T> {
// 
// 	public T provide();
// }
// 
// Path: src/main/java/x/mvmn/log/api/Logger.java
// public interface Logger {
// 
// 	public static enum LogLevel {
// 		TRACE, DEBUG, INFO, WARN, ERROR, SEVERE, FATAL
// 	}
// 
// 	public Logger setLevel(LogLevel level);
// 
// 	public LogLevel getLevel();
// 
// 	public boolean shouldLog(LogLevel logLevel);
// 
// 	public Logger log(LogLevel level, String text);
// 
// 	public Logger log(LogLevel level, String text, Throwable t);
// 
// 	public Logger log(LogLevel level, Throwable t);
// 
// 	public Logger trace(String text);
// 
// 	public Logger trace(String text, Throwable t);
// 
// 	public Logger trace(Throwable t);
// 
// 	public Logger debug(String text);
// 
// 	public Logger debug(String text, Throwable t);
// 
// 	public Logger debug(Throwable t);
// 
// 	public Logger info(String text);
// 
// 	public Logger info(String text, Throwable t);
// 
// 	public Logger info(Throwable t);
// 
// 	public Logger warn(String text);
// 
// 	public Logger warn(String text, Throwable t);
// 
// 	public Logger warn(Throwable t);
// 
// 	public Logger error(String text);
// 
// 	public Logger error(String text, Throwable t);
// 
// 	public Logger error(Throwable t);
// 
// 	public Logger severe(String text);
// 
// 	public Logger severe(String text, Throwable t);
// 
// 	public Logger severe(Throwable t);
// 
// 	public Logger fatal(String text);
// 
// 	public Logger fatal(String text, Throwable t);
// 
// 	public Logger fatal(Throwable t);
// }


// Path: src/main/java/x/mvmn/gp2srv/web/servlets/AbstractErrorHandlingServlet.java
import java.io.IOException;
import java.io.Writer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.VelocityContext;
import x.mvmn.gp2srv.web.service.velocity.TemplateEngine;
import x.mvmn.lang.util.Provider;
import x.mvmn.log.api.Logger;

package x.mvmn.gp2srv.web.servlets;





public abstract class AbstractErrorHandlingServlet extends HttpServletWithTemplates {

	private static final long serialVersionUID = 8638499002251355635L;

	protected final Logger logger;

	public AbstractErrorHandlingServlet(final Provider<TemplateEngine> templateEngineProvider, final Logger logger) {