package net.sourceforge.cruisecontrol.dashboard.service;
import net.sourceforge.cruisecontrol.dashboard.BuildSummary;
import net.sourceforge.cruisecontrol.dashboard.CurrentStatus;
import net.sourceforge.cruisecontrol.dashboard.utils.CCDateFormatter;
import net.sourceforge.cruisecontrol.BuildLoopInformation;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class LatestBuildSummariesService {
private HistoricalBuildSummariesService historicalBuildSummariesService;
private BuildLoopQueryService buildLoopQueryService;
public LatestBuildSummariesService(HistoricalBuildSummariesService historicalBuildSummariesService,
BuildLoopQueryService buildLoopQueryService) {
this.historicalBuildSummariesService = historicalBuildSummariesService;
this.buildLoopQueryService = buildLoopQueryService;
}
public BuildSummary getLatestProject(final String projectName) {
final BuildSummary buildSummary = this.historicalBuildSummariesService.getLatest(projectName);
final BuildLoopInformation.ProjectInfo projectInfo = buildLoopQueryService.getProjectInfo(projectName);
final String status = projectInfo.getStatus();
buildSummary.updateStatus(status);
if (CurrentStatus.BUILDING.equals(buildSummary.getCurrentStatus())) {
buildSummary.updateBuildSince(CCDateFormatter.iso8601(projectInfo.getBuildStartTime()));
}
buildSummary.setServerName(buildLoopQueryService.getServerName(buildSummary.getProjectName()));
return buildSummary;
}
public List getLatestOfProjects() {
final List<BuildSummary> allSummaries = new ArrayList<BuildSummary>();
final Map<String, String> buildLiveStatuses = buildLoopQueryService.getAllProjectsStatus();
allSummaries.addAll(historicalBuildSummariesService.createInactiveProjects());
allSummaries.addAll(historicalBuildSummariesService.createActiveProjects());
allSummaries.addAll(historicalBuildSummariesService.createDiscontinuedProjects());
for (final BuildSummary buildSummary : allSummaries) {
if (!buildLiveStatuses.containsKey(buildSummary.getProjectName())) {
continue;
} else {
buildSummary.updateStatus(buildLiveStatuses.get(buildSummary.getProjectName()));
if (CurrentStatus.BUILDING.equals(buildSummary.getCurrentStatus())) {
String time = buildLoopQueryService.getProjectInfo(
buildSummary.getProjectName()).getBuildStartTime();
buildSummary.updateBuildSince(CCDateFormatter.iso8601(time));
}
buildSummary.setServerName(buildLoopQueryService.getServerName(buildSummary.getProjectName()));
}
}
Collections.sort(allSummaries);
return allSummaries;
}
}