package org.dcache.srm.handler;
import org.apache.axis.types.URI;
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.GetRequest;
import org.dcache.srm.request.Request;
import org.dcache.srm.util.JDC;
import org.dcache.srm.v2_2.SrmStatusOfGetRequestRequest;
import org.dcache.srm.v2_2.SrmStatusOfGetRequestResponse;
import org.dcache.srm.v2_2.TReturnStatus;
import org.dcache.srm.v2_2.TStatusCode;
import static com.google.common.base.Preconditions.checkNotNull;
public class SrmStatusOfGetRequest
{
private final SrmStatusOfGetRequestRequest request;
private SrmStatusOfGetRequestResponse response;
public SrmStatusOfGetRequest(
SRMUser user,
SrmStatusOfGetRequestRequest request,
AbstractStorageElement storage,
SRM srm,
String clientHost)
{
this.request = checkNotNull(request);
}
public SrmStatusOfGetRequestResponse getResponse()
{
if (response == null) {
try {
response = srmGetStatus();
} catch (SRMInvalidRequestException e) {
response = getFailedResponse(e.getMessage(),
TStatusCode.SRM_INVALID_REQUEST);
}
}
return response;
}
private SrmStatusOfGetRequestResponse srmGetStatus()
throws SRMInvalidRequestException
{
String requestToken = request.getRequestToken();
GetRequest getRequest = Request.getRequest(requestToken, GetRequest.class);
try (JDC ignored = getRequest.applyJdc()) {
getRequest.tryToReady();
if (request.getArrayOfSourceSURLs() == null) {
return getRequest.getSrmStatusOfGetRequestResponse();
}
URI[] surls = request.getArrayOfSourceSURLs().getUrlArray();
if (surls.length == 0) {
return getRequest.getSrmStatusOfGetRequestResponse();
}
return getRequest.getSrmStatusOfGetRequestResponse(surls);
}
}
public static final SrmStatusOfGetRequestResponse getFailedResponse(String error)
{
return getFailedResponse(error, TStatusCode.SRM_FAILURE);
}
public static final SrmStatusOfGetRequestResponse getFailedResponse(String error, TStatusCode statusCode)
{
SrmStatusOfGetRequestResponse srmPrepareToGetResponse = new SrmStatusOfGetRequestResponse();
srmPrepareToGetResponse.setReturnStatus(new TReturnStatus(statusCode, error));
return srmPrepareToGetResponse;
}
}