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