All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.thucydides.core.requirements.RequirementsList Maven / Gradle / Ivy

There is a newer version: 4.1.20
Show newest version
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);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy