package org.dcache.srm.handler;
import org.dcache.srm.AbstractStorageElement;
import org.dcache.srm.SRM;
import org.dcache.srm.SRMInvalidRequestException;
import org.dcache.srm.SRMUser;
import org.dcache.srm.request.ReserveSpaceRequest;
import org.dcache.srm.util.JDC;
import org.dcache.srm.v2_2.SrmStatusOfReserveSpaceRequestRequest;
import org.dcache.srm.v2_2.SrmStatusOfReserveSpaceRequestResponse;
import org.dcache.srm.v2_2.TReturnStatus;
import org.dcache.srm.v2_2.TStatusCode;
import static com.google.common.base.Preconditions.checkNotNull;
public class SrmStatusOfReserveSpaceRequest
{
private final SrmStatusOfReserveSpaceRequestRequest request;
private SrmStatusOfReserveSpaceRequestResponse response;
public SrmStatusOfReserveSpaceRequest(SRMUser user,
SrmStatusOfReserveSpaceRequestRequest request,
AbstractStorageElement storage,
SRM srm,
String clientHost)
{
this.request = checkNotNull(request);
}
public SrmStatusOfReserveSpaceRequestResponse getResponse()
{
if (response == null) {
try {
response = reserveSpaceStatus();
} catch (SRMInvalidRequestException e) {
response = getFailedResponse(e.getMessage(), TStatusCode.SRM_INVALID_REQUEST);
}
}
return response;
}
private SrmStatusOfReserveSpaceRequestResponse reserveSpaceStatus() throws SRMInvalidRequestException
{
String requestToken = request.getRequestToken();
if (requestToken == null) {
throw new SRMInvalidRequestException("Missing requestToken");
}
ReserveSpaceRequest request = ReserveSpaceRequest.getRequest(requestToken);
try (JDC ignored = request.applyJdc()) {
return request.getSrmStatusOfReserveSpaceRequestResponse();
}
}
public static final SrmStatusOfReserveSpaceRequestResponse getFailedResponse(String text)
{
return getFailedResponse(text, TStatusCode.SRM_FAILURE);
}
public static final SrmStatusOfReserveSpaceRequestResponse getFailedResponse(String text, TStatusCode statusCode)
{
SrmStatusOfReserveSpaceRequestResponse response = new SrmStatusOfReserveSpaceRequestResponse();
response.setReturnStatus(new TReturnStatus(statusCode, text));
return response;
}
}