blob: 552356b058537c856901dd93650962864e0afc8d [file] [log] [blame]
package org.eclipse.osee.ote.internal;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import org.eclipse.osee.framework.jdk.core.util.Lib;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.ote.ConfigurationStatus;
import org.eclipse.osee.ote.OTEApi;
import org.eclipse.osee.ote.OTEStatusCallback;
import org.eclipse.osee.ote.endpoint.OteUdpEndpoint;
import org.eclipse.osee.ote.endpoint.OteUdpEndpointSender;
import org.eclipse.osee.ote.message.event.OteEventMessageUtil;
import org.eclipse.osee.ote.remote.messages.ConfigurationAndResponse;
import org.eclipse.osee.ote.remote.messages.JobStatus;
import org.eclipse.osee.ote.remote.messages.SerializedConfigurationAndResponse;
import org.eclipse.osee.ote.remote.messages.SerializedOTEJobStatus;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.osgi.service.event.EventHandler;
public class ConfigureAndResponseListener implements EventHandler {
private final OTEApi oteApi;
private final OteUdpEndpoint endpoint;
public ConfigureAndResponseListener(EventAdmin eventAdmin, OteUdpEndpoint endpoint, OTEApi oteApi) {
this.oteApi = oteApi;
this.endpoint = endpoint;
}
@Override
public void handleEvent(Event arg0) {
SerializedConfigurationAndResponse serialized = new SerializedConfigurationAndResponse(OteEventMessageUtil.getBytes(arg0));
try {
ConfigurationAndResponse config = serialized.getObject();
OteUdpEndpointSender oteEndpointSender = endpoint.getOteEndpointSender(serialized.getHeader().getSourceInetSocketAddress());
endpoint.addBroadcast(oteEndpointSender);
try{
String id = (String) oteApi.getIHostTestEnvironment().getProperties().getProperty("id");
/*
* Ensure that the id matches so that we are talking with the server we intended to talk to
*/
if(id != null && config.getId().equals(id)){
if(config.install()){
oteApi.loadConfiguration(config.getConfiguration(), new Status(oteEndpointSender));
} else {
oteApi.downloadConfigurationJars(config.getConfiguration(), new Status(oteEndpointSender));
}
} else {
handleException(new Exception("Bad server id."), oteEndpointSender);
}
} catch (ExecutionException e) {
handleException(e, oteEndpointSender);
}
}catch (Throwable e) {
handleException(e);
}
}
private void handleException(Throwable e, OteUdpEndpointSender oteEndpointSender) {
SerializedOTEJobStatus message = new SerializedOTEJobStatus();
JobStatus jobStatus = new JobStatus();
StringBuilder sb = new StringBuilder();
sb.append("error: ").append(message).append("\n").append(Lib.exceptionToString(e)).append("\n");
jobStatus.setErrorLog(sb.toString());
jobStatus.setSuccess(false);
jobStatus.setJobComplete(true);
try {
message.setObject(jobStatus);
oteEndpointSender.send(message);
} catch (IOException e1) {
e1.printStackTrace();
}
}
private void handleException(Throwable e) {
OseeLog.log(getClass(), Level.SEVERE, e);
}
private static class Status implements OTEStatusCallback<ConfigurationStatus> {
private OteUdpEndpointSender oteEndpointSender;
private SerializedOTEJobStatus message;
private JobStatus jobStatus;
private StringBuilder sb;
public Status(OteUdpEndpointSender oteEndpointSender) {
this.oteEndpointSender = oteEndpointSender;
this.message = new SerializedOTEJobStatus();
this.jobStatus = new JobStatus();
sb = new StringBuilder();
}
private void setAndSend(){
try {
message.setObject(jobStatus);
oteEndpointSender.send(message);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void complete(ConfigurationStatus done) {
this.jobStatus.setSuccess(done.isSuccess());
this.jobStatus.setJobComplete(true);
this.jobStatus.setErrorLog(done.getMessage());
setAndSend();
}
@Override
public void setTotalUnitsOfWork(int totalUnitsOfWork) {
jobStatus.setTotalUnitsOfWork(totalUnitsOfWork);
setAndSend();
}
@Override
public void incrememtUnitsWorked(int count) {
jobStatus.setUnitsWorked(jobStatus.getUnitsWorked() + count);
setAndSend();
}
@Override
public void log(String message) {
sb.append("log: ").append(message).append("\n");
}
@Override
public void error(String message, Throwable th) {
sb.append("error: ").append(message).append("\n").append(Lib.exceptionToString(th)).append("\n");
}
@Override
public void error(String message) {
sb.append("error: ").append(message).append("\n");
}
}
}