LoggingOneSprintSimulationListener.java
package de.slothsoft.sprintsim.simulation;
import java.text.MessageFormat;
import java.util.Objects;
import java.util.function.Function;
import de.slothsoft.sprintsim.Member;
import de.slothsoft.sprintsim.Task;
import de.slothsoft.sprintsim.execution.SprintRetro;
import de.slothsoft.sprintsim.generation.SprintPlanning;
import de.slothsoft.sprintsim.io.ComponentWriter;
import de.slothsoft.sprintsim.io.TaskWriter;
import de.slothsoft.sprintsim.io.TextComponentWriter;
/**
* This {@link SimulationListener} logs the information from one sprint very detailed (and
* pretty). If you have multiple sprints consider using
* {@link LoggingSprintsSimulationListener}.
*/
class LoggingOneSprintSimulationListener implements SimulationListener {
private Member[] members;
private ComponentWriter componentWriter = new TextComponentWriter(System.out::println);
private Function<Task, String> taskNameSupplier = TaskWriter.DEFAULT_TASK_NAME_SUPPLIER;
private boolean printTasksOverview = true;
@Override
public void simulationStarted(SimulationInfo simulationInfo) {
this.componentWriter.writeTitle(Messages.getString("TeamMembersTitle")); //$NON-NLS-1$
this.members = simulationInfo.getMembers();
for (final Member member : this.members) {
this.componentWriter.writeLine(MessageFormat.format(Messages.getString("TeamMemberPattern"), //$NON-NLS-1$
member.getUserData(LoggingSimulationListener.MEMBER_DATA_NAME), member.getWorkPerformance(),
String.valueOf(member.getWorkHoursPerDay())));
}
this.componentWriter.writeEmpty();
}
@Override
public void sprintPlanned(SprintPlanning sprintPlanning) {
this.componentWriter.writeTitle(Messages.getString("SprintPlanningTitle")); //$NON-NLS-1$
this.componentWriter
.writeLine(Messages.getString("EstimatedHours") + ": " + sprintPlanning.getEstimatedHours()); //$NON-NLS-1$ //$NON-NLS-2$
this.componentWriter.writeLine(
Messages.getString("EstimatedAdditionalHours") + ": " + sprintPlanning.getEstimatedAdditionalHours()); //$NON-NLS-1$ //$NON-NLS-2$
this.componentWriter.writeEmpty();
}
@Override
public void sprintExecuted(SprintRetro sprintRetro) {
this.componentWriter.writeTitle(Messages.getString("SprintRetroTitle")); //$NON-NLS-1$
this.componentWriter.writeLine(Messages.getString("RemainingHours") + ": " + sprintRetro.getRemainingHours()); //$NON-NLS-1$ //$NON-NLS-2$
this.componentWriter.writeLine(
Messages.getString("NecessaryAdditionalHours") + ": " + sprintRetro.getNecessaryAdditionalHours()); //$NON-NLS-1$ //$NON-NLS-2$
this.componentWriter.writeEmpty();
if (this.printTasksOverview) {
this.componentWriter.writeTitle(Messages.getString("TaskOverviewTitle")); //$NON-NLS-1$
final TaskWriter taskWriter = new TaskWriter(this.componentWriter);
taskWriter.setMemberNameSupplier(
index -> (String) this.members[index].getUserData(LoggingSimulationListener.MEMBER_DATA_NAME));
taskWriter.setTaskNameSupplier(this.taskNameSupplier);
taskWriter.writeExecutionInfo(true).setWriteEstimationInfo(true);
taskWriter.writeTasks(sprintRetro.getSprint().getTasks());
}
}
@Override
public void simulationFinished(SimulationResult simulationResult) {
// nothing to do
}
public Function<Task, String> getTaskNameSupplier() {
return this.taskNameSupplier;
}
public LoggingOneSprintSimulationListener taskNameSupplier(Function<Task, String> newTaskNameSupplier) {
setTaskNameSupplier(newTaskNameSupplier);
return this;
}
public void setTaskNameSupplier(Function<Task, String> taskNameSupplier) {
this.taskNameSupplier = Objects.requireNonNull(taskNameSupplier);
}
public boolean isPrintTasksOverview() {
return this.printTasksOverview;
}
public LoggingOneSprintSimulationListener printTasksOverview(boolean newPrintTasksOverview) {
setPrintTasksOverview(newPrintTasksOverview);
return this;
}
public void setPrintTasksOverview(boolean printTasksOverview) {
this.printTasksOverview = printTasksOverview;
}
public ComponentWriter getComponentWriter() {
return this.componentWriter;
}
public LoggingOneSprintSimulationListener componentWriter(ComponentWriter newComponentWriter) {
setComponentWriter(newComponentWriter);
return this;
}
public void setComponentWriter(ComponentWriter componentWriter) {
this.componentWriter = Objects.requireNonNull(componentWriter);
}
}