package org.cloudbees.literate.impl;
import org.cloudbees.literate.api.v1.ExecutionEnvironment;
import org.cloudbees.literate.api.v1.ProjectModel;
import org.cloudbees.literate.api.v1.ProjectModelFormatter;
import org.cloudbees.literate.api.v1.TaskCommands;
import java.util.List;
import java.util.Map;
/**
* @author Stephen Connolly
*/
public class MarkdownProjectModelFormatter extends ProjectModelFormatter {
/**
* Default constructor.
*/
public MarkdownProjectModelFormatter() {
super(MARKDOWN);
}
@Override
public String format(ProjectModel model) {
StringBuilder result = new StringBuilder();
result.append("# Project Name\n");
result.append("\n");
result.append("# Environments\n");
for (ExecutionEnvironment environment : model.getEnvironments()) {
boolean first = true;
for (String label : environment.getLabels()) {
result.append(first ? "\n* " : ", ");
result.append('`').append(label).append('`');
first = false;
}
if (!first) {
result.append("\n");
}
}
result.append("\n");
result.append("# Build\n");
result.append("\n");
for (Map.Entry<ExecutionEnvironment, List<String>> entry : model.getBuild().getCommands().entrySet()) {
boolean first = true;
for (String env : entry.getKey().getLabels()) {
result.append(first ? "* On " : ", ");
result.append('`').append(env).append('`');
first = false;
}
if (!first) {
result.append("\n\n");
}
boolean needBreakingText = false;
for (String command : entry.getValue()) {
if (needBreakingText) {
result.append(first ? "Then\n\n" : " Then\n\n");
} else {
needBreakingText = true;
}
result.append(first ? " " : " ")
.append(command.replace("\n", first ? "\n " : "\n "))
.append("\n\n");
}
}
for (String taskId : model.getTaskIds()) {
TaskCommands task = model.getTask(taskId);
if (task == null) {
continue;
}
result.append("\n");
result.append("# ").append(Character.toUpperCase(taskId.charAt(0)))
.append(taskId.substring(1)).append("\n");
result.append("\n");
boolean needBreakingText = false;
for (String command : task.getCommand()) {
if (needBreakingText) {
result.append("Then\n\n");
} else {
needBreakingText = true;
}
result.append(" ")
.append(command.replace("\n", "\n "))
.append("\n\n");
}
}
return result.toString();
}
}