package com.sissi.pipeline.out;
import java.util.ArrayList;
import java.util.List;
import com.sissi.context.JIDContext;
import com.sissi.pipeline.Output;
import com.sissi.pipeline.OutputBuilder;
import com.sissi.pipeline.Transfer;
import com.sissi.protocol.Element;
/**
* @author kim 2013年12月6日
*/
public class ChainedOutputBuilder implements OutputBuilder {
private final List<OutputBuilder> builders;
public ChainedOutputBuilder(List<OutputBuilder> builders) {
super();
this.builders = builders;
}
@Override
public Output build(Transfer transfer) {
ChainedOutput output = new ChainedOutput();
for (OutputBuilder builder : this.builders) {
output.add(builder.build(transfer));
}
return output;
}
private class ChainedOutput implements Output {
private List<Output> outputs;
public ChainedOutput() {
super();
}
public ChainedOutput add(Output output) {
if (this.outputs == null) {
this.outputs = new ArrayList<Output>();
}
this.outputs.add(output);
return this;
}
@Override
public boolean output(JIDContext context, Element element) {
for (Output output : this.outputs) {
boolean next = output.output(context, element);
if (!next) {
return next;
}
}
return true;
}
@Override
public Output close() {
for (Output output : this.outputs) {
output.close();
}
return this;
}
}
}