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 }