private Requirement requirementDefinedByNarrativeAt(String path, Collection<Requirement> knownRequirements) { List<String> pathElements = elementsOf(path, rootPackage); List<String> featurePathElements = allButLast(pathElements); String featureName = humanize(lastOf(featurePathElements)); String parent = null; if (featurePathElements.size() >= 2) { parent = humanize(secondLastOf(featurePathElements)); } int startFromRequirementLevel = requirementsConfiguration.startLevelForADepthOf(requirementsDepth); String typeByLevel = requirementsConfiguration.getRequirementType(startFromRequirementLevel + featurePathElements.size() - 1); String type = PackageInfoNarrative.type().definedInPath(path).orElse(typeByLevel); Optional<Requirement> knownMatchingRequirement = findMatchingRequirementWithName(knownRequirements, featureName, type); if (knownMatchingRequirement.isPresent()) { knownRequirements.remove(knownMatchingRequirement); } return knownMatchingRequirement.orElse(Requirement.named(featureName).withTypeOf(type)) .withNarrative(PackageInfoNarrative.text().definedInPath(path).orElse("")) .withParent(parent) .withPath(Joiner.on("/").join(featurePathElements)); }
public FileSystemRequirementsTagProvider(String rootDirectory, EnvironmentVariables environmentVariables) { super(environmentVariables, rootDirectory); this.narrativeReader = NarrativeReader.forRootDirectory(rootDirectory) .withRequirementTypes(getRequirementTypes()); this.overviewReader = new OverviewReader(); this.requirementsConfiguration = new RequirementsConfiguration(environmentVariables); directoryPaths = rootDirectories(rootDirectory, environmentVariables); this.level = requirementsConfiguration.startLevelForADepthOf(maxDirectoryDepthIn(directoryPaths) + 1); }