blob: 883d1208fe56f0a96eb0dc16a0eb0f7304c43bcd [file] [log] [blame]
package org.eclipse.osee.ote;
import java.io.IOException;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.osee.ote.message.event.send.OteEventMessageCallable;
import org.eclipse.osee.ote.message.event.send.OteEventMessageFuture;
import org.eclipse.osee.ote.remote.messages.JobStatus;
import org.eclipse.osee.ote.remote.messages.SerializedConfigurationAndResponse;
import org.eclipse.osee.ote.remote.messages.SerializedOTEJobStatus;
class WaitForCompletion implements OteEventMessageCallable<SerializedConfigurationAndResponse, SerializedOTEJobStatus> {
private SubProgressMonitor monitor;
private int lastUnitsWorked = 0;
private boolean firstTime = true;
private JobStatus status;
WaitForCompletion(SubProgressMonitor monitor) {
this.monitor = monitor;
}
@Override
public void call(SerializedConfigurationAndResponse transmitted, SerializedOTEJobStatus recieved, OteEventMessageFuture<?, ?> future) {
try {
this.status = recieved.getObject();
reportStatus(status, future);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private synchronized void reportStatus(JobStatus status, OteEventMessageFuture<?, ?> future) {
if(monitor != null){
if(monitor.isCanceled() || status.isJobComplete()){
monitor.done();
future.complete();
return;
}
if(firstTime){
monitor.beginTask("Configure Test Server", status.getTotalUnitsOfWork());
firstTime = false;
} else {
monitor.worked(status.getUnitsWorked() - lastUnitsWorked);
lastUnitsWorked = status.getUnitsWorked();
}
} else {
if(status.isJobComplete()){
future.complete();
return;
}
}
}
@Override
public void timeout(SerializedConfigurationAndResponse transmitted) {
System.out.println("timed out");
}
public JobStatus getStatus(){
return this.status;
}
}