You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.3 KiB
Java

package org.gcube.data.transfer.plugin;
import org.gcube.data.transfer.model.ExecutionReport;
import org.gcube.data.transfer.model.ExecutionReport.ExecutionReportFlag;
import org.gcube.data.transfer.model.PluginInvocation;
import org.gcube.data.transfer.plugin.fails.ParameterException;
import org.gcube.data.transfer.plugin.fails.PluginCleanupException;
import org.gcube.data.transfer.plugin.fails.PluginException;
import org.gcube.data.transfer.plugin.fails.PluginExecutionException;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class AbstractPlugin{
protected PluginInvocation invocation;
public AbstractPlugin(PluginInvocation invocation) {
this.invocation=invocation;
}
public ExecutionReport execute() {
log.trace("Executing : {}",invocation);
try{
log.debug("Calling run method, invocation is {} ",invocation);
ExecutionReport report=this.run();
log.debug("Calling cleanup, report was {}",report);
this.cleanup();
log.trace("Returning report {} for invocation {} ",report,invocation);
return report;
}catch(Throwable t){
log.debug("Thrown exception",t);
return fromException(this.invocation,t);
}
}
// Execution
public abstract ExecutionReport run()throws PluginExecutionException;
public abstract void cleanup() throws PluginCleanupException;
protected static ExecutionReport fromException(PluginInvocation invocation,Throwable t){
if(t instanceof PluginException){
if(t instanceof ParameterException) return new ExecutionReport(invocation, t.getMessage(), ExecutionReportFlag.WRONG_PARAMETER);
if(t instanceof PluginCleanupException) return new ExecutionReport(invocation, t.getMessage(), ExecutionReportFlag.FAILED_CLEANUP);
if(t instanceof PluginExecutionException) return new ExecutionReport(invocation, t.getMessage(), ExecutionReportFlag.FAILED_EXECUTION);
if(t instanceof PluginCleanupException) return new ExecutionReport(invocation, t.getMessage(), ExecutionReportFlag.FAILED_CLEANUP);
else {
log.error("Unable to handle Plugin exception {}, invocation was {}",t.getMessage(),invocation);
log.debug("Exception was ",t);
throw new RuntimeException("Unhandled case : ",t);
}
}else {
return new ExecutionReport(invocation, t.getMessage(), ExecutionReportFlag.UNABLE_TO_EXECUTE);
}
}
}