package com.bao.lc.httpcommand.impl;
import org.apache.commons.chain.Command;
import org.apache.commons.chain.Context;
import com.bao.lc.httpcommand.CommandCompleteListener;
import com.bao.lc.httpcommand.HttpCommandDirector;
public class DirectorBuilder
{
private Command mMainCommand;
private Context mMainContext;
private CommandCompleteListener mMainListener;
private Command mFinalCommand;
private Context mFinalContext;
private CommandCompleteListener mFinalListener;
public DirectorBuilder mainCommand(Command command)
{
this.mMainCommand = command;
return this;
}
public DirectorBuilder mainContext(Context context)
{
this.mMainContext = context;
return this;
}
public DirectorBuilder mainListener(CommandCompleteListener listener)
{
this.mMainListener = listener;
return this;
}
public DirectorBuilder finalCommand(Command command)
{
this.mFinalCommand = command;
return this;
}
public DirectorBuilder finalContext(Context context)
{
this.mFinalContext = context;
return this;
}
public DirectorBuilder finalListener(CommandCompleteListener listener)
{
this.mFinalListener = listener;
return this;
}
public void execute() throws Exception
{
if((mFinalCommand != null && mFinalContext == null)
|| (mFinalCommand == null && mFinalContext != null))
{
throw new IllegalStateException(
"The state of final command and context is inconsistent.");
}
HttpCommandDirector director = new DefaultHttpCommandDirector();
if(mFinalCommand == null)
{
director.execute(mMainCommand, mMainContext, mMainListener);
}
else
{
director.execute(mMainCommand, mMainContext, mMainListener, mFinalCommand,
mFinalContext, mFinalListener);
}
}
}