package permafrost.tundra.server.invoke;
import com.wm.app.b2b.server.BaseService;
import com.wm.app.b2b.server.invoke.InvokeChainProcessor;
import com.wm.app.b2b.server.invoke.InvokeManager;
import com.wm.app.b2b.server.invoke.ServiceStatus;
import com.wm.data.IData;
import com.wm.util.ServerException;
import java.util.Iterator;
/**
* An abstract base class for invoke chain processors.
*/
public abstract class AbstractInvokeChainProcessor implements InvokeChainProcessor {
/**
* Whether the processor is started or not.
*/
protected volatile boolean started = false;
/**
* Processes a service invocation.
*
* @param iterator Invocation chain.
* @param baseService The invoked service.
* @param pipeline The input pipeline for the service.
* @param serviceStatus The status of the service invocation.
* @throws ServerException If the service invocation fails.
*/
@Override
public void process(Iterator iterator, BaseService baseService, IData pipeline, ServiceStatus serviceStatus) throws ServerException {
if (iterator.hasNext()) ((InvokeChainProcessor)iterator.next()).process(iterator, baseService, pipeline, serviceStatus);
}
/**
* Returns true if this processor is started.
*
* @return True if this processor is started.
*/
public boolean isStarted() {
return started;
}
/**
* Registers this class as an invocation handler and starts processing.
*/
public synchronized void start() {
if (!started) {
started = true;
InvokeManager.getDefault().registerProcessor(this);
}
}
/**
* Unregisters this class as an invocation handler and stops processing.
*/
public synchronized void stop() {
if (started) {
started = false;
InvokeManager.getDefault().unregisterProcessor(this);
}
}
}