package net.thucydides.core.reports.html; import com.google.common.base.Optional; import net.thucydides.core.model.Release; import net.thucydides.core.model.ReportNamer; import net.thucydides.core.model.ReportType; import net.thucydides.core.model.TestTag; import net.thucydides.core.requirements.model.Requirement; import net.thucydides.core.util.NameConverter; public class ReportNameProvider { private final Optional<String> context; private final ReportNamer reportNamer; private final static Optional<String> NO_CONTEXT = Optional.absent(); public ReportNameProvider() { this(NO_CONTEXT, ReportType.HTML); } public ReportNameProvider(String context) { this(Optional.fromNullable(context), ReportType.HTML); } protected ReportNameProvider(Optional<String> context, ReportType type) { this.context = context; this.reportNamer = ReportNamer.forReportType(type); } public String getContext() { if(context.isPresent()) { return context.get(); } else { return ""; } } public ReportNameProvider forCSVFiles() { return new ReportNameProvider(this.context, ReportType.CSV); } public String forTestResult(String result) { return reportNamer.getNormalizedTestNameFor(prefixUsing(context) + "result_" + result); } public String forTag(String tag) { return reportNamer.getNormalizedTestNameFor(prefixUsing(context) + "tag_" + tag.toLowerCase()); } public String forTag(TestTag tag) { return reportNamer.getNormalizedTestNameFor(prefixUsing(context) + "tag_" + tag.getType().toLowerCase() + "_" + tag.getName().toLowerCase()); } public String forTagType(String tagType) { return reportNamer.getNormalizedTestNameFor(prefixUsing(context) + "tagtype_" + tagType.toLowerCase()); } public String forRequirementType(String tagType) { return reportNamer.getNormalizedTestNameFor(prefixUsing(context) + "requirement_type_" + tagType.toLowerCase()); } public ReportNameProvider withPrefix(String prefix) { return new ReportNameProvider(prefix); } public ReportNameProvider withPrefix(TestTag tag) { if (tag.equals(TestTag.EMPTY_TAG)) { return new ReportNameProvider(); } else { return new ReportNameProvider(tag.getType().toLowerCase() + ":" + tag.getName().toLowerCase()); } } private String prefixUsing(Optional <String> context) { if (context.isPresent()) { return "context_" + NameConverter.underscore(context.get()) + "_"; } else { return ""; } } public String forRequirement(Requirement requirement) { return reportNamer.getNormalizedTestNameFor(prefixUsing(context) + "requirement_" + requirement.qualifiedName()); } public String forRelease(Release release) { return reportNamer.getNormalizedTestNameFor(prefixUsing(context) + "release_" + release.getName()); } public String forRelease(String releaseName) { return reportNamer.getNormalizedTestNameFor(prefixUsing(context) + "release_" + releaseName); } }