All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.model.HealthReport Maven / Gradle / Ivy

package hudson.model;

import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * Represents health of something (typically project).
 * A number between 0-100.
 *
 * @author connollys
 * @since 1.115
 */
@ExportedBean(defaultVisibility=2) // this is always exported as a part of Job and never on its own, so start with 2.
public class HealthReport implements Serializable, Comparable {
    private static final String HEALTH_OVER_80 = "health-80plus.gif";
    private static final String HEALTH_60_TO_79 = "health-60to79.gif";
    private static final String HEALTH_40_TO_59 = "health-40to59.gif";
    private static final String HEALTH_20_TO_39 = "health-20to39.gif";
    private static final String HEALTH_0_TO_19 = "health-00to19.gif";
    private static final String HEALTH_UNKNOWN = "empty.gif";

    /** The percentage health score (from 0 to 100 inclusive). */
    private int score;

    /**
     * The path to the icon corresponding to this health score or null to use the default icon
     * corresponding to the current health score.
     * 

* If the path begins with a '/' then it will be the absolute path, otherwise the image is assumed to be in one of * /images/16x16/, /images/24x24/ or /images/32x32/ depending on the icon * size selected by the user. */ private String iconUrl; /** The health icon's tool-tip. */ private String description; /** * Create a new HealthReport. * * @param score The percentage health score (from 0 to 100 inclusive). * @param iconUrl The path to the icon corresponding to this {@link Action}'s health or null to * display the default icon corresponding to the current health score. *

* If the path begins with a '/' then it will be the absolute path, otherwise the image is * assumed to be in one of /images/16x16/, /images/24x24/ or * /images/32x32/ depending on the icon size selected by the user. * When calculating the url to display for absolute paths, the getIconUrl(String) method * will replace /32x32/ in the path with the appropriate size. * @param description The health icon's tool-tip. */ public HealthReport(int score, String iconUrl, String description) { this.score = score; if (iconUrl == null) { if (score < 20) { this.iconUrl = HEALTH_0_TO_19; } else if (score < 40) { this.iconUrl = HEALTH_20_TO_39; } else if (score < 60) { this.iconUrl = HEALTH_40_TO_59; } else if (score < 80) { this.iconUrl = HEALTH_60_TO_79; } else { this.iconUrl = HEALTH_OVER_80; } } else { this.iconUrl = iconUrl; } this.description = description; } /** * Create a new HealthReport. * * @param score The percentage health score (from 0 to 100 inclusive). * @param description The health icon's tool-tip. */ public HealthReport(int score, String description) { this(score, null, description); } /** * Create a new HealthReport. */ public HealthReport() { this(100, HEALTH_UNKNOWN, ""); } /** * Getter for property 'score'. * * @return The percentage health score (from 0 to 100 inclusive). */ @Exported public int getScore() { return score; } /** * Setter for property 'score'. * * @param score Value to set for property 'score'. */ public void setScore(int score) { this.score = score; } /** * Getter for property 'iconUrl'. * * @return Value for property 'iconUrl'. */ public String getIconUrl() { return iconUrl; } /** * Get's the iconUrl relative to the hudson root url, for the correct size. * @param size The size, e.g. 32x32, 24x24 or 16x16. * @return The url relative to hudson's root url. */ public String getIconUrl(String size) { if (iconUrl == null) { return Hudson.RESOURCE_PATH+"/images/" + size + "/" + HEALTH_UNKNOWN; } if (iconUrl.startsWith("/")) { return iconUrl.replace("/32x32/", "/" + size + "/"); } return Hudson.RESOURCE_PATH+"/images/" + size + "/" + iconUrl; } /** * Setter for property 'iconUrl'. * * @param iconUrl Value to set for property 'iconUrl'. */ public void setIconUrl(String iconUrl) { this.iconUrl = iconUrl; } /** * Getter for property 'description'. * * @return Value for property 'description'. */ @Exported public String getDescription() { return description; } /** * Setter for property 'description'. * * @param description Value to set for property 'description'. */ public void setDescription(String description) { this.description = description; } /** * Getter for property 'aggregatedReports'. * * @return Value for property 'aggregatedReports'. */ public List getAggregatedReports() { return Collections.emptyList(); } /** * Getter for property 'aggregateReport'. * * @return Value for property 'aggregateReport'. */ public boolean isAggregateReport() { return false; } /** {@inheritDoc} */ public int compareTo(HealthReport o) { return (this.score < o.score ? -1 : (this.score == o.score ? 0 : 1)); } /** * Utility method to find the report with the lowest health. */ public static HealthReport min(HealthReport a, HealthReport b) { if (a == null && b == null) return null; if (a == null) return b; if (b == null) return a; if (a.compareTo(b) <= 0) return a; return b; } /** * Utility method to find the report with the highest health. */ public static HealthReport max(HealthReport a, HealthReport b) { if (a == null && b == null) return null; if (a == null) return b; if (b == null) return a; if (a.compareTo(b) >= 0) return a; return b; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy