package com.sissi.pipeline.in; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.sissi.commons.Trace; import com.sissi.context.JIDContext; import com.sissi.pipeline.Input; import com.sissi.protocol.Error; import com.sissi.protocol.Protocol; import com.sissi.protocol.Stream; import com.sissi.protocol.error.ServerError; import com.sissi.protocol.error.detail.BadRequest; /** * @author kim 2013-11-14 */ public class ChainedProcessor implements Input { private final static Error error = new ServerError().add(BadRequest.DETAIL); private final static Log log = LogFactory.getLog(ChainedProcessor.class); private final List<Input> processors; protected final boolean next; public ChainedProcessor(List<Input> processors) { this(false, processors); } /** * @param next 执行完毕后如果input返回true是否继续执行Pipeline * @param processors */ public ChainedProcessor(boolean next, List<Input> processors) { super(); this.next = next; this.processors = processors; } @Override public boolean input(JIDContext context, Protocol protocol) { try { for (Input each : this.processors) { if (!each.input(context, protocol)) { return false; } } } catch (Exception e) { log.warn(e.toString()); Trace.trace(log, e); context.write(Stream.closeWhenRunning(error)); } return this.next; } }