001    package railo.runtime.functions.system;
002    
003    import java.util.Iterator;
004    
005    import railo.runtime.Component;
006    import railo.runtime.ComponentPro;
007    import railo.runtime.ComponentWrap;
008    import railo.runtime.Mapping;
009    import railo.runtime.PageContext;
010    import railo.runtime.PageContextImpl;
011    import railo.runtime.config.ConfigImpl;
012    import railo.runtime.exp.PageException;
013    import railo.runtime.listener.AppListenerUtil;
014    import railo.runtime.listener.ApplicationContextPro;
015    import railo.runtime.listener.ModernApplicationContext;
016    import railo.runtime.net.s3.Properties;
017    import railo.runtime.op.Caster;
018    import railo.runtime.orm.ORMConfiguration;
019    import railo.runtime.type.Array;
020    import railo.runtime.type.ArrayImpl;
021    import railo.runtime.type.Collection;
022    import railo.runtime.type.KeyImpl;
023    import railo.runtime.type.Struct;
024    import railo.runtime.type.StructImpl;
025    import railo.runtime.type.UDF;
026    import railo.runtime.type.scope.Undefined;
027    
028    public class GetApplicationSettings {
029            public static Struct call(PageContext pc) {
030                    return call(pc, false);
031            }
032            
033            public static Struct call(PageContext pc, boolean suppressFunctions) {
034                    ApplicationContextPro ac = (ApplicationContextPro)pc.getApplicationContext();
035                    ComponentPro cfc = null;
036                    if(ac instanceof ModernApplicationContext)cfc= ((ModernApplicationContext)ac).getComponent();
037                    
038                    Struct sct=new StructImpl();
039                    sct.setEL("applicationtimeout", ac.getApplicationTimeout());
040                    sct.setEL("clientmanagement", Caster.toBoolean(ac.isSetClientManagement()));
041                    sct.setEL("clientstorage", ac.getClientstorage());
042                    sct.setEL("sessionstorage", ac.getSessionstorage());
043                    sct.setEL("customtagpaths", toArray(ac.getCustomTagMappings()));
044                    sct.setEL("datasource", ac.getDefaultDataSource());
045                    sct.setEL("loginstorage", AppListenerUtil.translateLoginStorage(ac.getLoginStorage()));
046                    sct.setEL("mappings", toStruct(ac.getMappings()));
047                    sct.setEL(KeyImpl.NAME, ac.getName());
048                    sct.setEL("scriptprotect", AppListenerUtil.translateScriptProtect(ac.getScriptProtect()));
049                    sct.setEL("securejson", Caster.toBoolean(ac.getSecureJson()));
050                    sct.setEL("securejsonprefix", ac.getSecureJsonPrefix());
051                    sct.setEL("sessionmanagement", Caster.toBoolean(ac.isSetSessionManagement()));
052                    sct.setEL("sessiontimeout", ac.getSessionTimeout());
053                    sct.setEL("clienttimeout", ac.getClientTimeout());
054                    sct.setEL("setclientcookies", Caster.toBoolean(ac.isSetClientCookies()));
055                    sct.setEL("setdomaincookies", Caster.toBoolean(ac.isSetDomainCookies()));
056                    sct.setEL(KeyImpl.NAME, ac.getName());
057                    sct.setEL("localmode", ac.getLocalMode()==Undefined.MODE_LOCAL_OR_ARGUMENTS_ALWAYS?"always":"update");
058                    sct.setEL("sessiontype", ((PageContextImpl) pc).getSessionType()==ConfigImpl.SESSION_TYPE_CFML?"cfml":"j2ee");
059                    sct.setEL("serverSideFormValidation", Boolean.FALSE); // TODO impl
060    
061                    sct.setEL("clientCluster", Caster.toBoolean(ac.getClientCluster()));
062                    sct.setEL("sessionCluster", Caster.toBoolean(ac.getSessionCluster()));
063                    
064                    
065                    
066                    // orm
067                    if(ac.isORMEnabled()){
068                            ORMConfiguration conf = ac.getORMConfiguration();
069                            if(conf!=null)sct.setEL("orm", conf.toStruct());
070                    }
071                    // s3
072                    Properties props = ac.getS3();
073                    if(props!=null) {
074                            sct.setEL("s3", props.toStruct());
075                    }
076                    
077                    
078                    if(cfc!=null){
079                            sct.setEL("component", cfc.getPageSource().getDisplayPath());
080                            
081                            try {
082                                    ComponentWrap cw=ComponentWrap.toComponentWrap(Component.ACCESS_PRIVATE, cfc);
083                                    Iterator it=cw.keyIterator();
084                                    Collection.Key key;
085                                    Object value;
086                            while(it.hasNext()) {
087                                key=KeyImpl.toKey(it.next());
088                                value=cw.get(key);
089                                if(suppressFunctions && value instanceof UDF) continue;
090                                if(!sct.containsKey(key))sct.setEL(key, value);
091                                    }
092                            } 
093                            catch (PageException e) {e.printStackTrace();}
094                    }
095                    return sct;
096            }
097    
098            
099    
100            private static Array toArray(Mapping[] mappings) {
101                    Array arr=new ArrayImpl();
102                    if(mappings!=null)for(int i=0;i<mappings.length;i++){
103                            arr.appendEL(mappings[i].getStrPhysical());
104                    }
105                    return arr;
106            }
107    
108            private static Struct toStruct(Mapping[] mappings) {
109                    Struct sct=new StructImpl();
110                    if(mappings!=null)for(int i=0;i<mappings.length;i++){
111                            sct.setEL(KeyImpl.init(mappings[i].getVirtual()), mappings[i].getStrPhysical());
112                    }
113                    return sct;
114            }
115    }