package schedframe.scheduling; import java.util.List; import org.joda.time.DateTime; import schedframe.resources.ResourceDescription; import schedframe.resources.ResourceProvider; import schedframe.scheduling.utils.ResourceParameterName; /** * * @author Marcin Krystek * */ public class Reservation extends TimeResourceAllocation { private static final long serialVersionUID = 7837525861926610754L; protected Status status; protected DateTime creationTime; protected ResourceProvider resourceProvider; protected List reservedHosts; protected String jobId; protected String taskId; protected String userId; public Reservation(ResourceDescription allocatedResource, DateTime startTime, DateTime endTime, DateTime creationTime) { super(allocatedResource, startTime, endTime); this.creationTime = creationTime; } public Reservation(Reservation r){ super(r); this.status = r.getStatus(); this.creationTime = new DateTime(r.getCreationTime()); this.resourceProvider = r.getResourceProvider(); } public Status getStatus(){ return this.status; } public synchronized void setStatus(Status status){ this.status = status; } public ResourceProvider getResourceProvider(){ return this.resourceProvider; } public void setResourceProvider(ResourceProvider provider){ this.resourceProvider = provider; } public DateTime getCreationTime(){ return this.creationTime; } public boolean equals(Object obj){ if(obj instanceof Reservation == false) return false; if(! super.equals(obj)) return false; Reservation r = (Reservation) obj; if(creationTime != null && ! creationTime.equals(r.getCreationTime())) return false; if(resourceProvider != null && ! resourceProvider.equals(r.resourceProvider)) return false; if(status != r.getStatus()) throw new RuntimeException("Two objects, representing reservation "+ this.id + " have different status."); return true; } public String toString(){ String s = null; try { s = "reservation id/jobId/taskId/start/end: " + id + "/" + jobId + "/" + taskId + "/" + getStart() + "/" + getEnd() + " res amount: " + allocatedResource.getResourceUnit(ResourceParameterName.CPUCOUNT).getUsedAmount(); } catch (NoSuchFieldException e) { e.printStackTrace(); } return s; } public String getJobId() { return jobId; } public void setJobId(String jobId) { this.jobId = jobId; } public String getTaskId() { return taskId; } public void setTaskId(String taskId) { this.taskId = taskId; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public List getReservedHosts(){ return this.reservedHosts; } public void setReservedHosts(List list){ this.reservedHosts = list; } public enum Status{ INITIAL(), COMMITTED(), ACTIVE(), EXPIRED(), CANCELED(), FINISHED(); } }