package com.bao.lc.site.s3;
import org.apache.commons.chain.Chain;
import org.apache.commons.chain.Command;
import org.apache.commons.chain.Context;
import org.apache.commons.logging.Log;
import com.bao.lc.bean.IDValuePair;
import com.bao.lc.bean.ResultCode;
import com.bao.lc.httpcommand.CommandCompleteListener;
import com.bao.lc.httpcommand.impl.LogCompleteListener;
import com.bao.lc.httpcommand.params.HttpCommandParams;
public class TdWorkCompleteListener implements CommandCompleteListener
{
private CommandCompleteListener internalListener = null;
private Log uiLog = null;
public TdWorkCompleteListener(Log uiLog, Log internalLog)
{
this.uiLog = uiLog;
internalListener = new LogCompleteListener(internalLog);
}
@Override
public void commandComplete(boolean commandResult, IDValuePair rc, Command command,
Context context)
{
internalListener.commandComplete(commandResult, rc, command, context);
if(rc != ResultCode.RC_OK)
{
StringBuilder sb = new StringBuilder();
String commandName = getCommandName(command, context);
if(commandName != null)
{
sb.append("Command[").append(commandName).append("] ");
}
sb.append("Failed. Code: ").append(rc);
uiLog.error(sb.toString());
}
}
@Override
public void commandException(Exception e, Command command, Context context) throws Exception
{
internalListener.commandException(e, command, context);
StringBuilder sb = new StringBuilder();
String commandName = getCommandName(command, context);
if(commandName != null)
{
sb.append("Command[").append(commandName).append("] ");
}
sb.append("Exception");
Command exceptionCommand = HttpCommandParams.getExceptionCommand(context);
if(exceptionCommand != null)
{
sb.append(" at: ").append(exceptionCommand.getClass().getName());
}
uiLog.error(sb.toString(), e);
}
private String getCommandName(Command command, Context context)
{
while(command instanceof Chain)
{
command = HttpCommandParams.getExceptionCommand(context);
}
if(command == null)
{
return null;
}
String fqcn = command.getClass().getName();
int index = fqcn.lastIndexOf('.');
if(index >= 0)
{
return fqcn.substring(index + 1);
}
return fqcn;
}
}