package restx.factory;
/**
* User: xavierhanin
* Date: 2/9/13
* Time: 2:47 PM
*/
public abstract class StdMachineEngine<T> implements MachineEngine<T> {
private final Name<T> name;
private final int priority;
private final ComponentBox.BoxFactory boxFactory;
protected StdMachineEngine(Name<T> name, ComponentBox.BoxFactory boxFactory) {
this(name, 0, boxFactory);
}
protected StdMachineEngine(Name<T> name, int priority, ComponentBox.BoxFactory boxFactory) {
this.name = name;
this.priority = priority;
this.boxFactory = boxFactory;
}
@Override
public Name<T> getName() {
return name;
}
@Override
public int getPriority() {
return priority;
}
protected abstract T doNewComponent(SatisfiedBOM satisfiedBOM);
@Override
public ComponentBox<T> newComponent(SatisfiedBOM satisfiedBOM) {
return boxFactory.of(new NamedComponent<>(name, priority, doNewComponent(satisfiedBOM)));
}
@Override
public String toString() {
return "StdMachineEngine{" +
"name=" + name +
", priority=" + priority +
", boxFactory=" + boxFactory +
", bom=" + getBillOfMaterial() +
'}';
}
}