net.thucydides.core.requirements.RequirementsList Maven / Gradle / Ivy
package net.thucydides.core.requirements;
import net.thucydides.core.requirements.model.Requirement;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import static java.lang.Math.max;
/**
* Provide aggregate information about a list of requirements
*/
public class RequirementsList {
private final List requirements;
protected RequirementsList(List requirements) {
this.requirements = requirements;
}
public static RequirementsList of(List requirements) {
return new RequirementsList(requirements);
}
protected int maxDepth() {
if (requirements.isEmpty()) { return 0; }
int maxDepth = 1;
for(Requirement requirement : requirements) {
maxDepth = max(1 + RequirementsList.of(requirement.getChildren()).maxDepth(), maxDepth);
}
return maxDepth;
}
public List asFlattenedList() {
List flattenedRequirements = new ArrayList<>();
for(Requirement requirement : requirements) {
flattenedRequirements.add(requirement);
if (requirement.hasChildren()) {
flattenedRequirements.addAll(RequirementsList.of(requirement.getChildren()).asFlattenedList());
}
}
return flattenedRequirements;
}
public java.util.Optional findByUniqueName(String name) {
Requirement matchingRequirement = null;
for(Requirement requirement : asFlattenedList()) {
if (requirement.getName().equalsIgnoreCase(name)) {
if (matchingRequirement != null) {
return Optional.empty();
}
matchingRequirement = requirement;
}
}
return Optional.ofNullable(matchingRequirement);
}
}