package com.flextrade.jfixture;
import java.util.ArrayList;
class FixtureBehaviours implements BehavioursContainer {
private final FinalBuilderContainer finalBuilderContainer;
private final SpecimenBuilder rootBuilder;
private final ArrayList<FixtureBehaviour> allBehaviours = new ArrayList<FixtureBehaviour>();
public FixtureBehaviours(FinalBuilderContainer finalBuilderContainer, SpecimenBuilder rootBuilder) {
this.finalBuilderContainer = finalBuilderContainer;
this.rootBuilder = rootBuilder;
}
public void add(FixtureBehaviour behaviour) {
this.allBehaviours.add(behaviour);
this.resetFinalBuilder();
}
public boolean remove(Class<? extends FixtureBehaviour> classToRemove) {
FixtureBehaviour behaviourToRemove = find(classToRemove);
if(behaviourToRemove != null) {
this.allBehaviours.remove(behaviourToRemove);
this.resetFinalBuilder();
return true;
}
return false;
}
public <T extends FixtureBehaviour> T find(Class<T> clazz) {
for (FixtureBehaviour t : this.allBehaviours) {
if (t.getClass().equals(clazz)) {
return (T)t;
}
}
return null;
}
private void resetFinalBuilder() {
ArrayList<FixtureBehaviour> behavioursCopy = new ArrayList<FixtureBehaviour>(this.allBehaviours);
CompositeBehaviour compositeBehaviour = new CompositeBehaviour(behavioursCopy);
this.finalBuilderContainer.setFinalBuilder(compositeBehaviour.transform(this.rootBuilder));
}
}