package org.dcache.srm.handler; import org.apache.axis.types.URI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.dcache.srm.AbstractStorageElement; import org.dcache.srm.SRM; import org.dcache.srm.SRMException; import org.dcache.srm.SRMInvalidRequestException; import org.dcache.srm.SRMUser; import org.dcache.srm.request.PutRequest; import org.dcache.srm.request.Request; import org.dcache.srm.util.JDC; import org.dcache.srm.v2_2.SrmStatusOfPutRequestRequest; import org.dcache.srm.v2_2.SrmStatusOfPutRequestResponse; import org.dcache.srm.v2_2.TReturnStatus; import org.dcache.srm.v2_2.TStatusCode; import static com.google.common.base.Preconditions.checkNotNull; public class SrmStatusOfPutRequest { private static final Logger LOGGER = LoggerFactory.getLogger(SrmStatusOfPutRequest.class); private final SrmStatusOfPutRequestRequest statusOfPutRequestRequest; private SrmStatusOfPutRequestResponse response; public SrmStatusOfPutRequest( SRMUser user, SrmStatusOfPutRequestRequest statusOfPutRequestRequest, AbstractStorageElement storage, SRM srm, String clientHost) { this.statusOfPutRequestRequest = checkNotNull(statusOfPutRequestRequest); } public SrmStatusOfPutRequestResponse getResponse() { if (response == null) { try { response = srmPutStatus(); } catch (SRMInvalidRequestException e) { response = getFailedResponse(e.getMessage(), TStatusCode.SRM_INVALID_REQUEST); } catch (SRMException e) { LOGGER.error(e.toString()); response = getFailedResponse(e.toString()); } } return response; } private SrmStatusOfPutRequestResponse srmPutStatus() throws SRMException { String requestToken = statusOfPutRequestRequest.getRequestToken(); PutRequest putRequest = Request.getRequest(requestToken, PutRequest.class); try (JDC ignored = putRequest.applyJdc()) { putRequest.tryToReady(); if (statusOfPutRequestRequest.getArrayOfTargetSURLs() == null) { return putRequest.getSrmStatusOfPutRequestResponse(); } URI[] surls = statusOfPutRequestRequest.getArrayOfTargetSURLs().getUrlArray(); if (surls.length == 0) { return putRequest.getSrmStatusOfPutRequestResponse(); } return putRequest.getSrmStatusOfPutRequestResponse(surls); } } public static final SrmStatusOfPutRequestResponse getFailedResponse(String error) { return getFailedResponse(error, TStatusCode.SRM_FAILURE); } public static final SrmStatusOfPutRequestResponse getFailedResponse(String error, TStatusCode statusCode) { SrmStatusOfPutRequestResponse srmPrepareToPutResponse = new SrmStatusOfPutRequestResponse(); srmPrepareToPutResponse.setReturnStatus(new TReturnStatus(statusCode, error)); return srmPrepareToPutResponse; } }