/**
*
* Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
**/
package lucee.runtime.tag;
import lucee.runtime.PageSource;
import lucee.runtime.err.ErrorPage;
import lucee.runtime.err.ErrorPageImpl;
import lucee.runtime.exp.ExpressionException;
import lucee.runtime.exp.MissingIncludeException;
import lucee.runtime.ext.tag.TagImpl;
/**
* Enables the display of customized HTML pages when errors occur. This lets you maintain a
* consistent look and feel within your application, even when errors occur.
*
*
*
**/
public final class Error extends TagImpl {
private ErrorPageImpl errorPage=new ErrorPageImpl();
@Override
public void release() {
super.release();
errorPage=new ErrorPageImpl();
//exception="any";
//template=null;
//mailto="";
}
/** set the value exception
* Type of exception. Required if type = "exception" or "monitor".
* @param exception value to set
**/
public void setException(String exception) {
errorPage.setTypeAsString(exception.toLowerCase().trim());
//this.exception=exception.toLowerCase().trim();
}
/** set the value type
* The type of error that the custom error page handles.
* @param type value to set
* @throws ExpressionException
**/
public void setType(String type) throws ExpressionException {
type=type.toLowerCase().trim();
if(type.equals("exception")) {
errorPage.setType(ErrorPage.TYPE_EXCEPTION);
}
else if(type.equals("request")) {
errorPage.setType(ErrorPage.TYPE_REQUEST);
}
//else if(type.equals("validation")) this.type=VALIDATION;
else throw new ExpressionException("invalid type ["+type+"] for tag error, use one of the following types [exception,request]");
}
/** set the value template
* The relative path to the custom error page.
* @param template value to set
* @throws MissingIncludeException
**/
public void setTemplate(String template) throws MissingIncludeException {
PageSource ps=pageContext.getCurrentPageSource().getRealPage(template);
if(!ps.exists())
throw new MissingIncludeException(ps);
errorPage.setTemplate(ps);
}
/** set the value mailto
* The e-mail address of the administrator to notify of the error. The value
* is available to your custom error page in the MailTo property of the error object.
* @param mailto value to set
**/
public void setMailto(String mailto) {
errorPage.setMailto(mailto);
}
@Override
public int doStartTag() {
if(errorPage.getType()==ErrorPage.TYPE_REQUEST) errorPage.setException("any");
pageContext.setErrorPage(errorPage);
return SKIP_BODY;
}
@Override
public int doEndTag() {
return EVAL_PAGE;
}
}