public static JobDetailsUI of(Job job) {
JobInfo jobInfo = job.getJobAttempt().getInfo();
List<JobAttempt> attempts = job.getAttempts();
AccelerationDetails accelerationDetails = deserialize(Util.last(attempts).getAccelerationDetails());
return new JobDetailsUI(
job.getJobId(),
job.getJobAttempt().getDetails(),
JobResource.getPaginationURL(job.getJobId()),
attempts,
JobResource.getDownloadURL(job),
toJobFailureInfo(jobInfo),
toJobCancellationInfo(Util.last(attempts)),
job.getJobAttempt().getInfo().getDatasetVersion(),
job.hasResults(),
accelerationDetails,
jobInfo.getSpillJobDetails());
}