001 package railo.runtime.err; 002 003 import java.util.ArrayList; 004 005 import railo.runtime.exp.PageException; 006 007 /** 008 * Handle Page Errors 009 */ 010 public final class ErrorPagePool { 011 012 private ArrayList<ErrorPage> pages=new ArrayList<ErrorPage>(); 013 private boolean hasChanged=false; 014 015 /** 016 * sets the page error 017 * @param errorPage 018 */ 019 public void setErrorPage(ErrorPage errorPage) { 020 pages.add(errorPage); 021 hasChanged=true; 022 } 023 024 /** 025 * returns the error page 026 * @param pe Page Exception 027 * @return 028 */ 029 public ErrorPage getErrorPage(PageException pe, short type) { 030 for(int i=pages.size()-1;i>=0;i--) { 031 ErrorPageImpl ep=(ErrorPageImpl) pages.get(i); 032 if(ep.getType()==type) { 033 if(type==ErrorPageImpl.TYPE_EXCEPTION){ 034 if(pe.typeEqual(ep.getTypeAsString()))return ep; 035 } 036 else return ep; 037 038 } 039 } 040 return null; 041 } 042 043 044 045 /** 046 * clear the error page pool 047 */ 048 public void clear() { 049 if(hasChanged) { 050 pages.clear(); 051 } 052 hasChanged=false; 053 } 054 055 /** 056 * remove this error page 057 * @param type 058 */ 059 public void removeErrorPage(PageException pe) { 060 // exception 061 ErrorPage ep = getErrorPage(pe,ErrorPageImpl.TYPE_EXCEPTION); 062 if(ep!=null){ 063 pages.remove(ep); 064 hasChanged=true; 065 } 066 // request 067 ep = getErrorPage(pe,ErrorPageImpl.TYPE_REQUEST); 068 if(ep!=null){ 069 pages.remove(ep); 070 hasChanged=true; 071 } 072 // validation 073 ep = getErrorPage(pe,ErrorPageImpl.TYPE_VALIDATION); 074 if(ep!=null){ 075 pages.remove(ep); 076 hasChanged=true; 077 } 078 079 } 080 081 }