001    package railo.runtime.orm;
002    
003    
004    import railo.runtime.Component;
005    import railo.runtime.db.DataSource;
006    import railo.runtime.exp.ApplicationException;
007    import railo.runtime.exp.ExpressionException;
008    import railo.runtime.exp.PageException;
009    import railo.runtime.exp.PageExceptionImpl;
010    import railo.runtime.op.Caster;
011    import railo.runtime.type.List;
012    import railo.runtime.type.util.ComponentUtil;
013    
014    public class ORMException extends ApplicationException {
015    
016            /**
017             * Constructor of the class
018             * @param message
019             */
020            public ORMException(Component cfc,String message) {
021                    super(message);
022                    setContext(cfc);
023            }
024    
025            public ORMException(ORMEngine engine,Component cfc,String message) {
026                    super(message);
027                    setAddional(engine,this);
028                    setContext(cfc);
029            }
030    
031            public ORMException(ORMEngine engine,String message) {
032                    super(message);
033                    setAddional(engine,this);
034            }
035    
036            /**
037             * Constructor of the class
038             * @param message
039             * @param detail
040             */
041            public ORMException(Component cfc,String message, String detail) {
042                    super(message, detail);
043                    setContext(cfc);
044            }
045            public ORMException(String message, String detail) {
046                    super(message, detail);
047            }
048            
049    
050            public ORMException(ORMEngine engine,Component cfc,String message, String detail) {
051                    super(message, detail);
052                    setAddional(engine, this);
053                    setContext(cfc);
054            }
055            
056    
057            public ORMException(ORMEngine engine,String message, String detail) {
058                    super(message, detail);
059                    setAddional(engine, this);
060            }
061            
062    
063            /*public ORMException(String message) {
064                    super(message);
065            }*/
066            
067    
068            private void setContext(Component cfc) {
069                    try {
070                            if(cfc!=null && getPageDeep()==0)addContext(ComponentUtil.toComponentPro(cfc).getPageSource(), 1, 1, null);
071                            
072                            
073                    } 
074                    catch (ExpressionException e) {}
075            }
076    
077            public static PageException toPageException(ORMEngine engine,Throwable t) {
078                    Throwable c = t.getCause();
079                    if(c!=null)t=c;
080                    PageException pe = Caster.toPageException(t);
081                    setAddional(engine, pe);
082                    return pe;
083            }
084            
085            public static void setAddional(ORMEngine engine,PageException pe) {
086                    String[] names = engine.getEntityNames();
087                    
088                    if(pe instanceof PageExceptionImpl){
089                            PageExceptionImpl pei = (PageExceptionImpl)pe;
090                            String dsn=null;
091                            DataSource ds = engine.getDataSource();
092                            if(ds!=null) dsn=ds.getName();
093                            pei.setAdditional("Entities", List.arrayToList(names, ", "));
094                            if(dsn!=null)pei.setAdditional("Datasource", dsn);
095                    }
096            }
097    
098            public ORMException(Throwable t) {
099                    super(t.getMessage());
100            }
101    
102    }