/** * Copyright 2011 Intuit Inc. All Rights Reserved */ package com.intuit.tank.api.model.v1.cloud; /* * #%L * Cloud Rest API * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import com.intuit.tank.vm.api.enumerated.JobQueueStatus; import com.intuit.tank.vm.settings.TimeUtil; /** * BrokerStatus * * @author dangleton * */ @XmlRootElement(name = "cloudVmContainer", namespace = Namespace.NAMESPACE_V1) @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "CloudVmStatusContainer", namespace = Namespace.NAMESPACE_V1, propOrder = { "statuses", "status", "startTime", "endTime", "reportTime", "jobId", "userDetails" }) public class CloudVmStatusContainer implements Serializable, Comparable<CloudVmStatusContainer> { private static final long serialVersionUID = 1L; @XmlElementWrapper(name = "statuses", namespace = Namespace.NAMESPACE_V1) @XmlElement(name = "status", namespace = Namespace.NAMESPACE_V1, required = true, nillable = false) private Set<CloudVmStatus> statuses = new HashSet<CloudVmStatus>(); @XmlElement(name = "status", namespace = Namespace.NAMESPACE_V1, required = false, nillable = false) private JobQueueStatus status = JobQueueStatus.Created; @XmlElement(name = "startTime", namespace = Namespace.NAMESPACE_V1, required = true, nillable = false) private Date startTime = new Date(); @XmlElement(name = "endTime", namespace = Namespace.NAMESPACE_V1, required = false, nillable = false) private Date endTime; @XmlElement(name = "reportTime", namespace = Namespace.NAMESPACE_V1, required = true, nillable = false) private Date reportTime = new Date(); @XmlElement(name = "jobId", namespace = Namespace.NAMESPACE_V1, required = false, nillable = false) private String jobId; @XmlElementWrapper(name = "userDetails", namespace = Namespace.NAMESPACE_V1) @XmlElement(name = "userDetail", namespace = Namespace.NAMESPACE_V1, required = true, nillable = false) private List<UserDetail> userDetails = new ArrayList<UserDetail>(); @XmlTransient private Map<Date, List<UserDetail>> detailMap = new HashMap<Date, List<UserDetail>>(); /** * @FrameworkUseOnly */ public CloudVmStatusContainer() { } /** * @param statuses */ public CloudVmStatusContainer(Set<CloudVmStatus> statuses) { this.statuses = statuses; } public JobQueueStatus getStatus() { return status; } public void setStatus(JobQueueStatus status) { this.status = status; } public void calculateUserDetails() { List<UserDetail> details = new ArrayList<UserDetail>(); Map<String, Integer> map = new HashMap<String, Integer>(); for (CloudVmStatus status : statuses) { for (UserDetail detail : status.getUserDetails()) { Integer val = map.get(detail.getScript()); if (val == null) { val = 0; } map.put(detail.getScript(), val + detail.getUsers()); } } for (Entry<String, Integer> entry : map.entrySet()) { details.add(new UserDetail(entry.getKey(), entry.getValue())); } Collections.sort(details); userDetails = details; detailMap.put(TimeUtil.normalizeToPeriod(15, new Date()), details); } /** * @return the detailMap */ public Map<Date, List<UserDetail>> getDetailMap() { return detailMap; } /** * @return the statuses */ public Set<CloudVmStatus> getStatuses() { return statuses; } /** * @return the startTime */ public Date getStartTime() { return startTime; } /** * @param startTime * the startTime to set */ public void setStartTime(Date startTime) { this.startTime = startTime; } /** * @return the endTime */ public Date getEndTime() { return endTime; } /** * @return the userDetails */ public List<UserDetail> getUserDetails() { return userDetails; } /** * @param endTime * the endTime to set */ public void setEndTime(Date endTime) { this.endTime = endTime; } /** * @return the reportTime */ public Date getReportTime() { return reportTime; } /** * @param reportTime * the reportTime to set */ public void setReportTime(Date reportTime) { this.reportTime = reportTime; } /** * @return the jobId */ public String getJobId() { return jobId; } /** * @param jobId * the jobId to set */ public void setJobId(String jobId) { this.jobId = jobId; } /** * @{inheritDoc */ @Override public int compareTo(CloudVmStatusContainer o) { if (this.startTime != null) { return this.startTime.compareTo(o.startTime); } else if (o.startTime != null) { return -1; } // both null return 0; } }