private Requirement requirementFromDirectoryName(File requirementDirectory) { String shortName = humanReadableVersionOf(requirementDirectory.getName()); List<Requirement> children = readChildrenFrom(requirementDirectory); return Requirement.named(shortName) .withType(getDefaultType(level)) .withNarrative("") .withPath(relativeDirectoryOf(requirementDirectory.getPath())) .withChildren(children); }
private Requirement storyNamed(String storyName, String path) { String shortName = humanReadableVersionOf(storyName); return Requirement.named(shortName) .withType(STORY_EXTENSION) .withNarrative(shortName) .withPath(relativeDirectoryOf(path)); }
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 Requirement merge(Requirement newRequirement) { String mergedCardNumber = isEmpty(cardNumber) ? newRequirement.cardNumber : cardNumber; String mergedDisplayName= (isEmpty(displayName) || name.equalsIgnoreCase(displayName)) ? newRequirement.displayName : displayName; String mergedNarrativeText = isEmpty(narrative.getText()) ? newRequirement.narrative.getText() : narrative.getText(); String mergedPath = isEmpty(path) ? newRequirement.path : path; String mergedFeatureFileName = isEmpty(featureFileName) ? newRequirement.featureFileName : featureFileName; List<String> mergedReleasVersions = ListUtils.union(releaseVersions, newRequirement.releaseVersions) ; List<Example> mergedExamples = ListUtils.union(examples, newRequirement.examples); List<CustomFieldValue> mergedCustomFields = ListUtils.union(customFields, newRequirement.customFields); List<Requirement> mergedChildren = mergeRequirementLists(children, newRequirement.children); return Requirement.named(name) .withOptionalParent(parent) .withOptionalCardNumber(mergedCardNumber) .withType(type) .withNarrative(mergedNarrativeText) .withPath(mergedPath) .withDisplayName(mergedDisplayName) .withReleaseVersions(mergedReleasVersions) .withExamples(mergedExamples) .withCustomFields(mergedCustomFields) .withFeatureFileyName(mergedFeatureFileName) .withChildren(mergedChildren) .withTags(tags); }
private Requirement requirementDefinedByClassNameAt(String path) { List<String> pathElements = elementsOf(path, rootPackage); String storyName = humanize(lastOf(pathElements)); String parent = null; if (pathElements.size() >= 2) { parent = humanize(secondLastOf(pathElements)); } String narrativeText = PackageInfoNarrative.text().definedInPath(path) .orElse(ClassNarrative.text().definedInPath(path).orElse("")); String narrativeType = PackageInfoNarrative.type().definedInPath(path) .orElse(ClassNarrative.type().definedInPath(path).orElse(leafRequirementTypeFrom(pathElements))); Requirement story = Requirement.named(storyName) .withType(narrativeType) .withNarrative(narrativeText) .withParent(parent) .withPath(Joiner.on("/").join(allButLast(pathElements))); return story; }
private Requirement requirementWithNarrative(File requirementDirectory, String shortName, Narrative requirementNarrative) { String displayName = getTitleFromNarrativeOrDirectoryName(requirementNarrative, shortName); String cardNumber = requirementNarrative.getCardNumber().orElse(null); String type = requirementNarrative.getType(); List<String> releaseVersions = requirementNarrative.getVersionNumbers(); List<Requirement> children = readChildrenFrom(requirementDirectory); return Requirement.named(shortName) .withOptionalDisplayName(displayName) .withOptionalCardNumber(cardNumber) .withType(type) .withNarrative(requirementNarrative.getText()) .withReleaseVersions(releaseVersions) .withPath(relativeDirectoryOf(requirementDirectory.getPath())) .withChildren(children); }
private Requirement leafRequirementWithNarrative(String shortName, String path, Narrative requirementNarrative) { String displayName = getTitleFromNarrativeOrDirectoryName(requirementNarrative, shortName); String cardNumber = requirementNarrative.getCardNumber().orElse(null); String type = requirementNarrative.getType(); List<String> releaseVersions = requirementNarrative.getVersionNumbers(); return Requirement.named(shortName) .withId(requirementNarrative.getId().orElse(path)) .withOptionalDisplayName(displayName) .withOptionalCardNumber(cardNumber) .withType(type) .withNarrative(requirementNarrative.getText()) .withPath(relativeDirectoryOf(path)) .withReleaseVersions(releaseVersions) .withTags(requirementNarrative.getTags()); }