package org.genmymodel.customgen.jobs;
import java.io.File;
import java.io.IOException;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import org.apache.commons.io.FileUtils;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.genmymodel.common.api.GMMAPIRestClient;
import org.genmymodel.common.api.GMMAPIRestClient.CompilCallResult;
import org.genmymodel.customgen.project.GenMyModelProject;
import org.springframework.web.client.RestClientException;
/**
* Compilation job. This class create an eclipse Job that launches the
* compilation process.
*
* @author Vincent Aranega
*
*/
public class GMMCompileJob extends GMMCustomGenJob {
/**
* Creates a compile job.
* @param name The compilation job name.
* @param project The GenMyModel project.
*/
public GMMCompileJob(String name, GenMyModelProject project) {
super(name, project);
}
/**
* {@inheritDoc}
* Calls the API compile service.
*/
protected IStatus apiCall(File zip, IProgressMonitor monitor) {
monitor.subTask(String.format(GMMJobMessages.TASK_APICALL, "compilation"));
CompilCallResult res = null;
try {
res = GMMAPIRestClient.getInstance().POSTCompile(zip);
} catch (IOException e) {
return blockError(GMMJobMessages.ERROR_APIFETCH, e);
} catch (RestClientException e) {
return blockError(GMMJobMessages.ERROR_APICALL, e);
}
monitor.worked(3);
if (res.callResult.hasErrors()) {
return nonblockError(res.callResult.getErrors());
}
monitor.subTask(GMMJobMessages.TASK_COMPILERES);
try {
ZipFile compZip = new ZipFile(res.zip);
compZip.extractAll(new File(project.getIProject().getLocationURI())
.getAbsolutePath());
FileUtils.forceDelete(res.zip);
} catch (ZipException e) {
return blockError(GMMJobMessages.ERROR_APIDISPATCH, e);
} catch (IOException e) {
nonBlockWarning(String.format(GMMJobMessages.ERROR_DELETE, res.zip.getAbsolutePath()), e);
}
monitor.worked(2);
return Status.OK_STATUS;
}
}