package com.lmitsoftware.ctf.model.poc; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import mobi.jenkinsci.alm.Item; import mobi.jenkinsci.model.Alignment; import mobi.jenkinsci.model.HeaderNode; import mobi.jenkinsci.model.ItemNode; import mobi.jenkinsci.model.Layout; import com.google.common.base.Objects; public class ArtifactDetail extends ItemNode { private static final HashMap<String, String> STATUS_COLOURS = new HashMap<String, String>(); static { STATUS_COLOURS.put("dev in progress", "#F37C00"); STATUS_COLOURS.put("ready to start", "#6A6A6A"); STATUS_COLOURS.put("open", "#6A6A6A"); STATUS_COLOURS.put("ready for devqa", "#222EB3"); STATUS_COLOURS.put("ready for dev qa", "#222EB3"); STATUS_COLOURS.put("incomplete", "#6A6A6A"); STATUS_COLOURS.put("wip", "#F37C00"); STATUS_COLOURS.put("devqa in progress", "#222EB3"); STATUS_COLOURS.put("done", "#095305"); STATUS_COLOURS.put("complete", "#095305"); } private static final HashMap<String, String[]> ARTIFACT_ICONS = new HashMap<String, String[]>(); private static final String[] DEFECTS_WITH_PRIORITY = new String[] { "defect_red.png", "defect_orange.png", "defect_green.png", "defect_grey.png" }; static { ARTIFACT_ICONS.put("tracker.smhs_dev_qa_defects", DEFECTS_WITH_PRIORITY); ARTIFACT_ICONS.put("tracker.blueprint_dev_qa", DEFECTS_WITH_PRIORITY); ARTIFACT_ICONS.put("tracker.backend_external_defects", DEFECTS_WITH_PRIORITY); ARTIFACT_ICONS.put("tracker.windows_phone_fe_dev_tasks_0", DEFECTS_WITH_PRIORITY); ARTIFACT_ICONS.put("tracker.windows_phone_fe_external_defect", DEFECTS_WITH_PRIORITY); ARTIFACT_ICONS.put("tracker.development_tasks", new String[] {"task.png"}); ARTIFACT_ICONS.put("tracker.bp_backlog", new String[] {"task.png"}); ARTIFACT_ICONS.put("tracker.windows_phone_fe_dev_tasks_1", new String[] {"task.png"}); ARTIFACT_ICONS.put("cards", new String[] {"card.png"}); } public ArtifactDetail(Item artifact) { super(Layout.LIST); String artifactId = artifact.id; setTitle(artifact.title); setDescription(artifact.status); setDescriptionAlign(Alignment.RIGHT); setDescriptionColor(Objects.firstNonNull( STATUS_COLOURS.get(artifact.status.toLowerCase()), "black")); setViewTitle(artifactId); setPath(artifactId); addNode("Priority", artifact.priority); addNode("Status", artifact.status); addNode("Progress", (int) (artifact.getProgress() * 100) + "%"); addNode(artifact.title); addNode(artifact.description); addNode("Submitter", artifact.submittedByFullname); addNode("Assigned to", artifact.assignedToFullname); addNode("Submit date", artifact.submittedDate); if (artifact.lastModifiedDate != null) { addNode("Last modified", artifact.lastModifiedDate); setTimestamp("" + artifact.lastModifiedDate.getTimeInMillis()); } setIconForTracker(artifact); ArrayList<Item> subItems = artifact.subItems; if (subItems.size() > 0) { addNode(new HeaderNode(subItems.get(0).isCheckItem ? "Checklist" : "Tasks")); for (Item item : subItems) { if (item.isCheckItem) { addNode(new ArtifactCheckbox(item)); } else { addNode(new ArtifactDetail(item)); } } } } private void setIconForTracker(Item artifact) { if(artifact.trackerClass == null) { return; } String[] iconNames = ARTIFACT_ICONS.get(artifact.trackerClass); if(iconNames == null || iconNames.length <= 0) { return; } String iconName; if(artifact.priority <= iconNames.length) { iconName = iconNames[artifact.priority-1]; } else { iconName = iconNames[0]; } setIcon("?image=icons/" + iconName); } private void addNode(String string, Calendar submittedDate) { if (submittedDate != null) { addNode(new ArtifactField(string, submittedDate)); } } public void addNode(String value) { if (value != null && value.trim().length() > 0) { addNode(new ArtifactField(value)); } } private void addNode(String string, String status) { if (status != null && status.trim().length() > 0) { addNode(new ArtifactField(string, status)); } } private void addNode(String string, int priority) { if (priority > 0) { addNode(new ArtifactField(string, priority)); } } }