package org.gcube.application.cms.plugins.implementations; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.gcube.application.cms.plugins.reports.DocumentHandlingReport; import org.gcube.application.cms.plugins.requests.BaseExecutionRequest; @Slf4j public abstract class GuardedExecution { @Getter protected T result = null; protected T theReport; public T execute() throws Exception { log.trace("Executing {} ",theReport.getTheRequest()); if(theReport==null) throw new RuntimeException("Unexpected state : request cannot be null"); result = run(); log.trace("Report is {} ",theReport); return result; } public T getResult() { return result; } protected abstract T run() throws Exception; public GuardedExecution setTheReport(T theReport) { this.theReport = theReport; return this; } }