package eu.simstadt.nf4j; import java.util.Objects; /** * Export jobs are requests for CityGML models. Every valid export job has an id and a status. * * @author Marcel Bruse */ public class ExportJob extends Job { /** * Initializes a new export job instance with unknown state. This is a convenient method. * * @return Returns a new export job instance with unknown state. */ public static ExportJob getNewInstance() { return new ExportJob(JobStatus.UNKOWN); } /** * Initializes a new export job instance with unknown state and connector instance. This is a * convenient method. * * @param The nF connector which answers status requests for this job. * @return Returns a new export job instance with unknown state. */ public static ExportJob getNewInstance(NFConnector nFConnector) { ExportJob result = getNewInstance(); result.setNFConnector(nFConnector); return result; } /** * This constructor forces the job to have a defined state. * * @param status */ public ExportJob(JobStatus status) { super(status); } /** * Connects to the nF and refreshes the status of this job. If there is no nF connector set, * this operation will throw a FailedTransmissionException. * * @throws FailedTransmissionException If the connection to the nF is broken you will get some of this. */ public void updateStatus() throws FailedTransmissionException { if (Objects.nonNull(getNFConnector())) { Job job = getNFConnector().requestExportJob(getJobId()); setStatus(job.getStatus()); } else { throw new FailedTransmissionException(); } } /** * Sets the status of this job depending on the given nF status code. nF status codes will be sent * to you in http responses. * * @param statusCode The nF status code for this job. */ @Override public void setStatusForCode(int statusCode) { switch (statusCode) { case 0: setStatus(JobStatus.PENDING); break; case 10: setStatus(JobStatus.RUNNING); break; case 20: setStatus(JobStatus.FAILED); break; case 30: setStatus(JobStatus.FINISHED); break; default: setStatus(JobStatus.UNKOWN); } } /** * @return Returns true, if the job is definitely done. False, otherwise. */ public boolean isFinished() { return Objects.nonNull(getStatus()) && getStatus().equals(JobStatus.FINISHED); } }