package com.intrbiz.bergamot.updater.context;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
import com.intrbiz.balsa.engine.session.BalsaSession;
import com.intrbiz.bergamot.model.Contact;
import com.intrbiz.bergamot.model.Site;
import com.intrbiz.bergamot.model.message.api.APIObject;
public abstract class ClientContext
{
private ConcurrentMap<String, Object> vars = new ConcurrentHashMap<String, Object>();
private CopyOnWriteArrayList<OnClose> closeHandlers = new CopyOnWriteArrayList<OnClose>();
private Site site;
private BalsaSession session;
private Contact principal;
public ClientContext()
{
super();
}
public Site getSite()
{
return site;
}
public void setSite(Site site)
{
this.site = site;
}
public Contact getPrincipal()
{
return principal;
}
public void setPrincipal(Contact principal)
{
this.principal = principal;
}
public BalsaSession getSession()
{
return session;
}
public void setSession(BalsaSession session)
{
this.session = session;
}
@SuppressWarnings("unchecked")
public <T> T var(String name)
{
return (T) this.vars.get(name);
}
@SuppressWarnings("unchecked")
public <T> T removeVar(String name)
{
return (T) this.vars.remove(name);
}
public <T> T var(String name, T value)
{
if (value == null)
this.vars.remove(name);
else
this.vars.put(name, value);
return value;
}
public void onClose(OnClose close)
{
this.closeHandlers.add(close);
}
public void close()
{
for (OnClose handler : this.closeHandlers)
{
handler.onClose(this);
}
}
public abstract void send(APIObject value);
}