package org.ovirt.engine.api.restapi.types;
import java.sql.Date;
import java.util.Calendar;
import org.ovirt.engine.api.model.Job;
import org.ovirt.engine.api.model.JobStatus;
import org.ovirt.engine.api.model.User;
import org.ovirt.engine.api.restapi.utils.GuidUtils;
import org.ovirt.engine.core.common.job.JobExecutionStatus;
public class JobMapper {
@Mapping(from = org.ovirt.engine.core.common.job.Job.class, to = Job.class)
public static Job map(org.ovirt.engine.core.common.job.Job entity, Job job) {
Job model = job != null ? job : new Job();
model.setId(entity.getId().toString());
model.setDescription(entity.getDescription());
model.setStatus(mapJobStatus(entity.getStatus()));
if (entity.getOwnerId() != null) {
User user = new User();
user.setId(entity.getOwnerId().toString());
model.setOwner(user);
}
model.setStartTime(DateMapper.map(entity.getStartTime(), null));
if (entity.getEndTime() != null) {
model.setEndTime(DateMapper.map(entity.getEndTime(), null));
}
if (entity.getLastUpdateTime() != null) {
model.setLastUpdated(DateMapper.map(entity.getLastUpdateTime(), null));
}
model.setExternal(entity.isExternal());
model.setAutoCleared(entity.isAutoCleared());
return model;
}
@Mapping(from = Job.class, to = org.ovirt.engine.core.common.job.Job.class)
public static org.ovirt.engine.core.common.job.Job map(Job job, org.ovirt.engine.core.common.job.Job entity) {
org.ovirt.engine.core.common.job.Job target =
entity != null ? entity : new org.ovirt.engine.core.common.job.Job();
target.setId(GuidUtils.asGuid(job.getId()));
if (job.isSetDescription()) {
target.setDescription(job.getDescription());
}
if (job.isSetStatus()) {
target.setStatus(mapJobStatus(job.getStatus()));
}
if (job.isSetOwner()) {
target.setOwnerId(GuidUtils.asGuid(job.getOwner().getId()));
}
target.setStartTime(job.isSetStartTime() ? job.getStartTime().toGregorianCalendar().getTime()
: new Date(Calendar.getInstance().getTimeInMillis()));
target.setEndTime(job.isSetEndTime() ? job.getEndTime().toGregorianCalendar().getTime()
: new Date(Calendar.getInstance().getTimeInMillis()));
target.setLastUpdateTime(job.isSetLastUpdated() ? job.getLastUpdated().toGregorianCalendar().getTime()
: new Date(Calendar.getInstance().getTimeInMillis()));
target.setExternal(job.isSetExternal() ? job.isExternal() : true);
target.setAutoCleared(job.isSetAutoCleared() ? job.isAutoCleared() : true);
return target;
}
private static JobStatus mapJobStatus(JobExecutionStatus status) {
switch (status) {
case STARTED:
return JobStatus.STARTED;
case FINISHED:
return JobStatus.FINISHED;
case FAILED:
return JobStatus.FAILED;
case ABORTED:
return JobStatus.ABORTED;
default:
return JobStatus.UNKNOWN;
}
}
public static JobExecutionStatus mapJobStatus(JobStatus status) {
switch (status) {
case STARTED:
return JobExecutionStatus.STARTED;
case FINISHED:
return JobExecutionStatus.FINISHED;
case FAILED:
return JobExecutionStatus.FAILED;
case ABORTED:
return JobExecutionStatus.ABORTED;
default:
return JobExecutionStatus.UNKNOWN;
}
}
}