01: package net.sourceforge.cruisecontrol;
02:
03: import java.net.InetAddress;
04: import java.net.UnknownHostException;
05: import java.util.Date;
06: import java.util.List;
07:
08: import net.sourceforge.cruisecontrol.BuildLoopInformation.JmxInfo;
09: import net.sourceforge.cruisecontrol.BuildLoopInformation.ProjectInfo;
10: import net.sourceforge.cruisecontrol.util.DateUtil;
11:
12: import org.apache.log4j.Logger;
13: import org.apache.tools.ant.util.DateUtils;
14:
15: public class BuildLoopInformationBuilder {
16: private final CruiseControlController controller;
17:
18: public BuildLoopInformationBuilder(
19: CruiseControlController controller) {
20: this .controller = controller;
21: }
22:
23: public BuildLoopInformation buildBuildLoopInformation() {
24: return new BuildLoopInformation(getProjects(), getJmxInfo(),
25: getServerName(), getTimestamp());
26: }
27:
28: private BuildLoopInformation.ProjectInfo[] getProjects() {
29: List projectConfigs = controller.getProjects();
30: BuildLoopInformation.ProjectInfo[] projects = new BuildLoopInformation.ProjectInfo[projectConfigs
31: .size()];
32: for (int i = 0; i < projectConfigs.size(); i++) {
33: ProjectConfig projectConfig = (ProjectConfig) projectConfigs
34: .get(i);
35: projects[i] = new ProjectInfo(projectConfig.getName(),
36: projectConfig.getStatus(),
37: getStartTime(projectConfig));
38: if (projectConfig.isInState(ProjectState.BUILDING)) {
39: projects[i].setModifications(projectConfig
40: .getModifications());
41: }
42: }
43: return projects;
44: }
45:
46: private String getStartTime(ProjectConfig projectConfig) {
47: try {
48: String timeOnBuildLoop = projectConfig.getBuildStartTime();
49: if (!(timeOnBuildLoop == null || timeOnBuildLoop.trim()
50: .length() == 0)) {
51: return DateUtil.formatIso8601(DateUtil
52: .parseFormattedTime(timeOnBuildLoop,
53: "BuildStartTime"));
54: }
55: } catch (CruiseControlException e) {
56: Logger.getLogger(BuildLoopInformation.class).error(e);
57: }
58: return "";
59: }
60:
61: private String getTimestamp() {
62: return DateUtils.format(new Date(),
63: DateUtils.ISO8601_DATETIME_PATTERN);
64: }
65:
66: private JmxInfo getJmxInfo() {
67: return new JmxInfo(getServerName());
68: }
69:
70: private String getServerName() {
71: try {
72: return InetAddress.getLocalHost().getCanonicalHostName();
73: } catch (UnknownHostException e) {
74: Logger.getLogger(BuildLoopInformation.class).error(e);
75: return "";
76: }
77: }
78: }
|