package net.sourceforge.cruisecontrol;
import java.util.Date;
import java.util.List;
import net.sourceforge.cruisecontrol.BuildLoopInformation.JmxInfo;
import net.sourceforge.cruisecontrol.BuildLoopInformation.ProjectInfo;
import net.sourceforge.cruisecontrol.util.DateUtil;
import net.sourceforge.cruisecontrol.util.ServerNameSingleton;
import org.apache.log4j.Logger;
import org.apache.tools.ant.util.DateUtils;
public class BuildLoopInformationBuilder {
private final CruiseControlController controller;
public BuildLoopInformationBuilder(CruiseControlController controller) {
this.controller = controller;
}
public BuildLoopInformation buildBuildLoopInformation() {
String serverName = ServerNameSingleton.getServerName();
return new BuildLoopInformation(getProjects(), getJmxInfo(), serverName, getTimestamp());
}
private BuildLoopInformation.ProjectInfo[] getProjects() {
List projectConfigs = controller.getProjects();
BuildLoopInformation.ProjectInfo[] projects =
new BuildLoopInformation.ProjectInfo[projectConfigs.size()];
for (int i = 0; i < projectConfigs.size(); i++) {
ProjectConfig projectConfig = (ProjectConfig) projectConfigs.get(i);
projects[i] = new ProjectInfo(
projectConfig.getName(),
projectConfig.getStatus(),
getStartTime(projectConfig));
if (projectConfig.isInState(ProjectState.BUILDING)) {
projects[i].setModifications(projectConfig.getModifications());
}
}
return projects;
}
private String getStartTime(ProjectConfig projectConfig) {
try {
String timeOnBuildLoop = projectConfig.getBuildStartTime();
if (!(timeOnBuildLoop == null || timeOnBuildLoop.trim().length() == 0)) {
return DateUtil.formatIso8601(DateUtil.parseFormattedTime(timeOnBuildLoop, "BuildStartTime"));
}
} catch (CruiseControlException e) {
Logger.getLogger(BuildLoopInformation.class).error(e);
}
return "";
}
private String getTimestamp() {
return DateUtils.format(new Date(), DateUtils.ISO8601_DATETIME_PATTERN);
}
private JmxInfo getJmxInfo() {
return new JmxInfo(ServerNameSingleton.getServerName());
}
}