001    package railo.runtime.listener;
002    
003    import railo.commons.io.res.Resource;
004    import railo.commons.io.res.util.ResourceUtil;
005    import railo.commons.lang.types.RefBoolean;
006    import railo.runtime.Component;
007    import railo.runtime.ComponentWrap;
008    import railo.runtime.Mapping;
009    import railo.runtime.PageContext;
010    import railo.runtime.component.Member;
011    import railo.runtime.config.ConfigWebImpl;
012    import railo.runtime.exp.PageException;
013    import railo.runtime.net.s3.Properties;
014    import railo.runtime.op.Caster;
015    import railo.runtime.op.Decision;
016    import railo.runtime.orm.ORMConfiguration;
017    import railo.runtime.type.Collection;
018    import railo.runtime.type.Collection.Key;
019    import railo.runtime.type.KeyImpl;
020    import railo.runtime.type.Scope;
021    import railo.runtime.type.Struct;
022    import railo.runtime.type.StructImpl;
023    import railo.runtime.type.cfc.ComponentAccess;
024    import railo.runtime.type.dt.TimeSpan;
025    import railo.runtime.type.util.KeyConstants;
026    
027    /**
028     * @author mic
029     *
030     */
031    /**
032     * @author mic
033     *
034     */
035    public class ModernApplicationContext extends ApplicationContextSupport {
036    
037            private static final long serialVersionUID = -8230105685329758613L;
038    
039            private static final Collection.Key APPLICATION_TIMEOUT = KeyImpl.intern("applicationTimeout");
040            private static final Collection.Key CLIENT_MANAGEMENT = KeyImpl.intern("clientManagement");
041            private static final Collection.Key CLIENT_STORAGE = KeyImpl.intern("clientStorage");
042            private static final Collection.Key SESSION_STORAGE = KeyImpl.intern("sessionStorage");
043            private static final Collection.Key LOGIN_STORAGE = KeyImpl.intern("loginStorage");
044            private static final Collection.Key SESSION_TYPE = KeyImpl.intern("sessionType");
045            private static final Collection.Key SESSION_MANAGEMENT = KeyImpl.intern("sessionManagement");
046            private static final Collection.Key SESSION_TIMEOUT = KeyImpl.intern("sessionTimeout");
047            private static final Collection.Key CLIENT_TIMEOUT = KeyImpl.intern("clientTimeout");
048            private static final Collection.Key SET_CLIENT_COOKIES = KeyImpl.intern("setClientCookies");
049            private static final Collection.Key SET_DOMAIN_COOKIES = KeyImpl.intern("setDomainCookies");
050            private static final Collection.Key SCRIPT_PROTECT = KeyImpl.intern("scriptProtect");
051            private static final Collection.Key MAPPINGS = KeyImpl.intern("mappings");
052            private static final Collection.Key CUSTOM_TAG_PATHS = KeyImpl.intern("customtagpaths");
053            private static final Collection.Key COMPONENT_PATHS = KeyImpl.intern("componentpaths");
054            private static final Collection.Key SECURE_JSON_PREFIX = KeyImpl.intern("secureJsonPrefix");
055            private static final Collection.Key SECURE_JSON = KeyImpl.intern("secureJson");
056            private static final Collection.Key LOCAL_MODE = KeyImpl.intern("localMode");
057            private static final Collection.Key SESSION_CLUSTER = KeyImpl.intern("sessionCluster");
058            private static final Collection.Key CLIENT_CLUSTER = KeyImpl.intern("clientCluster");
059            
060    
061            private static final Collection.Key DEFAULT_DATA_SOURCE = KeyImpl.intern("defaultdatasource");
062            private static final Collection.Key ORM_ENABLED = KeyImpl.intern("ormenabled");
063            private static final Collection.Key ORM_SETTINGS = KeyImpl.intern("ormsettings");
064            
065            
066            private ComponentAccess component;
067            private ConfigWebImpl ci;
068    
069            private String name=null;
070            
071            private boolean setClientCookies;
072            private boolean setDomainCookies;
073            private boolean setSessionManagement;
074            private boolean setClientManagement;
075            private TimeSpan sessionTimeout;
076            private TimeSpan clientTimeout;
077            private TimeSpan applicationTimeout;
078            private int loginStorage=Scope.SCOPE_COOKIE;
079            private int scriptProtect;
080            private String defaultDataSource;
081            private int localMode;
082            private short sessionType;
083            private boolean sessionCluster;
084            private boolean clientCluster;
085            
086    
087            private String clientStorage;
088            private String sessionStorage;
089            private String secureJsonPrefix="//";
090            private boolean secureJson; 
091            private Mapping[] mappings;
092            private Mapping[] ctmappings;
093            private Mapping[] cmappings;
094            private Properties s3;
095            
096            private boolean initApplicationTimeout;
097            private boolean initSessionTimeout;
098            private boolean initClientTimeout;
099            private boolean initSetClientCookies;
100            private boolean initSetClientManagement;
101            private boolean initSetDomainCookies;
102            private boolean initSetSessionManagement;
103            private boolean initScriptProtect;
104            private boolean initClientStorage;
105            private boolean initSecureJsonPrefix;
106            private boolean initSecureJson;
107            private boolean initSessionStorage;
108            private boolean initSessionCluster;
109            private boolean initClientCluster;
110            private boolean initLoginStorage;
111            private boolean initSessionType;
112            private boolean initMappings;
113            private boolean initCTMappings;
114            private boolean initCMappings;
115            private boolean initLocalMode;
116            private boolean initS3;
117            private boolean ormEnabled;
118            private ORMConfiguration ormConfig;
119            private String ormDatasource;
120                    
121            public ModernApplicationContext(PageContext pc, ComponentAccess cfc, RefBoolean throwsErrorWhileInit) {
122                    ci = ((ConfigWebImpl)pc.getConfig());
123            setClientCookies=ci.isClientCookies();
124            setDomainCookies=ci.isDomainCookies();
125            setSessionManagement=ci.isSessionManagement();
126            setClientManagement=ci.isClientManagement();
127            sessionTimeout=ci.getSessionTimeout();
128            clientTimeout=ci.getClientTimeout();
129            applicationTimeout=ci.getApplicationTimeout();
130            scriptProtect=ci.getScriptProtect();
131            this.defaultDataSource=ci.getDefaultDataSource();
132            this.localMode=ci.getLocalMode();
133            this.sessionType=ci.getSessionType();
134            this.sessionCluster=ci.getSessionCluster();
135            this.clientCluster=ci.getClientCluster();
136            
137            
138            
139                    this.component=cfc;
140                    
141                    pc.addPageSource(component.getPageSource(), true);
142                    try {
143                            
144                    
145    
146    
147                            
148                            /////////// ORM /////////////////////////////////
149                            reinitORM(pc);
150                            
151                            
152                            throwsErrorWhileInit.setValue(false);
153                    }
154                    catch(Throwable t) {
155                            throwsErrorWhileInit.setValue(true);
156                            pc.removeLastPageSource(true);
157                    }
158            }
159    
160    
161            
162            public void reinitORM(PageContext pc) throws PageException {
163    
164                    // datasource
165                    Object o = get(component,KeyImpl.DATA_SOURCE,null);
166                    if(o!=null) {
167                            String ds;
168                            if(Decision.isStruct(o)) {
169                                    Struct sct = Caster.toStruct(o);
170                                    ds=Caster.toString(sct.get(KeyConstants._name));
171                            }
172                            else ds = Caster.toString(o);
173                            this.defaultDataSource = ds;
174                            this.ormDatasource = ds;
175                    }
176    
177                    // default datasource
178                    o=get(component,DEFAULT_DATA_SOURCE,null);
179                    if(o!=null) this.defaultDataSource =Caster.toString(o);
180                    
181                    // ormenabled
182                    o = get(component,ORM_ENABLED,null);
183                    if(o!=null && Caster.toBooleanValue(o,false)){
184                            this.ormEnabled=true;
185                            
186                            // settings
187                            o=get(component,ORM_SETTINGS,null);
188                            Struct settings;
189                            if(o instanceof Struct) settings=(Struct) o;
190                            else    settings=new StructImpl();
191                            AppListenerUtil.setORMConfiguration(pc, this, settings);
192                    }
193            }
194    
195    
196    
197            /**
198             * @see railo.runtime.util.ApplicationContext#hasName()
199             */
200            public boolean hasName() {
201                    return true;//!StringUtil.isEmpty(getName());
202            }
203            
204            /**
205             * @see railo.runtime.util.ApplicationContext#getName()
206             */
207            public String getName() {
208                    if(this.name==null) {
209                            this.name=Caster.toString(get(component,KeyImpl.NAME,""),"");
210                    }
211                    return name;
212            }
213    
214            /**
215             * @see railo.runtime.util.ApplicationContext#getLoginStorage()
216             */
217            public int getLoginStorage() {
218                    if(!initLoginStorage) {
219                            String str=null;
220                            Object o = get(component,LOGIN_STORAGE,null);
221                            if(o!=null){ 
222                                    str=Caster.toString(o,null);
223                                    if(str!=null)loginStorage=AppListenerUtil.translateLoginStorage(str,loginStorage);
224                            }
225                            initLoginStorage=true; 
226                    }
227                    return loginStorage;
228            }
229    
230            /**
231             * @see railo.runtime.util.ApplicationContext#getApplicationTimeout()
232             */
233            public TimeSpan getApplicationTimeout() {
234                    if(!initApplicationTimeout) {
235                            Object o=get(component,APPLICATION_TIMEOUT,null);
236                            if(o!=null)applicationTimeout=Caster.toTimespan(o,applicationTimeout);
237                            initApplicationTimeout=true;
238                    }
239                    return applicationTimeout;
240            }
241    
242            /**
243             * @see railo.runtime.util.ApplicationContext#getSessionTimeout()
244             */
245            public TimeSpan getSessionTimeout() {
246                    if(!initSessionTimeout) {
247                            Object o=get(component,SESSION_TIMEOUT,null);
248                            if(o!=null)sessionTimeout=Caster.toTimespan(o,sessionTimeout);
249                            initSessionTimeout=true;
250                    }
251                    return sessionTimeout;
252            }
253    
254            /**
255             * @see railo.runtime.listener.ApplicationContextPro#getClientTimeout()
256             */
257            public TimeSpan getClientTimeout() {
258                    if(!initClientTimeout) {
259                            Object o=get(component,CLIENT_TIMEOUT,null);
260                            if(o!=null)clientTimeout=Caster.toTimespan(o,clientTimeout);
261                            initClientTimeout=true;
262                    }
263                    return clientTimeout;
264            }
265    
266            /**
267             * @see railo.runtime.util.ApplicationContext#isSetClientCookies()
268             */
269            public boolean isSetClientCookies() {
270                    if(!initSetClientCookies) {
271                            Object o = get(component,SET_CLIENT_COOKIES,null);
272                            if(o!=null)setClientCookies=Caster.toBooleanValue(o,setClientCookies);
273                            initSetClientCookies=true;
274                    }
275                    return setClientCookies;
276            }
277    
278            /**
279             * @see railo.runtime.util.ApplicationContext#isSetClientManagement()
280             */
281            public boolean isSetClientManagement() {
282                    if(!initSetClientManagement) {
283                            Object o = get(component,CLIENT_MANAGEMENT,null);
284                            if(o!=null)setClientManagement=Caster.toBooleanValue(o,setClientManagement);
285                            initSetClientManagement=true;
286                    }
287                    return setClientManagement;
288            }
289    
290            /**
291             * @see railo.runtime.util.ApplicationContext#isSetDomainCookies()
292             */
293            public boolean isSetDomainCookies() {
294                    if(!initSetDomainCookies) {
295                            Object o = get(component,SET_DOMAIN_COOKIES,null);
296                            if(o!=null)setDomainCookies=Caster.toBooleanValue(o,setDomainCookies);
297                            initSetDomainCookies=true;
298                    }
299                    return setDomainCookies;
300            }
301    
302            /**
303             * @see railo.runtime.util.ApplicationContext#isSetSessionManagement()
304             */
305            public boolean isSetSessionManagement() {
306                    if(!initSetSessionManagement) {
307                            Object o = get(component,SESSION_MANAGEMENT,null);
308                            if(o!=null)setSessionManagement=Caster.toBooleanValue(o,setSessionManagement);
309                            initSetSessionManagement=true; 
310                    }
311                    return setSessionManagement;
312            }
313    
314            /**
315             * @see railo.runtime.util.ApplicationContext#getClientstorage()
316             */
317            public String getClientstorage() {
318                    if(!initClientStorage) {
319                            Object o=get(component,CLIENT_STORAGE,null);
320                            if(o!=null)clientStorage=Caster.toString(o,clientStorage);
321                            initClientStorage=true;
322                    }
323                    return clientStorage;
324            }
325    
326            /**
327             * @see railo.runtime.util.ApplicationContext#getScriptProtect()
328             */
329            public int getScriptProtect() {
330                    if(!initScriptProtect) {
331                            String str=null;
332                            Object o = get(component,SCRIPT_PROTECT,null);
333                            if(o!=null){ 
334                                    str=Caster.toString(o,null);
335                                    if(str!=null)scriptProtect=AppListenerUtil.translateScriptProtect(str);
336                            }
337                            initScriptProtect=true; 
338                    }
339                    return scriptProtect;
340            }
341    
342            /**
343             * @see railo.runtime.util.ApplicationContext#getSecureJsonPrefix()
344             */
345            public String getSecureJsonPrefix() {
346                    if(!initSecureJsonPrefix) {
347                            Object o=get(component,SECURE_JSON_PREFIX,null);
348                            if(o!=null)secureJsonPrefix=Caster.toString(o,secureJsonPrefix);
349                            initSecureJsonPrefix=true;
350                    }
351                    return secureJsonPrefix;
352            }
353    
354            /**
355             * @see railo.runtime.util.ApplicationContext#getSecureJson()
356             */
357            public boolean getSecureJson() {
358                    if(!initSecureJson) {
359                            Object o = get(component,SECURE_JSON,null);
360                            if(o!=null)secureJson=Caster.toBooleanValue(o,secureJson);
361                            initSecureJson=true; 
362                    }
363                    return secureJson;
364            }
365    
366            /**
367             * @see railo.runtime.listener.ApplicationContextPro#getSessionstorage()
368             */
369            public String getSessionstorage() {
370                    if(!initSessionStorage) {
371                            Object o=get(component,SESSION_STORAGE,null);
372                            if(o!=null)sessionStorage=Caster.toString(o,sessionStorage);
373                            initSessionStorage=true;
374                    }
375                    return sessionStorage;
376            }
377    
378            /**
379             * @see railo.runtime.listener.ApplicationContextPro#getSessionCluster()
380             */
381            public boolean getSessionCluster() {
382                    if(!initSessionCluster) {
383                            Object o = get(component,SESSION_CLUSTER,null);
384                            if(o!=null)sessionCluster=Caster.toBooleanValue(o,sessionCluster);
385                            initSessionCluster=true; 
386                    }
387                    return sessionCluster;
388            }
389    
390            /**
391             * @see railo.runtime.listener.ApplicationContextPro#getClientCluster()
392             */
393            public boolean getClientCluster() {
394                    if(!initClientCluster) {
395                            Object o = get(component,CLIENT_CLUSTER,null);
396                            if(o!=null)clientCluster=Caster.toBooleanValue(o,clientCluster);
397                            initClientCluster=true; 
398                    }
399                    return clientCluster;
400            }
401    
402            /**
403             * @see railo.runtime.listener.ApplicationContextPro#getSessionType()
404             */
405            public short getSessionType() {
406                    if(!initSessionType) {
407                            String str=null;
408                            Object o = get(component,SESSION_TYPE,null);
409                            if(o!=null){ 
410                                    str=Caster.toString(o,null);
411                                    if(str!=null)sessionType=AppListenerUtil.toSessionType(str, sessionType);
412                            }
413                            initSessionType=true; 
414                    }
415                    return sessionType;
416            }
417    
418            /**
419             * @see railo.runtime.util.ApplicationContext#getMappings()
420             */
421            public Mapping[] getMappings() {
422                    if(!initMappings) {
423                            Object o = get(component,MAPPINGS,null);
424                            if(o!=null)mappings=AppListenerUtil.toMappings(ci,o,mappings);
425                            initMappings=true; 
426                    }
427                    return mappings;
428            }
429    
430            /**
431             * @see railo.runtime.util.ApplicationContext#getCustomTagMappings()
432             */
433            public Mapping[] getCustomTagMappings() {
434                    if(!initCTMappings) {
435                            Object o = get(component,CUSTOM_TAG_PATHS,null);
436                            if(o!=null)ctmappings=AppListenerUtil.toCustomTagMappings(ci,o,ctmappings);
437                            initCTMappings=true; 
438                    }
439                    return ctmappings;
440            }
441    
442            /**
443             * @see railo.runtime.listener.ApplicationContextPro#getComponentMappings()
444             */
445            public Mapping[] getComponentMappings() {
446                    if(!initCMappings) {
447                            Object o = get(component,COMPONENT_PATHS,null);
448                            if(o!=null)cmappings=AppListenerUtil.toCustomTagMappings(ci,o,cmappings);
449                            initCMappings=true; 
450                    }
451                    return cmappings;
452            }
453    
454            /**
455             * @see railo.runtime.listener.ApplicationContextPro#getLocalMode()
456             */
457            public int getLocalMode() {
458                    if(!initLocalMode) {
459                            Object o = get(component,LOCAL_MODE,null);
460                            if(o!=null)localMode=AppListenerUtil.toLocalMode(o, localMode);
461                            initLocalMode=true; 
462                    }
463                    return localMode;
464            }
465    
466            /**
467             * @see railo.runtime.listener.ApplicationContextPro#getS3()
468             */
469            public Properties getS3() {
470                    if(!initS3) {
471                            Object o = get(component,KeyImpl.S3,null);
472                            if(o!=null && Decision.isStruct(o))s3=AppListenerUtil.toS3(Caster.toStruct(o,null));
473                            initS3=true; 
474                    }
475                    return s3;
476            }
477    
478            /**
479             * @see railo.runtime.listener.ApplicationContextPro#getDefaultDataSource()
480             */
481            public String getDefaultDataSource() {
482                    return defaultDataSource;
483            }
484    
485            /**
486             * @see railo.runtime.listener.ApplicationContextPro#isORMEnabled()
487             */
488            public boolean isORMEnabled() {
489                    return this.ormEnabled;
490            }
491    
492            /**
493             * @see railo.runtime.listener.ApplicationContextPro#getORMDatasource()
494             */
495            public String getORMDatasource() {
496                    return ormDatasource;
497            }
498    
499            /**
500             * @see railo.runtime.listener.ApplicationContextPro#getORMConfiguration()
501             */
502            public ORMConfiguration getORMConfiguration() {
503                    return ormConfig;
504            }
505    
506            /**
507             * @see railo.runtime.listener.ApplicationContextPro#getComponent()
508             */
509            public ComponentAccess getComponent() {
510                    return component;
511            }
512    
513            /**
514             * @see railo.runtime.listener.ApplicationContextPro#getCustom(railo.runtime.type.Collection.Key)
515             */
516            public Object getCustom(Key key) {
517                    try {
518                            ComponentWrap cw=ComponentWrap.toComponentWrap(Component.ACCESS_PRIVATE, component); 
519                            return cw.get(key,null);
520                    } 
521                    catch (Throwable t) {}
522                    
523                    return null;
524            }
525            
526            
527            
528    
529    
530    
531            private static Object get(ComponentAccess app, Key name,String defaultValue) {
532                    Member mem = app.getMember(Component.ACCESS_PRIVATE, name, true, false);
533                    if(mem==null) return defaultValue;
534                    return mem.getValue();
535            }
536    
537            
538    //////////////////////// SETTERS /////////////////////////
539            
540            
541            
542            /* (non-Javadoc)
543             * @see railo.runtime.util.ApplicationContextPro#setApplicationTimeout(railo.runtime.type.dt.TimeSpan)
544             */
545            public void setApplicationTimeout(TimeSpan applicationTimeout) {
546                    initApplicationTimeout=true;
547                    this.applicationTimeout=applicationTimeout;
548            }
549    
550            /* (non-Javadoc)
551             * @see railo.runtime.util.ApplicationContextPro#setSessionTimeout(railo.runtime.type.dt.TimeSpan)
552             */
553            public void setSessionTimeout(TimeSpan sessionTimeout) {
554                    initSessionTimeout=true;
555                    this.sessionTimeout=sessionTimeout;
556            }
557    
558            /* (non-Javadoc)
559             * @see railo.runtime.util.ApplicationContextPro#setClientTimeout(railo.runtime.type.dt.TimeSpan)
560             */
561            public void setClientTimeout(TimeSpan clientTimeout) {
562                    initClientTimeout=true;
563                    this.clientTimeout=clientTimeout;
564            }
565    
566            /* (non-Javadoc)
567             * @see railo.runtime.util.ApplicationContextPro#setClientstorage(java.lang.String)
568             */
569            public void setClientstorage(String clientstorage) {
570                    initClientStorage=true;
571                    this.clientStorage=clientstorage;
572            }
573    
574            /* (non-Javadoc)
575             * @see railo.runtime.util.ApplicationContextPro#setSessionstorage(java.lang.String)
576             */
577            public void setSessionstorage(String sessionstorage) {
578                    initSessionStorage=true;
579                    this.sessionStorage=sessionstorage;
580            }
581    
582            /* (non-Javadoc)
583             * @see railo.runtime.util.ApplicationContextPro#setCustomTagMappings(railo.runtime.Mapping[])
584             */
585            public void setCustomTagMappings(Mapping[] customTagMappings) {
586                    initCTMappings=true;
587                    this.ctmappings=customTagMappings;
588            }
589    
590            /* (non-Javadoc)
591             * @see railo.runtime.util.ApplicationContextPro#setComponentMappings(railo.runtime.Mapping[])
592             */
593            public void setComponentMappings(Mapping[] componentMappings) {
594                    initCMappings=true;
595                    this.cmappings=componentMappings;
596            }
597    
598            /* (non-Javadoc)
599             * @see railo.runtime.util.ApplicationContextPro#setMappings(railo.runtime.Mapping[])
600             */
601            public void setMappings(Mapping[] mappings) {
602                    initMappings=true;
603                    this.mappings=mappings;
604            }
605    
606            /* (non-Javadoc)
607             * @see railo.runtime.util.ApplicationContextPro#setLoginStorage(int)
608             */
609            public void setLoginStorage(int loginStorage) {
610                    initLoginStorage=true;
611                    this.loginStorage=loginStorage;
612            }
613    
614            @Override
615            public void setDefaultDataSource(String datasource) {
616                    this.defaultDataSource=datasource;
617            }
618    
619            /* (non-Javadoc)
620             * @see railo.runtime.util.ApplicationContextPro#setScriptProtect(int)
621             */
622            public void setScriptProtect(int scriptrotect) {
623                    initScriptProtect=true;
624                    this.scriptProtect=scriptrotect;
625            }
626    
627            /* (non-Javadoc)
628             * @see railo.runtime.util.ApplicationContextPro#setSecureJson(boolean)
629             */
630            public void setSecureJson(boolean secureJson) {
631                    initSecureJson=true;
632                    this.secureJson=secureJson;
633            }
634    
635            /* (non-Javadoc)
636             * @see railo.runtime.util.ApplicationContextPro#setSecureJsonPrefix(java.lang.String)
637             */
638            public void setSecureJsonPrefix(String secureJsonPrefix) {
639                    initSecureJsonPrefix=true;
640                    this.secureJsonPrefix=secureJsonPrefix;
641            }
642    
643            /* (non-Javadoc)
644             * @see railo.runtime.util.ApplicationContextPro#setSetClientCookies(boolean)
645             */
646            public void setSetClientCookies(boolean setClientCookies) {
647                    initSetClientCookies=true;
648                    this.setClientCookies=setClientCookies;
649            }
650    
651            /* (non-Javadoc)
652             * @see railo.runtime.util.ApplicationContextPro#setSetClientManagement(boolean)
653             */
654            public void setSetClientManagement(boolean setClientManagement) {
655                    initSetClientManagement=true;
656                    this.setClientManagement=setClientManagement;
657            }
658    
659            /* (non-Javadoc)
660             * @see railo.runtime.util.ApplicationContextPro#setSetDomainCookies(boolean)
661             */
662            public void setSetDomainCookies(boolean setDomainCookies) {
663                    initSetDomainCookies=true;
664                    this.setDomainCookies=setDomainCookies;
665            }
666    
667            /* (non-Javadoc)
668             * @see railo.runtime.util.ApplicationContextPro#setSetSessionManagement(boolean)
669             */
670            public void setSetSessionManagement(boolean setSessionManagement) {
671                    initSetSessionManagement=true;
672                    this.setSessionManagement=setSessionManagement;
673            }
674    
675            /* (non-Javadoc)
676             * @see railo.runtime.util.ApplicationContextPro#setLocalMode(int)
677             */
678            public void setLocalMode(int localMode) {
679                    initLocalMode=true;
680                    this.localMode=localMode;
681            }
682    
683            /**
684             * @see railo.runtime.listener.ApplicationContextPro#setSessionType(short)
685             */
686            public void setSessionType(short sessionType) {
687                    initSessionType=true;
688                    this.sessionType=sessionType;
689            }
690    
691            /* (non-Javadoc)
692             * @see railo.runtime.util.ApplicationContextPro#setClientCluster(boolean)
693             */
694            public void setClientCluster(boolean clientCluster) {
695                    initClientCluster=true;
696                    this.clientCluster=clientCluster;
697            }
698    
699            /* (non-Javadoc)
700             * @see railo.runtime.util.ApplicationContextPro#setSessionCluster(boolean)
701             */
702            public void setSessionCluster(boolean sessionCluster) {
703                    initSessionCluster=true;
704                    this.sessionCluster=sessionCluster;
705            }
706    
707            /**
708             * @see railo.runtime.listener.ApplicationContextPro#setS3(railo.runtime.net.s3.Properties)
709             */
710            public void setS3(Properties s3) {
711                    initS3=true;
712                    this.s3=s3;
713            }
714    
715            /**
716             * @see railo.runtime.listener.ApplicationContextPro#setORMEnabled(boolean)
717             */
718            public void setORMEnabled(boolean ormEnabled) {
719                    this.ormEnabled=ormEnabled;
720            }
721    
722            public void setORMConfiguration(ORMConfiguration ormConfig) {
723                    this.ormConfig=ormConfig;
724            }
725    
726            /**
727             * @see railo.runtime.listener.ApplicationContextPro#setORMDatasource(java.lang.String)
728             */
729            public void setORMDatasource(String ormDatasource) {
730                    this.ormDatasource=ormDatasource;
731            }
732    
733            @Override
734            public Resource getSource() {
735                    return component.getPageSource().getPhyscalFile();
736            }
737    
738    
739    }