package com.flextrade.jfixture.builders; import com.flextrade.jfixture.NoSpecimen; import com.flextrade.jfixture.SpecimenBuilder; import com.flextrade.jfixture.SpecimenContext; import java.util.ArrayList; import java.util.Arrays; public class CompositeBuilder extends ArrayList<SpecimenBuilder> implements SpecimenBuilder { public CompositeBuilder(SpecimenBuilder... builders) { this(Arrays.asList(builders)); } public CompositeBuilder(Iterable<SpecimenBuilder> builders) { for (SpecimenBuilder builder : builders) { this.add(builder); } } @Override public Object create(Object request, SpecimenContext context) { for (SpecimenBuilder builder : this) { Object result = builder.create(request, context); if (isSpecimen(result)) { return result; } } return new NoSpecimen(); } private boolean isSpecimen(Object result) { return !(result instanceof NoSpecimen); } }