package railo.runtime.type.scope;
import java.util.Map;
import railo.runtime.PageContext;
import railo.runtime.engine.ThreadLocalPageContext;
import railo.runtime.functions.system.GetApplicationSettings;
import railo.runtime.listener.ApplicationContext;
import railo.runtime.type.Collection;
import railo.runtime.type.KeyImpl;
/**
* Session Scope
*/
public final class ApplicationImpl extends ScopeSupport implements Application,SharedScope {
private static final long serialVersionUID = 700830188207594563L;
private static final Collection.Key APPLICATION_NAME = KeyImpl.intern("applicationname");
private long lastAccess;
private long timeSpan;
private long created;
/**
* default constructor of the session scope
*/
public ApplicationImpl() {
super(true,"application",SCOPE_APPLICATION);
created = System.currentTimeMillis();
}
@Override
public long getLastAccess() {
return lastAccess;
}
@Override
public long getTimeSpan() {
return timeSpan;
}
@Override
public void touchBeforeRequest(PageContext pc){
ApplicationContext appContext = pc.getApplicationContext();
setEL(APPLICATION_NAME,appContext.getName());
timeSpan=appContext.getApplicationTimeout().getMillis();
lastAccess=System.currentTimeMillis();
}
public void touchAfterRequest(PageContext pc) {
// do nothing
}
@Override
public boolean isExpired() {
return (lastAccess+timeSpan)<System.currentTimeMillis();
}
/**
* @param lastAccess the lastAccess to set
*/
public void setLastAccess(long lastAccess) {
this.lastAccess = lastAccess;
}
@Override
public void touch() {
lastAccess=System.currentTimeMillis();
}
/**
* undocumented Feature in ACF
* @return
*/
public Map getApplicationSettings(){
return GetApplicationSettings.call(ThreadLocalPageContext.get());
}
@Override
public long getCreated() {
return created;
}
}