gcube-cms-suite/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/GuardedMethod.java

61 lines
1.8 KiB
Java
Raw Normal View History

2021-09-20 16:47:35 +02:00
package org.gcube.application.geoportal.service.rest;
import lombok.extern.slf4j.Slf4j;
2022-03-18 18:35:43 +01:00
import org.gcube.application.geoportal.service.model.internal.faults.InvalidLockException;
import org.gcube.application.geoportal.service.model.internal.faults.ProjectLockedException;
import org.gcube.application.geoportal.service.model.internal.faults.ProjectNotFoundException;
2021-09-20 16:47:35 +02:00
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response.Status;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public abstract class GuardedMethod<T> {
private static List<Runnable> preoperations=new ArrayList<>();
public static void addPreoperation(Runnable preoperation){
preoperations.add(preoperation);
}
private T result=null;
public GuardedMethod<T> execute() throws WebApplicationException{
try {
if(!preoperations.isEmpty()) {
2022-03-30 18:39:10 +02:00
log.trace("Running preops (size : {} )", preoperations.size());
2021-09-20 16:47:35 +02:00
for (Runnable r : preoperations)
r.run();
}
2022-03-30 18:39:10 +02:00
log.trace("Executing actual method..");
2021-09-20 16:47:35 +02:00
result=run();
return this;
}catch(WebApplicationException e) {
2022-03-18 18:35:43 +01:00
log.error("Throwing Web Application Exception ", e);
2021-09-20 16:47:35 +02:00
throw e;
2022-03-18 18:35:43 +01:00
}catch(ProjectNotFoundException e){
throw new WebApplicationException("Project not found", e,Status.NOT_FOUND);
}catch(ProjectLockedException e){
throw new WebApplicationException("Project is currently locked", e,Status.PRECONDITION_FAILED);
}catch(InvalidLockException e){
log.error("Lock exception ",e);
throw new WebApplicationException("Conflicts found in locks", e,Status.CONFLICT);
2021-09-20 16:47:35 +02:00
}catch(Throwable t) {
log.error("Unexpected error ",t);
throw new WebApplicationException("Unexpected internal error", t,Status.INTERNAL_SERVER_ERROR);
}
}
public T getResult() {
return result;
}
protected abstract T run() throws Exception,WebApplicationException;
}