package com.bao.lc.site.s3.commands;
import java.text.MessageFormat;
import org.apache.commons.chain.Context;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import com.bao.lc.AppConfig;
import com.bao.lc.ResMgr;
import com.bao.lc.bean.IDValuePair;
import com.bao.lc.bean.ResultCode;
import com.bao.lc.client.RequestBuilder;
import com.bao.lc.client.utils.HttpClientUtils;
import com.bao.lc.httpcommand.BasicHttpCommand;
import com.bao.lc.httpcommand.params.HttpCommandPNames;
import com.bao.lc.httpcommand.params.HttpCommandParams;
import com.bao.lc.site.s3.params.TdPNames;
import com.bao.lc.site.s3.params.TdParams;
import com.bao.lc.util.AppUtils;
public class DoLogout extends BasicHttpCommand
{
private static Log log = LogFactory.getLog(DoLogout.class);
@Override
protected IDValuePair preExecute(Context context) throws Exception
{
super.preExecute(context);
// Check if the user login?
if(!MapUtils.getBooleanValue(context, TdPNames._LOGIN_STATE, false))
{
return ResultCode.RC_USER_NOT_LOGIN;
}
String logoutURI = AppConfig.getInstance().getPropInternal("td.logout.url");
String logoutReferer = AppConfig.getInstance().getPropInternal("td.logout.referer");
RequestBuilder rb = new RequestBuilder();
rb.uriStr(logoutURI);
HttpUriRequest request = rb.create();
context.put(HttpCommandPNames.TARGET_REQUEST, request);
context.put(HttpCommandPNames.TARGET_REFERER, logoutReferer);
return ResultCode.RC_OK;
}
@Override
protected IDValuePair postExecute(Context context) throws Exception
{
HttpResponse rsp = HttpCommandParams.getResponse(context);
//Set login state
context.put(TdPNames._LOGIN_STATE, Boolean.FALSE);
//Save result
HttpClientUtils.saveToFile(rsp.getEntity(), AppUtils.getTempFilePath("logout.html"));
//No next hop
context.remove(HttpCommandPNames.TARGET_REQUEST);
context.remove(HttpCommandPNames.TARGET_REFERER);
String user = MapUtils.getString(context, TdPNames.PARAM_USER);
log.info("User [" + user + "] logout successfully.");
TdParams.getUI(context).info(MessageFormat.format(ResMgr.getString("td.msg.user.logout.ok"), user));
return ResultCode.RC_OK;
}
}