001    package railo.runtime.listener;
002    
003    import java.util.HashMap;
004    import java.util.Map;
005    
006    import railo.commons.io.res.Resource;
007    import railo.commons.lang.StringUtil;
008    import railo.runtime.Mapping;
009    import railo.runtime.PageContext;
010    import railo.runtime.config.Config;
011    import railo.runtime.config.ConfigImpl;
012    import railo.runtime.db.DataSource;
013    import railo.runtime.exp.ApplicationException;
014    import railo.runtime.exp.DeprecatedException;
015    import railo.runtime.exp.PageException;
016    import railo.runtime.exp.PageRuntimeException;
017    import railo.runtime.net.s3.Properties;
018    import railo.runtime.net.s3.PropertiesImpl;
019    import railo.runtime.op.Duplicator;
020    import railo.runtime.orm.ORMConfiguration;
021    import railo.runtime.rest.RestSettings;
022    import railo.runtime.type.UDF;
023    import railo.runtime.type.dt.TimeSpan;
024    import railo.runtime.type.scope.Scope;
025    import railo.runtime.type.util.ArrayUtil;
026    
027    /**
028     * 
029     */
030    public class ClassicApplicationContext extends ApplicationContextSupport {
031    
032            private static final long serialVersionUID = 940663152793150953L;
033    
034            private String name;
035        private boolean setClientCookies;
036        private boolean setDomainCookies;
037        private boolean setSessionManagement;
038        private boolean setClientManagement;
039        private TimeSpan sessionTimeout=null; 
040            private TimeSpan clientTimeout;
041        private TimeSpan applicationTimeout=null;
042        private int loginStorage=-1;
043        private String clientstorage;
044        private String sessionstorage;
045            private int scriptProtect;
046            private Mapping[] mappings;
047            private Mapping[] ctmappings;
048            private Mapping[] cmappings;
049            private boolean bufferOutput;
050            private boolean secureJson;
051            private String secureJsonPrefix="//";
052            private boolean isDefault;
053            private Object defaultDataSource;
054            private boolean ormEnabled;
055            private Object ormdatasource;
056            private ORMConfiguration config;
057            private Properties s3;
058            
059    
060            private int localMode;
061            private short sessionType;
062        private boolean sessionCluster;
063        private boolean clientCluster;
064            private Resource source;
065            private boolean triggerComponentDataMember;
066            private Map<Integer,String> defaultCaches=new HashMap<Integer, String>();
067            private Map<Integer,Boolean> sameFieldAsArrays=new HashMap<Integer, Boolean>();
068    
069            private RestSettings restSettings;
070    
071            private Resource[] restCFCLocations;
072    
073            private JavaSettingsImpl javaSettings;
074    
075            private DataSource[] dataSources;
076    
077            private UDF onMissingTemplate;
078    
079        
080        /**
081         * constructor of the class
082         * @param config
083         */
084        public ClassicApplicationContext(Config config,String name,boolean isDefault, Resource source) {
085            this.name=name;
086            setClientCookies=config.isClientCookies();
087            setDomainCookies=config.isDomainCookies();
088            setSessionManagement=config.isSessionManagement();
089            setClientManagement=config.isClientManagement();
090            sessionTimeout=config.getSessionTimeout();
091            clientTimeout=config.getClientTimeout();
092            applicationTimeout=config.getApplicationTimeout();
093            loginStorage=Scope.SCOPE_COOKIE;
094            scriptProtect=config.getScriptProtect();
095            this.isDefault=isDefault;
096            this.defaultDataSource=config.getDefaultDataSource();
097            this.localMode=config.getLocalMode();
098    
099            this.bufferOutput=((ConfigImpl)config).getBufferOutput();
100            this.sessionType=config.getSessionType();
101            this.sessionCluster=config.getSessionCluster();
102            this.clientCluster=config.getClientCluster();
103            this.source=source;
104            this.triggerComponentDataMember=config.getTriggerComponentDataMember();
105            this.restSettings=config.getRestSetting();
106            this.javaSettings=new JavaSettingsImpl();
107        }
108        
109        /**
110         * Constructor of the class, only used by duplicate method
111         */
112        private ClassicApplicationContext() {
113            
114        }
115        
116    
117            public ApplicationContext duplicate() {
118                    ClassicApplicationContext dbl = new ClassicApplicationContext();
119                    
120                    
121                    dbl.name=name;
122                    dbl.setClientCookies=setClientCookies;
123                    dbl.setDomainCookies=setDomainCookies;
124                    dbl.setSessionManagement=setSessionManagement;
125                    dbl.setClientManagement=setClientManagement;
126                    dbl.sessionTimeout=sessionTimeout;
127                    dbl.clientTimeout=clientTimeout;
128                    dbl.applicationTimeout=applicationTimeout;
129                    dbl.loginStorage=loginStorage;
130                    dbl.clientstorage=clientstorage;
131                    dbl.sessionstorage=sessionstorage;
132                    dbl.scriptProtect=scriptProtect;
133                    dbl.mappings=mappings;
134                    dbl.dataSources=dataSources;
135                    dbl.ctmappings=ctmappings;
136                    dbl.cmappings=cmappings;
137                    dbl.bufferOutput=bufferOutput;
138                    dbl.secureJson=secureJson;
139                    dbl.secureJsonPrefix=secureJsonPrefix;
140                    dbl.isDefault=isDefault;
141                    dbl.defaultDataSource=defaultDataSource;
142                    dbl.applicationtoken=applicationtoken;
143                    dbl.cookiedomain=cookiedomain;
144                    dbl.idletimeout=idletimeout;
145                    dbl.localMode=localMode;
146                    dbl.sessionType=sessionType;
147                    dbl.triggerComponentDataMember=triggerComponentDataMember;
148                    dbl.restSettings=restSettings;
149                    dbl.defaultCaches=Duplicator.duplicateMap(defaultCaches, new HashMap<Integer, String>(),false );
150                    dbl.sameFieldAsArrays=Duplicator.duplicateMap(sameFieldAsArrays, new HashMap<Integer, Boolean>(),false );
151                    
152                    dbl.ormEnabled=ormEnabled;
153                    dbl.config=config;
154                    dbl.ormdatasource=ormdatasource;
155                    dbl.sessionCluster=sessionCluster;
156                    dbl.clientCluster=clientCluster;
157                    dbl.source=source;
158                    
159                    return dbl;
160            }
161        
162        
163        @Override
164        public TimeSpan getApplicationTimeout() {
165            return applicationTimeout;
166        }
167        /**
168         * @param applicationTimeout The applicationTimeout to set.
169         */
170        public void setApplicationTimeout(TimeSpan applicationTimeout) {
171            this.applicationTimeout = applicationTimeout;
172        }
173        @Override
174        public int getLoginStorage() {
175            return loginStorage;
176        }
177        /**
178         * @param loginStorage The loginStorage to set.
179         */
180        public void setLoginStorage(int loginStorage) {
181            this.loginStorage = loginStorage;
182        }
183        
184        public void setLoginStorage(String strLoginStorage) throws ApplicationException {
185            setLoginStorage(AppListenerUtil.translateLoginStorage(strLoginStorage));
186        }
187        
188        
189        
190        @Override
191        public String getName() {
192            return name;
193        }
194        /**
195         * @param name The name to set.
196         */
197        public void setName(String name) {
198            this.name = name;
199        }
200        @Override
201        public TimeSpan getSessionTimeout() {
202            return sessionTimeout;
203        }
204        
205        /**
206         * @param sessionTimeout The sessionTimeout to set.
207         */
208        public void setSessionTimeout(TimeSpan sessionTimeout) {
209            this.sessionTimeout = sessionTimeout;
210        }
211    
212    
213        public TimeSpan getClientTimeout() {
214            return clientTimeout;
215        }
216        
217        /**
218         * @param sessionTimeout The sessionTimeout to set.
219         */
220        public void setClientTimeout(TimeSpan clientTimeout) {
221            this.clientTimeout = clientTimeout;
222        }
223        
224        @Override
225        public boolean isSetClientCookies() {
226            return setClientCookies;
227        }
228        /**
229         * @param setClientCookies The setClientCookies to set.
230         */
231        public void setSetClientCookies(boolean setClientCookies) {
232            this.setClientCookies = setClientCookies;
233        }
234        @Override
235        public boolean isSetClientManagement() {
236            return setClientManagement;
237        }
238        /**
239         * @param setClientManagement The setClientManagement to set.
240         */
241        public void setSetClientManagement(boolean setClientManagement) {
242            this.setClientManagement = setClientManagement;
243        }
244        @Override
245        public boolean isSetDomainCookies() {
246            return setDomainCookies;
247        }
248        /**
249         * @param setDomainCookies The setDomainCookies to set.
250         */
251        public void setSetDomainCookies(boolean setDomainCookies) {
252            this.setDomainCookies = setDomainCookies;
253        }
254        @Override
255        public boolean isSetSessionManagement() {
256            return setSessionManagement;
257        }
258        /**
259         * @param setSessionManagement The setSessionManagement to set.
260         */
261        public void setSetSessionManagement(boolean setSessionManagement) {
262            this.setSessionManagement = setSessionManagement;
263        }
264        @Override
265        public String getClientstorage() {
266            return clientstorage;
267        }
268        public String getSessionstorage() {
269            return sessionstorage;
270        }
271        /**
272         * @param clientstorage The clientstorage to set.
273         */
274        public void setClientstorage(String clientstorage) {
275            this.clientstorage = clientstorage;
276        }
277        public void setSessionstorage(String sessionstorage) {
278            this.sessionstorage = sessionstorage;
279        }
280    
281        @Override
282        public boolean hasName() {
283            return name!=null;
284        }
285        
286        /**
287         * @param scriptProtect The scriptProtect to set.
288         */
289        public void setScriptProtect(int scriptProtect) {
290                    this.scriptProtect=scriptProtect;
291            }
292    
293            @Override
294            public int getScriptProtect() {
295                    //if(isDefault)print.err("get:"+scriptProtect);
296                    return scriptProtect;
297            }
298    
299            
300    
301    
302            public void setMappings(Mapping[] mappings) {
303                    if(mappings.length>0)this.mappings=mappings;
304            }
305    
306            /**
307             * @return the mappings
308             */
309            public Mapping[] getMappings() {
310                    return mappings;
311            }
312    
313            public void setCustomTagMappings(Mapping[] ctmappings) {
314                    this.ctmappings=ctmappings;
315            }
316    
317            public Mapping[] getCustomTagMappings() {
318                    return ctmappings;
319            }
320    
321            public void setComponentMappings(Mapping[] cmappings) {
322                    this.cmappings=cmappings;
323            }
324    
325            public Mapping[] getComponentMappings() {
326                    return cmappings;
327            }
328    
329            public void setSecureJson(boolean secureJson) {
330                    this.secureJson=secureJson;
331            }
332    
333            /**
334             * @return the secureJson
335             */
336            public boolean getSecureJson() {
337                    return secureJson;
338            }
339            
340            public boolean getBufferOutput(){
341                    return bufferOutput;
342            }
343            
344            public void setBufferOutput(boolean bufferOutput){
345                    this.bufferOutput= bufferOutput;
346            }
347            
348            public void setSecureJsonPrefix(String secureJsonPrefix) {
349                    this.secureJsonPrefix=secureJsonPrefix;
350            }
351    
352            /**
353             * @return the secureJsonPrefix
354             */
355            public String getSecureJsonPrefix() {
356                    return secureJsonPrefix;
357            }
358    
359            @Override
360            public String getDefaultDataSource() {
361                    throw new PageRuntimeException(new DeprecatedException("this method is no longer supported!"));
362            }
363            
364            @Override
365            public Object getDefDataSource() {
366                    return defaultDataSource;
367            }
368    
369            @Override
370            public void setDefaultDataSource(String defaultDataSource) {
371                    this.defaultDataSource = defaultDataSource;
372            }
373    
374            @Override
375            public void setDefDataSource(Object defaultDataSource) {
376                    this.defaultDataSource = defaultDataSource;
377            }
378    
379            public boolean isORMEnabled() {
380                    return ormEnabled;
381            }
382    
383            public String getORMDatasource() {
384                    throw new PageRuntimeException(new DeprecatedException("this method is no longer supported!"));
385            }
386    
387            public Object getORMDataSource() {
388                    return ormdatasource;
389            }
390    
391            public ORMConfiguration getORMConfiguration() {
392                    return config;
393            }
394            public void setORMConfiguration(ORMConfiguration config) {
395                    this.config= config;
396            }
397    
398            public void setORMEnabled(boolean ormEnabled) {
399                    this.ormEnabled=ormEnabled;
400            }
401    
402            /**
403             * @return the s3
404             */
405            public Properties getS3() {
406                    if(s3==null) s3=new PropertiesImpl();
407                    return s3;
408            }
409    
410            /**
411             * @return the localMode
412             */
413            public int getLocalMode() {
414                    return localMode;
415            }
416    
417    
418            /**
419             * @param localMode the localMode to set
420             */
421            public void setLocalMode(int localMode) {
422                    this.localMode = localMode;
423            }
424    
425    
426    
427        /**
428             * @return the sessionType
429             */
430            public short getSessionType() {
431                    return sessionType;
432            }
433    
434        /**
435             * @return the sessionType
436             */
437            public void setSessionType(short sessionType) {
438                    this.sessionType= sessionType;
439            }
440    
441    
442            /**
443             * @return the sessionCluster
444             */
445            public boolean getSessionCluster() {
446                    return sessionCluster;
447            }
448    
449    
450            /**
451             * @param sessionCluster the sessionCluster to set
452             */
453            public void setSessionCluster(boolean sessionCluster) {
454                    this.sessionCluster = sessionCluster;
455            }
456    
457    
458            /**
459             * @return the clientCluster
460             */
461            public boolean getClientCluster() {
462                    return clientCluster;
463            }
464    
465    
466            /**
467             * @param clientCluster the clientCluster to set
468             */
469            public void setClientCluster(boolean clientCluster) {
470                    this.clientCluster = clientCluster;
471            }
472    
473    
474            public void setS3(Properties s3) {
475                    this.s3=s3;
476            }
477    
478            @Override
479            public void setORMDatasource(String ormdatasource) {
480                    this.ormdatasource=ormdatasource;
481            }
482    
483            @Override
484            public void setORMDataSource(Object ormdatasource) {
485                    this.ormdatasource=ormdatasource;
486            }
487    
488            @Override
489            public void reinitORM(PageContext pc) throws PageException {
490                    // do nothing
491            }
492    
493            @Override
494            public Resource getSource() {
495                    return source;
496            }
497    
498            @Override
499            public boolean getTriggerComponentDataMember() {
500                    return triggerComponentDataMember;
501            }
502    
503            @Override
504            public void setTriggerComponentDataMember(boolean triggerComponentDataMember) {
505                    this.triggerComponentDataMember=triggerComponentDataMember;
506            }
507    
508            @Override
509            public void setDefaultCacheName(int type,String name) {
510                    if(StringUtil.isEmpty(name,true)) return;
511                    defaultCaches.put(type, name.trim());
512            }
513            
514            @Override
515            public String getDefaultCacheName(int type) {
516                    return defaultCaches.get(type);
517            }
518    
519            public void setSameFieldAsArray(int scope, boolean sameFieldAsArray) {
520                    sameFieldAsArrays.put(scope, sameFieldAsArray);
521            }
522            
523            
524            @Override
525            public boolean getSameFieldAsArray(int scope) {
526                    Boolean b= sameFieldAsArrays.get(scope);
527                    if(b==null) return false;
528                    return b.booleanValue();
529            }
530    
531            @Override
532            public RestSettings getRestSettings() {
533                    return restSettings;
534            }
535    
536            public void setRestSettings(RestSettings restSettings) {
537                    this.restSettings=restSettings;
538            }
539            
540    
541            public void setRestCFCLocations(Resource[] restCFCLocations) {
542                    this.restCFCLocations = restCFCLocations;
543            }
544    
545            @Override
546            public Resource[] getRestCFCLocations() {
547                    return restCFCLocations;
548            }
549    
550            @Override
551            public JavaSettings getJavaSettings() {
552                    return javaSettings;
553            }
554    
555            @Override
556            public DataSource[] getDataSources() {
557                    return dataSources;
558            }
559    
560            @Override
561            public void setDataSources(DataSource[] dataSources) {
562                    if(!ArrayUtil.isEmpty(dataSources))this.dataSources=dataSources;
563            }
564    
565            public void setOnMissingTemplate(UDF onMissingTemplate) {
566                    this.onMissingTemplate=onMissingTemplate;
567            }
568    
569            public UDF getOnMissingTemplate() { 
570                    return onMissingTemplate;
571            }
572    }