/* * Copyright (c) 2013 David Boissier * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.codinjutsu.tools.jenkins.model; import org.codinjutsu.tools.jenkins.util.DateUtil; import org.codinjutsu.tools.jenkins.util.GuiUtil; import javax.swing.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; public class Build { public static final Map<BuildStatusEnum, Icon> ICON_BY_BUILD_STATUS_MAP = new HashMap<BuildStatusEnum, Icon>(); private String url; private Date buildDate; private int number; private boolean building; private String message; private Date timestamp; private Long duration; private BuildStatusEnum status; static { ICON_BY_BUILD_STATUS_MAP.put(BuildStatusEnum.SUCCESS, GuiUtil.loadIcon("blue.png")); ICON_BY_BUILD_STATUS_MAP.put(BuildStatusEnum.STABLE, GuiUtil.loadIcon("blue.png")); ICON_BY_BUILD_STATUS_MAP.put(BuildStatusEnum.FAILURE, GuiUtil.loadIcon("red.png")); ICON_BY_BUILD_STATUS_MAP.put(BuildStatusEnum.UNSTABLE, GuiUtil.loadIcon("yellow.png")); ICON_BY_BUILD_STATUS_MAP.put(BuildStatusEnum.NULL, GuiUtil.loadIcon("grey.png")); ICON_BY_BUILD_STATUS_MAP.put(BuildStatusEnum.ABORTED, GuiUtil.loadIcon("grey.png")); ICON_BY_BUILD_STATUS_MAP.put(BuildStatusEnum.FOLDER, GuiUtil.loadIcon("folder.png")); } public static Build createBuildFromWorkspace(String buildUrl, Long number, String status, Boolean isBuilding, String buildDate, Long timestamp, Long duration) { return createBuild(buildUrl, number, status, isBuilding, buildDate, DateUtil.WORKSPACE_DATE_FORMAT, null, timestamp, duration); } public static Build createBuildFromWorkspace(String buildUrl, String number, String status, String isBuilding, String buildDate, Long timestamp, Long duration) { return createBuild(buildUrl, Long.parseLong(number), status, Boolean.parseBoolean(isBuilding), buildDate, DateUtil.WORKSPACE_DATE_FORMAT, null, timestamp, duration); } public static Build createBuildFromRss(String buildUrl, String number, String status, String isBuilding, String buildDate, String message) { return createBuild(buildUrl, Long.parseLong(number), status, Boolean.parseBoolean(isBuilding), buildDate, DateUtil.RSS_DATE_FORMAT, message, 0l, 0l); } private static Build createBuild(String buildUrl, Long number, String status, Boolean isBuilding, String buildDate, SimpleDateFormat simpleDateFormat, String message, Long timestamp, Long duration) { BuildStatusEnum buildStatusEnum = BuildStatusEnum.parseStatus(status); Date date = DateUtil.parseDate(buildDate, simpleDateFormat); return new Build(buildUrl, number.intValue(), date, buildStatusEnum, isBuilding, message, timestamp, duration); } public Build() { } private Build(String url, int number, Date buildDate, BuildStatusEnum status, boolean isBuilding, String message, Long timestamp, Long duration) { this.url = url; this.number = number; this.buildDate = buildDate; this.status = status; this.building = isBuilding; this.message = message; setTimestamp(timestamp); this.duration = duration; } public static Icon getStateIcon(String jobColor) { if (jobColor == null) { // NB: This assumes the case of rendering a folder. // TODO: handle the folder-case explicitly return ICON_BY_BUILD_STATUS_MAP.get(BuildStatusEnum.FOLDER); } BuildStatusEnum[] jobStates = BuildStatusEnum.values(); for (BuildStatusEnum jobState : jobStates) { String stateName = jobState.getColor(); if (jobColor.startsWith(stateName)) { return ICON_BY_BUILD_STATUS_MAP.get(jobState); } } return ICON_BY_BUILD_STATUS_MAP.get(BuildStatusEnum.NULL); } public Icon getStateIcon() { return ICON_BY_BUILD_STATUS_MAP.get(status); } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public BuildStatusEnum getStatus() { return status; } public void setStatus(String status) { this.status = BuildStatusEnum.parseStatus(status); } public Date getBuildDate() { return buildDate; } public void setBuildDate(String buildDate) { this.buildDate = DateUtil.parseDate(buildDate, DateUtil.WORKSPACE_DATE_FORMAT); } public Date getTimestamp() { return timestamp; } public void setTimestamp(Long timestamp) { this.timestamp = new Date(timestamp); } public Long getDuration() { return duration; } public void setDuration(Long duration) { this.duration = duration; } public boolean isBuilding() { return building; } public void setBuilding(boolean building) { this.building = building; } public boolean isAfter(Build aBuild) { return this.getNumber() > aBuild.getNumber(); } public String getMessage() { return message; } }