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.LsRequest;
import org.dcache.srm.request.Request;
import org.dcache.srm.util.JDC;
import org.dcache.srm.v2_2.SrmStatusOfLsRequestRequest;
import org.dcache.srm.v2_2.SrmStatusOfLsRequestResponse;
import org.dcache.srm.v2_2.TReturnStatus;
import org.dcache.srm.v2_2.TStatusCode;
import static com.google.common.base.Preconditions.checkNotNull;
public class SrmStatusOfLsRequest
{
private final SrmStatusOfLsRequestRequest request;
private SrmStatusOfLsRequestResponse response;
public SrmStatusOfLsRequest(SRMUser user,
SrmStatusOfLsRequestRequest request,
AbstractStorageElement storage,
SRM srm,
String clientHost)
{
this.request = checkNotNull(request);
}
public SrmStatusOfLsRequestResponse getResponse()
{
if (response == null) {
try {
response = srmStatusOfLsRequest();
} catch (SRMInvalidRequestException e) {
response = getFailedResponse(e.getMessage(), TStatusCode.SRM_INVALID_REQUEST);
}
}
return response;
}
private SrmStatusOfLsRequestResponse srmStatusOfLsRequest() throws SRMInvalidRequestException
{
LsRequest lsRequest = Request.getRequest(request.getRequestToken(), LsRequest.class);
try (JDC ignored = lsRequest.applyJdc()) {
return lsRequest.getSrmStatusOfLsRequestResponse();
}
}
public static final SrmStatusOfLsRequestResponse getFailedResponse(String error)
{
return getFailedResponse(error, TStatusCode.SRM_FAILURE);
}
public static final SrmStatusOfLsRequestResponse getFailedResponse(String error, TStatusCode statusCode)
{
SrmStatusOfLsRequestResponse srmStatusOfLsRequestResponse = new SrmStatusOfLsRequestResponse();
srmStatusOfLsRequestResponse.setReturnStatus(new TReturnStatus(statusCode, error));
return srmStatusOfLsRequestResponse;
}
}