/**
* The Logic Lab
* @author jpk Aug 25, 2007
*/
package com.tll.server.rpc;
import com.tll.common.data.LoadRequest;
import com.tll.common.data.ModelPayload;
import com.tll.common.data.Status;
import com.tll.common.data.rpc.AdminContextPayload;
import com.tll.common.data.rpc.IAdminContextService;
import com.tll.common.model.Model;
import com.tll.common.model.ModelKey;
import com.tll.common.msg.Msg.MsgAttr;
import com.tll.common.msg.Msg.MsgLevel;
import com.tll.common.search.PrimaryKeySearch;
import com.tll.server.AppContext;
import com.tll.server.RequestContext;
import com.tll.server.marshal.MarshalOptions;
import com.tll.server.marshal.Marshaler;
import com.tll.server.rpc.entity.PersistContext;
import com.tll.server.rpc.entity.PersistServiceDelegate;
/**
* AdminContextService
* @author jpk
*/
public class AdminContextService extends RpcServlet implements IAdminContextService {
private static final long serialVersionUID = 7908647379731614097L;
@Override
public AdminContextPayload getAdminContext() {
final RequestContext rc = getRequestContext();
final PersistContext mec = (PersistContext) rc.getServletContext().getAttribute(PersistContext.KEY);
final AppContext ac = (AppContext) rc.getServletContext().getAttribute(AppContext.KEY);
final Status status = new Status();
final com.tll.server.AdminContext sac =
(com.tll.server.AdminContext) rc.getSession().getAttribute(
com.tll.server.AdminContext.KEY);
if(sac == null) {
// presume not logged in yet
status.addMsg("Admin Context not found.", MsgLevel.INFO, MsgAttr.STATUS.flag);
return new AdminContextPayload(status, ac.isDebug(), ac.getEnvironment(), null, null);
}
final Marshaler entityMarshaller = mec.getMarshaler();
assert entityMarshaller != null : "No marshaler present";
final Model user = entityMarshaller.marshalEntity(sac.getUser(), new MarshalOptions(true, 1, null));
// NOTE: we want a distinct copy of the account here so we separately
// marshall the account as opposed to grabbing the nested account from the
// just marshaled user
final Model account = entityMarshaller.marshalEntity(sac.getUser().getAccount(), MarshalOptions.NON_RELATIONAL);
status.addMsg("Admin Context retrieved.", MsgLevel.INFO, MsgAttr.STATUS.flag);
return new AdminContextPayload(status, ac.isDebug(), ac.getEnvironment(), user, account);
}
@Override
public AdminContextPayload changeCurrentAccount(ModelKey accountRef) {
final RequestContext rc = getRequestContext();
final PersistServiceDelegate delegate = (PersistServiceDelegate) rc.getServletContext().getAttribute(PersistServiceDelegate.KEY);
final PersistContext mec = (PersistContext) rc.getServletContext().getAttribute(PersistContext.KEY);
final com.tll.server.AdminContext sac =
(com.tll.server.AdminContext) rc.getSession().getAttribute(com.tll.server.AdminContext.KEY);
final Marshaler em = mec.getMarshaler();
assert delegate != null && em != null && sac != null;
final ModelPayload ep = delegate.load(new LoadRequest<PrimaryKeySearch>(new PrimaryKeySearch(accountRef)));
final Status status = ep.getStatus();
status.addMsg("Admin Context current account retrieved for " + accountRef.descriptor(), MsgLevel.INFO,
MsgAttr.STATUS.flag);
return new AdminContextPayload(status, ep.getModel());
}
}