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.BringOnlineRequest;
import org.dcache.srm.request.Request;
import org.dcache.srm.util.JDC;
import org.dcache.srm.v2_2.ArrayOfAnyURI;
import org.dcache.srm.v2_2.SrmStatusOfBringOnlineRequestRequest;
import org.dcache.srm.v2_2.SrmStatusOfBringOnlineRequestResponse;
import org.dcache.srm.v2_2.TReturnStatus;
import org.dcache.srm.v2_2.TStatusCode;
import static com.google.common.base.Preconditions.checkNotNull;
public class SrmStatusOfBringOnlineRequest
{
private final SrmStatusOfBringOnlineRequestRequest request;
private SrmStatusOfBringOnlineRequestResponse response;
public SrmStatusOfBringOnlineRequest(
SRMUser user,
SrmStatusOfBringOnlineRequestRequest request,
AbstractStorageElement storage,
SRM srm,
String clientHost)
{
this.request = checkNotNull(request);
}
public SrmStatusOfBringOnlineRequestResponse getResponse()
{
if (response == null) {
try {
response = srmStatusOfBringOnlineRequestResponse();
} catch (SRMInvalidRequestException e) {
response = getFailedResponse(e.getMessage(), TStatusCode.SRM_INVALID_REQUEST);
}
}
return response;
}
private SrmStatusOfBringOnlineRequestResponse srmStatusOfBringOnlineRequestResponse()
throws SRMInvalidRequestException
{
BringOnlineRequest bringOnlineRequest = Request.getRequest(request.getRequestToken(), BringOnlineRequest.class);
try (JDC ignored = bringOnlineRequest.applyJdc()) {
ArrayOfAnyURI arrayOfSourceSURLs = request.getArrayOfSourceSURLs();
if (arrayOfSourceSURLs == null
|| arrayOfSourceSURLs.getUrlArray() == null
|| arrayOfSourceSURLs.getUrlArray().length == 0) {
return bringOnlineRequest.getSrmStatusOfBringOnlineRequestResponse();
}
return bringOnlineRequest.getSrmStatusOfBringOnlineRequestResponse(arrayOfSourceSURLs.getUrlArray());
}
}
public static final SrmStatusOfBringOnlineRequestResponse getFailedResponse(String error)
{
return getFailedResponse(error, TStatusCode.SRM_FAILURE);
}
public static final SrmStatusOfBringOnlineRequestResponse getFailedResponse(String error, TStatusCode statusCode)
{
TReturnStatus status = new TReturnStatus(statusCode, error);
SrmStatusOfBringOnlineRequestResponse srmPrepareToGetResponse = new SrmStatusOfBringOnlineRequestResponse();
srmPrepareToGetResponse.setReturnStatus(status);
return srmPrepareToGetResponse;
}
}