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    }