1 /** 2 * This file Copyright (c) 2010-2011 Magnolia International 3 * Ltd. (http://www.magnolia-cms.com). All rights reserved. 4 * 5 * 6 * This file is dual-licensed under both the Magnolia 7 * Network Agreement and the GNU General Public License. 8 * You may elect to use one or the other of these licenses. 9 * 10 * This file is distributed in the hope that it will be 11 * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the 12 * implied warranty of MERCHANTABILITY or FITNESS FOR A 13 * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT. 14 * Redistribution, except as permitted by whichever of the GPL 15 * or MNA you select, is prohibited. 16 * 17 * 1. For the GPL license (GPL), you can redistribute and/or 18 * modify this file under the terms of the GNU General 19 * Public License, Version 3, as published by the Free Software 20 * Foundation. You should have received a copy of the GNU 21 * General Public License, Version 3 along with this program; 22 * if not, write to the Free Software Foundation, Inc., 51 23 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 24 * 25 * 2. For the Magnolia Network Agreement (MNA), this file 26 * and the accompanying materials are made available under the 27 * terms of the MNA which accompanies this distribution, and 28 * is available at http://www.magnolia-cms.com/mna.html 29 * 30 * Any modifications to this file must keep this entire header 31 * intact. 32 * 33 */ 34 package info.magnolia.freemarker; 35 36 import info.magnolia.cms.beans.config.ServerConfiguration; 37 import info.magnolia.context.MgnlContext; 38 39 import java.io.Writer; 40 41 import freemarker.core.Environment; 42 import freemarker.template.TemplateException; 43 import freemarker.template.TemplateExceptionHandler; 44 45 /** 46 * Exception handler providing different output based on the configuration of the current instance. Full stacktrace gets rendered on the author instance only, while ignoring the stacktraces in preview mode and on public instances. 47 * 48 * @author gjoseph 49 * @version $Id: $ 50 */ 51 public class ModeDependentTemplateExceptionHandler implements TemplateExceptionHandler { 52 public void handleTemplateException(TemplateException te, Environment env, Writer out) throws TemplateException { 53 final boolean isAuthorInstance = ServerConfiguration.getInstance().isAdmin(); 54 final boolean isPreviewMode = MgnlContext.getAggregationState().isPreviewMode(); 55 if (isAuthorInstance && !isPreviewMode) { 56 inEditMode(te, env, out); 57 } else { 58 inPublicMode(te, env, out); 59 } 60 } 61 62 protected void inPublicMode(TemplateException te, Environment env, Writer out) throws TemplateException { 63 TemplateExceptionHandler.IGNORE_HANDLER.handleTemplateException(te, env, out); 64 } 65 66 protected void inEditMode(TemplateException te, Environment env, Writer out) throws TemplateException { 67 TemplateExceptionHandler.HTML_DEBUG_HANDLER.handleTemplateException(te, env, out); 68 } 69 }